2016-10-19 2 views
2

Je comprends que la distance q-gram est la somme des différences absolues entre les vecteurs q-gram des deux chaînes. Mais je vois un comportement étrange quand l'une des chaînes est plus courte que le q choisi.Pourquoi R stringdist renvoie-t-il Inf à une distance de q-gram avec une chaîne plus courte que q?

Donc, pour ces deux chaînes, tandis que la fonction qgrams est correcte:

> 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 

La fonction retourne stringdist:

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

au lieu de retourner:

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

Ai-je manqué quelque chose ou est-ce un bug? Merci.

versions stringdist: 0.9.4.1 et 0.9.4.2

Répondre

2
stringdist::stringdist

Actuellement assume une distance définie (Inf) lorsque q est plus grande que la longueur de la chaîne. Mon raisonnement à l'époque était probablement que la carte de {l'ensemble de toutes les chaînes sur un alphabet Sigma} à {vecteurs entiers positifs de longueur | Sigma |^q} n'a pas de définition explicite si q est inférieur à l'entrée Longueur de chaine. C'est aussi comment je l'ai écrit dans le stringdist paper.

qgramsqgramsqgrams fait correspondre de tels cas au vecteur 0, ce qui est en fait incohérent.

Si je prends la définition dans le document de Ukkonen (1992) mappage au 0-vecteur est en effet le bon choix, ce qui implique un bug dans stringdist.

Fixe.

+0

mise à jour: ajouté [bugreport] (https://github.com/markvanderloo/stringdist/issues/48) –

+1

maintenant enfin résolu en version GH. (0.9.4.5) –