2016-10-19 2 views
2

Насколько я понимаю, расстояние q-грамм является суммой абсолютных разностей между q-грамм-векторами обеих строк. Но я вижу какое-то странное поведение, когда одна из строк короче, чем выбранная q.Почему R stringdist возвращает Inf в q-граммовом расстоянии с одной строкой короче q?

Так что для этих двух строк, в то время как функция qgrams правильно:

> qgrams("a", "the cat sat on the mat", q = 2) 
    th he t sa on n ma e c ca at s t o m 
V1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
V2 2 2 2 1 1 1 1 2 1 1 3 1 1 1 1 

В stringdist функция возвращает:

> stringdist("a", "the cat sat on the mat", q = 2, method = "qgram") 
[1] Inf 

Вместо возвращения:

> sum(qgrams("a", "the cat sat on the mat", q = 2)[2,]) 
[1] 21 

ли я скучаю что-то или это ошибка? Благодарю.

stringdist версии: 0.9.4.1 и 0.9.4.2

ответ

2

В настоящее время stringdist::stringdist предполагает неопределенное (Inf) расстояние при д больше, чем длина строки.

Мое предположение, вероятно, в то время, что карта из {набора всех строк над алфавитом Sigma} на {положительные целые векторы длины | Sigma |^q} не имеет четкого определения, если q меньше входного длина строки. Это также то, как я записал его в stringdist paper.

qgrams отображает такие случаи на 0-вектор, что действительно противоречиво.

Если я беру определение в статье Ukkonen (1992), то отображение в 0-вектор действительно является правильным выбором, подразумевая ошибку в stringdist.

Будет исправлен.

+0

обновление: добавлено [bugreport] (https://github.com/markvanderloo/stringdist/issues/48) –

+1

теперь окончательно разрешено в версии GH. (0.9.4.5) –

Смежные вопросы