1

我正忙于一个关于大量投诉数据的文本分析项目。数据的一个问题是您会得到同一个词的多个同义词,例如 bill、billing、billed、bills 等。通常我会创建一个词频列表并手动匹配明显的词频列表,然后将主要词应用回每个同义词实例的原始语料库,例如 billing, billed, bills -> bill(因为它都与账单相关)。我有一段漂亮的代码,这里有人帮助我。

最近我一直在尝试使用字符串距离算法通过识别可能的同义词来让我的生活更轻松的想法。我正在使用 stringdist 包,但我不知道如何有效地实施测试。基本上我需要一个所有单词的矩阵,并在交叉处是 stringdist 函数的结果。

我使用 stringdist 函数如下:

library(stringdist)
1 - stringdist('MARTHA','MATHRA',method='jw',p=0.1)

给出 0.955 的相似度分数

因此,从 a、b、c 的单词列表中,我想得到(值纯粹是指示性的):

   a    b    c
a  1    0.4  0.4
b  0.4  1    0.4
c  0.4  0.4  1

其中交集是 stringdist 函数的结果。

或者,我也可以使用:

a  a  1
a  b  0.4
a  c  0.4
b  a  0.4
b  b  1
b  c  0.4
c  a  0.4
c  b  0.4
c  c  1

后者的唯一问题是重复项,例如 a、b 和 b,a 可以消除,因为它产生相同的结果。

如此聪明的 R 编码器,请帮助我。我想答案在矩阵函数的某个地方,但我不是一个足够好的 R 编码器。

干杯

4

2 回答 2

1

如上所述删除重复项:

dist.mat.tab.sort <- t(apply(dist.mat.tab, 1, sort))
dist.mat.tab <- dist.mat.tab[!duplicated(dist.mat.tab.sort),]

其中 dist.mat.tab 是融化的距离矩阵

于 2016-06-21T00:26:36.217 回答
0

我建议你使用词干分析器,你会在 tm 包中找到它。如果需要使用距离测量,那么您可以使用余弦相似度而不是 Jaro-winkler。

于 2015-09-18T01:00:25.080 回答