Wie benutze ich Sequencematcher, um Ähnlichkeit zwischen zwei Zeichenfolgen zu finden?

StackOverflow https://stackoverflow.com/questions/4802137

  •  22-10-2019
  •  | 
  •  

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?

War es hilfreich?

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

http://docs.python.org/library/difflib.html

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top