Как обрабатывать дублированные символы в общих строках при применении алгоритма сходства строк Jaro
Я пытаюсь определить общую строку между двумя строками, применяя алгоритм сходства строк Jaro.
скажем, у нас есть
s1 = 'profjohndoe'
s2 = 'drjohndoe'
По сходству Яро половина длины 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).
Теперь у меня есть случай, когда обычные строки символов имеют неравную длину, как с этим бороться?
если применить функцию 'stringdist' в пакете R '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)
Как это R stringdist
функция имеет дело с вышеуказанной ситуацией?
Миллионы благодарностей!