据我所知,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
答案 0 :(得分:2)
当q大于字符串长度时,当前stringdist::stringdist
假定未定义(Inf
)距离。
我当时的推理可能是,如果q小于输入字符串,那么从{字母表上的所有字符串集合}到{长度正整数向量| Sigma | ^ q}的映射没有明确的定义长度。这也是我在stringdist paper中写下来的方式。
qgrams
将这种情况映射到0向量,这确实是不一致的。
如果我在Ukkonen (1992)的论文中采用定义映射到0向量确实是正确的选择,暗示stringdist
中存在错误。
将修复。