Python: a exclusão de objetos semelhantes a partir de uma lista usando difflib.SequenceMatcher

votos
43

Digamos que eu tenho uma lista de algumas cordas, e há certas seqüências lá que muito, muito similar. E eu quero excluir esses quase duplicados . Para isso, eu vim com o seguinte 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 bem, mas eu realmente não gosto de loops aninhados e também esta countsolução parece feio. Mas, provavelmente, é possível anotá-la de uma forma mais Pythonic? Usando geradores, pode ser?

Ficaria grato por uma dica, obrigado :)

Publicado 14/12/2017 em 16:09
usuário
Em outras línguas...                            


1 respostas

votos
1

Eu acho que uma maneira mais limpa para escrever este seria a utilização 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)]

Note que este desconstrói lassim que você pode querer fazer uma cópia do primeiro.

Respondeu 14/12/2017 em 16:46
fonte usuário

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