Comment utiliser SequenceMatcher pour trouver la similarité entre deux chaînes?
Question
import difflib
a='abcd'
b='ab123'
seq=difflib.SequenceMatcher(a=a.lower(),b=b.lower())
seq=difflib.SequenceMatcher(a,b)
d=seq.ratio()*100
print d
I utilisé le code ci-dessus, mais la production obtenue est de 0,0. Comment puis-je obtenir une réponse valide?
La solution
Vous avez oublié le premier paramètre à SequenceMatcher.
>>> import difflib
>>>
>>> a='abcd'
>>> b='ab123'
>>> seq=difflib.SequenceMatcher(None, a,b)
>>> d=seq.ratio()*100
>>> print d
44.4444444444
Autres conseils
A partir de la documentation:
La classe SequenceMatcher a ce constructeur:
class difflib.SequenceMatcher(isjunk=None, a='', b='', autojunk=True)
Le problème dans votre code est que, en faisant
seq=difflib.SequenceMatcher(a,b)
vous passez a
comme valeur de isjunk
et b
comme valeur de a
, laissant la valeur par défaut pour ''
b
. Il en résulte un rapport de 0.0
.
Une façon de surmonter ce (déjà mentionné par Lennart) est de passer explicitement None
en tant que premier paramètre supplémentaire de sorte que tous les arguments mot clés assignés les valeurs correctes.
Cependant, je viens de découvrir, et je voulais mentionner une autre solution, qui ne touche pas l'argument isjunk
mais utilise la méthode set_seqs()
pour spécifier les différentes séquences.
>>> import difflib
>>> a = 'abcd'
>>> b = 'ab123'
>>> seq = difflib.SequenceMatcher()
>>> seq.set_seqs(a.lower(), b.lower())
>>> d = seq.ratio()*100
>>> print d
44.44444444444444