R:通过距离测量校正字符串(stringdistmatrix)

时间:2017-12-16 19:30:37

标签: r stringr stringdist

我正在处理我需要计算字符串中人物的唯一名称的问题,但考虑到可能存在轻微的错别字。 我的想法是将字符串设置为低于某个阈值(例如,levenshtein距离低于2)为相等。现在我设法计算字符串距离,但没有对我的输入字符串进行任何更改,这将使我获得正确数量的唯一名称。

library(stringdist);library(stringr)
names<-"Michael, Liz, Miichael, Maria"
names_split<-strsplit(names, ", ")[[1]]
stringdistmatrix(names_split,names_split)
     [,1] [,2] [,3] [,4]
[1,]    0    6    1    5
[2,]    6    0    7    4
[3,]    1    7    0    6
[4,]    5    4    6    0
(number_of_people<-str_count(names, ",")+1)
[1] 4

number_of_people的正确值当然应为3。

由于我只对uniques名称的数量感兴趣,所以我并不关心&#34; Michael&#34;被Miichael&#34; Miichael&#34;取代或者相反。

1 个答案:

答案 0 :(得分:0)

一种选择是尝试根据距离矩阵对名称进行聚类:

library(stringdist)
# create a 'dist' object (=lower triangular part of distance matrix)
d <- stringdistmatrix(names_split,method="osa")
# use hierarchical clustering to group nearest neighbors
hc <- hclust(d)
# visual inspection: y-axis labels the distance value
plot(hc)
# decide what distance value you find acceptable for grouping.
cutree(hc, h=3)

根据您的实际数据,您需要尝试距离类型(qgrams / cosine可能有用,或者名称为jaro-winkler距离)。