Почему R stringdist возвращает Inf на расстоянии q-грамм с одной строкой, меньшей q?

Я понимаю, что расстояние q-граммы является суммой абсолютных разностей между векторами 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

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

Версии строки: 0.9.4.1 и 0.9.4.2

1 ответ

Решение

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

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

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

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

Починю.

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