Domanda

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

Ho utilizzato il codice di cui sopra, ma uscita ottenuta è 0.0. Come posso ottenere una risposta valida?

È stato utile?

Soluzione

Dimenticato il primo parametro a 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

Altri suggerimenti

Dalla documentazione:

Il SequenceMatcher classe 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. Questo si traduce in un rapporto di 0.0.

Un modo per superare questo (già citato da Lennart) è quello di passare esplicitamente None come primo parametro in più in modo tutte le parole chiave argomenti vengono assegnati i valori corretti.

Comunque ho appena trovato, e voluto 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top