Wie benutze ich Sequencematcher, um Ähnlichkeit zwischen zwei Zeichenfolgen zu finden?
Frage
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
Ich habe den obigen Code verwendet, aber die erhaltene Ausgabe beträgt 0,0. Wie kann ich eine gültige Antwort erhalten?
Lösung
Sie haben den ersten Parameter für Sequencematcher vergessen.
>>> import difflib
>>>
>>> a='abcd'
>>> b='ab123'
>>> seq=difflib.SequenceMatcher(None, a,b)
>>> d=seq.ratio()*100
>>> print d
44.4444444444
Andere Tipps
Aus den Dokumenten:
Das Sequencematcher Klasse hat diesen Konstruktor:
class difflib.SequenceMatcher(isjunk=None, a='', b='', autojunk=True)
Das Problem in Ihrem Code ist das durch, indem Sie dies tun
seq=difflib.SequenceMatcher(a,b)
Sie bestehen a
als Wert für isjunk
und b
als Wert für a
, den Standard verlassen ''
Wert für b
. Dies führt zu einem Verhältnis von 0.0
.
Eine Möglichkeit, dies zu überwinden (bereits von Lennart erwähnt), besteht darin, explizit zu bestehen None
Als zusätzlicher erster Parameter werden allen Schlüsselwortargumenten die richtigen Werte zugewiesen.
Allerdings habe ich nur gefunden und wollte eine andere Lösung erwähnen, die das nicht berührt isjunk
Argument, verwendet aber die set_seqs()
Methode zur Angabe der verschiedenen Sequenzen.
>>> import difflib
>>> a = 'abcd'
>>> b = 'ab123'
>>> seq = difflib.SequenceMatcher()
>>> seq.set_seqs(a.lower(), b.lower())
>>> d = seq.ratio()*100
>>> print d
44.44444444444444