2017-12-16 14 views
1

文字列内の人の固有の名前を数えて、わずかなタイプミスがあるかもしれないということを考慮する必要があるという問題に取り組んでいます。 文字列を一定のしきい値(たとえば、2より下のレベンションの距離)以下に設定することを考えました。今は文字列の距離を計算することができますが、入力文字列に変更を加えずに、正しい数の一意の名前を得ることができます。R:距離尺度で文字列を修正する(文字列リスト)

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の正しい値は「マイケルは」「Miichael」に置き換えてしまう場合はもちろん、3

私はユニーク名の数で唯一興味を持っていたようで、私は心配していないです、でなければなりませんまたは他の方法ラウンド。 (qgrams /コサイン有用である可能性が

あなたは、距離の種類を試してみる必要があるでしょう、あなたの実際のデータに応じて、
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) 

、または:

+3

問題が明確になっているかどうかわかりません。 Maria、Mara、Sara、Sarahの名前を考えてみましょう。 MariaとSarahの距離は2以上ですが、連続した各ペアの距離は1です。また、ほとんどの人はその名前リストに3つの固有の名前が含まれていると思うでしょう。 –

答えて

0

1つのオプションは、それらの距離行列に基づいて名前をクラスタ化しようとすることです名前の場合はjaro-winklerの距離)。

関連する問題