Как обрабатывать дублированные символы в общих строках при применении алгоритма сходства строк 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 функция имеет дело с вышеуказанной ситуацией?

Миллионы благодарностей!

0 ответов

Другие вопросы по тегам