如何在应用Jaro String Similarity算法时处理公共字符串中的重复字符

时间:2014-09-23 09:01:14

标签: r string algorithm jaro-winkler stringdist

在应用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).

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

如果应用&#39; stringdist&#39;功能在R&#39; stringdist&#39;包装,将获得以下结果:

> 1 - stringdist('profjohndoe','drjohndoe',method='jw')
[1] 0.7887205

似乎是:

  

三分之一*(8/9 + 8/11 +(8-2​​)/ 8)       [1] 0.7887205

上面的结果表明stringdist计算了长度为8的普通字符串。遵循这个事实,    如果按摩char_ins1_canfound_ins2成为&#39; rojohnde&#39;,应该有6次换位,这应该达到1/3 *(8/9 + 8/11 +(8-3)/ 8)    如果按摩char_ins1_canfound_ins2成为&#39; rojhndoe&#39;,应该有2次换位,这应该达到1/3 *(8/9 + 8/11 +(8-1)/ 8)

R stringdist功能如何处理上述情况?

数百万的感谢!

0 个答案:

没有答案