4

在应用 Jaro 字符串相似度算法时,我正在努力定义两个字符串之间的公共字符串。

说我们有

 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).

现在我遇到一个常见的字符字符串长度不相等的情况,如何处理?

如果在 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函数如何处理上述情况?

百万感谢!

4

0 回答 0