2011-01-26 15 views

Odpowiedz

27

Zapomniałeś pierwszego parametru do SequenceMatchera.

>>> 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

+0

Hej miły odpowiedź, czy jest jakiś sposób, aby uzyskać liczbę meczów? – Mohsin

+0

get_matching_blocks() –

+0

ya Mam wszystkie ciągi, ale nie można odnaleźć wszystkich wspólnych ciągów, nawet jeśli masz autoodrzut ustawiony na false – Mohsin

13

Od docs:

Klasa SequenceMatcher ma tego konstruktora:

class difflib.SequenceMatcher(isjunk=None, a='', b='', autojunk=True)

Problem w kodzie jest, że wykonując

seq=difflib.SequenceMatcher(a,b) 

jesteś przejazdem a jako wartość dla isjunk i b jako wartość dla a, pozostawiając domyślne wartości '' dla b. Daje to stosunek 0.0.

Jednym ze sposobów na pokonanie tego problemu (wspomnianego już przez Lennarta) jest jawne przekazanie None jako dodatkowego pierwszego parametru, aby wszystkie argumenty słów kluczowych miały przypisane prawidłowe wartości.

Jednak ja po prostu znaleźć, a chciałem wspomnieć innego rozwiązania, które nie dotykać isjunk argumentu ale wykorzystuje metodę set_seqs() określić różne sekwencje.

>>> import difflib 
>>> a = 'abcd' 
>>> b = 'ab123' 
>>> seq = difflib.SequenceMatcher() 
>>> seq.set_seqs(a.lower(), b.lower()) 
>>> d = seq.ratio()*100 
>>> print d 
44.44444444444444 
Powiązane problemy