Почему 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
,
Починю.