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
J'ai utilisé le code ci-dessus mais la sortie obtenue est de 0,0. Comment puis-je obtenir une réponse valide?
Vous avez oublié le premier paramètre de SequenceMatcher.
>>> import difflib
>>>
>>> a='abcd'
>>> b='ab123'
>>> seq=difflib.SequenceMatcher(None, a,b)
>>> d=seq.ratio()*100
>>> print d
44.4444444444
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 qu'en faisant
seq=difflib.SequenceMatcher(a,b)
vous passez a
comme valeur pour isjunk
et b
comme valeur pour a
, en laissant la valeur par défaut ''
pour b
. Il en résulte un ratio de 0.0
.
Une façon de surmonter cela (déjà mentionnée par Lennart) est de passer explicitement None
comme premier paramètre supplémentaire afin que tous les arguments de mot-clé reçoivent les valeurs correctes.
Cependant, je viens de trouver, 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