Python: eliminación de objetos similares de una lista usando difflib.SequenceMatcher

votos
43

Digamos que tengo una lista de algunas cadenas, y hay ciertas cadenas de ahí que muy, muy similares. Y yo quiero eliminar esos casi duplicados . Por eso, me encontré con el siguiente código:

from difflib import SequenceMatcher

l = ['Apple', 'Appel', 'Aple', 'Mango']
c = [l[0]]

for i in l:
    count = 0
    for j in c:
        if SequenceMatcher(None, i, j).ratio() < 0.7:
            count += 1
    if count == len(c):
        c.append(i)

Que parece funcionar bien, pero no me gusta mucho bucles anidados y también esta countsolución se ve feo. Pero, probablemente, es posible escribirlo de una manera más Pythonic? El uso de generadores, puede ser?

Agradecería una pista, gracias :)

Publicado el 14/12/2017 a las 13:09
por usuario
En otros idiomas...                            


1 respuestas

votos
1

Creo que una forma más limpia de escribir este sería el uso de difflibmétodoget_close_matches

from difflib import get_close_matches

l = ['Apple', 'Appel', 'Aple', 'Mango']
c = []

while l:
    word = l.pop()
    c.append(word)
    l = [x for x in l if x not in get_close_matches(word, l, cutoff=0.7)]

Tenga en cuenta que este deconstruye lasí que es posible que desee hacer una copia de él en primer lugar.

Respondida el 14/12/2017 a las 13:46
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more