2011-01-26 15 views

risposta

27

Hai dimenticato il primo parametro di SequenceMatcher.

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

Ehi bella risposta, c'è un modo per ottenere il numero di partite? – Mohsin

+0

get_matching_blocks() –

+0

ya ho ottenuto tutte le stringhe, ma non riesce a trovare tutte le stringhe comuni anche se hai autojunk impostato su false – Mohsin

13

Dalla documentazione:

La classe SequenceMatcher ha questo costruttore:

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

Il problema nel codice è che facendo

seq=difflib.SequenceMatcher(a,b) 

si passa a come rapporto qualità-isjunk e b come rapporto qualità-a, lasciando il valore di default per ''b. Ciò si traduce in un rapporto di 0.0.

Un modo per superare questo problema (già menzionato da Lennart) è di passare esplicitamente a None come primo parametro aggiuntivo in modo che tutti gli argomenti delle parole chiave vengano assegnati ai valori corretti.

Tuttavia ho appena trovato, e volevo citare un'altra soluzione, che non tocca l'argomento isjunk ma utilizza il metodo set_seqs() per specificare le diverse sequenze.

>>> import difflib 
>>> a = 'abcd' 
>>> b = 'ab123' 
>>> seq = difflib.SequenceMatcher() 
>>> seq.set_seqs(a.lower(), b.lower()) 
>>> d = seq.ratio()*100 
>>> print d 
44.44444444444444 
Problemi correlati