我正忙着处理大量投诉数据的文本分析项目。数据的一个问题是您获得同一个单词的多个同义词,例如通常我会创建一个单词频率列表并手动匹配明显的单词,然后将主单词应用回原始语料库,用于每个同义词实例,例如,单词,计费,计费,账单等。账单,账单,账单 - >账单(因为它与账单有关)。我有一段很棒的代码,有人在这里帮助我。
最近,我一直在尝试使用字符串距离算法,通过识别可能的同义词来让我的生活更轻松。我正在使用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编码器。
干杯
答案 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是熔化的距离矩阵