Jaro 文字列類似度アルゴリズムを適用するときに、2 つの文字列間の共通文字列の定義に苦労しています。
私たちが持っていると言う
s1 = 'profjohndoe'
s2 = 'drjohndoe'
BY Jaro 類似性、半分の長さはfloor(11/2) - 1 = 4
であり、アルゴリズムによって定義され、s1[i] = s2[j]
共通であるとカウントされます。abs(i-j)<=4
マッピング行列は
p r o f j o h n d o e
d 0 0 0 0 0 0 0 0 0 0 0
r 0 1 0 0 0 0 0 0 0 0 0
j 0 0 0 0 1 0 0 0 0 0 0
o 0 0 1 0 0 1 0 0 0 0 0
h 0 0 0 0 0 0 1 0 0 0 0
n 0 0 0 0 0 0 0 1 0 0 0
d 0 0 0 0 0 0 0 0 1 0 0
o 0 0 0 0 0 1 0 0 0 1 0
e 0 0 0 0 0 0 0 0 0 0 1
したがって:
char_ins1_canfound_ins2 would be 'rojohndoe' (in their presented order in s1);
char_ins2_canfound_ins1 would be 'rjohndoe' (in their presented order in s2).
現在、一般的な char 文字列の長さが等しくない場合がありますが、これにどう対処すればよいですか?
R 'stringdist' パックで 'stringdist' 関数を適用すると、次の結果が得られます。
> 1 - stringdist('profjohndoe','drjohndoe',method='jw')
[1] 0.7887205
次のように見えます:
1/3*(8/9+8/11+(8-2)/8) [1] 0.7887205
上記の結果は、stringdist が長さ 8 の共通文字列をカウントしたことを示しています。この事実に従って、char_ins1_canfound_ins2
「rojohnde」になるようにメッセージを送信すると、6 つの転置があるはずであり、1/3*(8/9+8/11+(8- 3)/8) char_ins1_canfound_ins2
「rojhndoe」になるようにマッサージすると、2 つの転置があり、1/3*(8/9+8/11+(8-1)/8) になるはずです。
Rstringdist
関数は上記の状況にどのように対処しますか?
何百万もの感謝!