¿Cómo usar secuencematcher para encontrar similitud entre dos cadenas?
Pregunta
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
Usé el código anterior pero la salida obtenida es 0.0. ¿Cómo puedo obtener una respuesta válida?
Solución
Olvidó el primer parámetro en secuencematcher.
>>> import difflib
>>>
>>> a='abcd'
>>> b='ab123'
>>> seq=difflib.SequenceMatcher(None, a,b)
>>> d=seq.ratio()*100
>>> print d
44.4444444444
Otros consejos
De los documentos:
los Secuencematcher La clase tiene este constructor:
class difflib.SequenceMatcher(isjunk=None, a='', b='', autojunk=True)
El problema en su código es que al hacer
seq=difflib.SequenceMatcher(a,b)
estas pasando a
como valor para isjunk
y b
como valor para a
, dejando el valor predeterminado ''
valor por b
. Esto da como resultado una relación de 0.0
.
Una forma de superar esto (ya mencionado por Lennart) es pasar explícitamente None
Como primer parámetro adicional, a todos los argumentos de palabras clave se asignan los valores correctos.
Sin embargo, acabo de encontrar, y quería mencionar otra solución, que no toca el isjunk
argumento pero usa el set_seqs()
Método para especificar las diferentes secuencias.
>>> import difflib
>>> a = 'abcd'
>>> b = 'ab123'
>>> seq = difflib.SequenceMatcher()
>>> seq.set_seqs(a.lower(), b.lower())
>>> d = seq.ratio()*100
>>> print d
44.44444444444444