为什么R stringdist在q-gram距离内返回Inf,其中一个字符串短于q?

时间:2016-10-19 08:58:18

标签: r stringdist

据我所知,q-gram距离是两个字符串的q-gram向量之间的绝对差值之和。但是当其中一个字符串短于所选择的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

1 个答案:

答案 0 :(得分:2)

当q大于字符串长度时,当前stringdist::stringdist假定未定义(Inf)距离。

我当时的推理可能是,如果q小于输入字符串,那么从{字母表上的所有字符串集合}到{长度正整数向量| Sigma | ^ q}的映射没有明确的定义长度。这也是我在stringdist paper中写下来的方式。

qgrams将这种情况映射到0向量,这确实是不一致的。

如果我在Ukkonen (1992)的论文中采用定义映射到0向量确实是正确的选择,暗示stringdist中存在错误。

将修复。