R字符串相似度矩阵
问题描述:
我忙于处理大量投诉数据的文本分析项目。数据的一个问题是你得到同一单词的多个同义词,例如,账单,计费,账单,账单等。通常我会创建一个词频列表并手动匹配显而易见的词,然后将主词应用回原始语料库以用于每个同义词实例,例如,账单,账单,账单 - >账单(因为它是所有账单相关的)。我有一个漂亮的代码,有人在这里帮助我。R字符串相似度矩阵
最近我一直在玩弄使用字符串距离算法的想法,通过识别可能的同义词来使我的生活更轻松。我正在使用stringdist软件包,但如何高效地实施测试,我感到很茫然。基本上我需要一个所有单词的矩阵,并在交叉点处使用stringdist函数的结果。
我使用stringdist功能如下:
library(stringdist)
1 - stringdist('MARTHA','MATHRA',method='jw',p=0.1)
给出了A,B,C的单词列表的0.955
那么的相似性得分,我想要去(值仅供参考):
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编码器。
干杯
答
以便移除重复如上所述:
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是熔融的距离矩阵
答
我建议你使用stemmer,你会发现它在tm包。如果需要使用距离测量,则可以使用余弦相似度而不是Jaro-winkler。
是否有可能订购的话,然后进行与对您的表规定第2列中的项目不能小于/低于第1列? – user2627717 2014-12-11 03:24:35
我怀疑'stringdist'是矢量化的,所以你注定要慢速循环。假设你有'n'个词,并且对该函数调用'n *(n-1)/ 2'的速度太慢,那么在尝试减小问题大小时你必须有创意。例如,只能处理以相同字母开头的子组的单词。 – flodel 2014-12-11 03:35:17
如果你想使用package'stringdist'那么为什么不使用'stringdistmatrix(...)'?另外,如果您对Levenshtein距离感到满意,则可以在基数R中使用'adist(...)'。 – jlhoward 2014-12-11 04:17:45