在应用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
功能如何处理上述情况?
数百万的感谢!