R字符串相似度矩阵

时间:2014-12-11 03:20:36

标签: r tm synonym stringdist

我正忙着处理大量投诉数据的文本分析项目。数据的一个问题是您获得同一个单词的多个同义词,例如通常我会创建一个单词频率列表并手动匹配明显的单词,然后将主单词应用回原始语料库,用于每个同义词实例,例如,单词,计费,计费,账单等。账单,账单,账单 - >账单(因为它与账单有关)。我有一段很棒的代码,有人在这里帮助我。

最近,我一直在尝试使用字符串距离算法,通过识别可能的同义词来让我的生活更轻松。我正在使用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编码器。

干杯

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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是熔化的距离矩阵