我正在处理我需要计算字符串中人物的唯一名称的问题,但考虑到可能存在轻微的错别字。 我的想法是将字符串设置为低于某个阈值(例如,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;取代或者相反。
答案 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距离)。