Python: l'eliminazione di oggetti simili da un elenco utilizzando difflib.SequenceMatcher

voti
43

Diciamo che ho una lista di alcune stringhe, e ci sono alcune stringhe lì che molto, molto simili. E voglio eliminare tali quasi duplicati . Per questo, mi si avvicinò con il seguente codice:

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)

Che sembra funzionare bene ma non mi piace molto cicli nidificati e anche questa countsoluzione sembra brutto. Ma probabilmente è possibile scriverlo in un modo più Pythonic? Utilizzando generatori, può essere?

Sarei grato per un suggerimento, grazie :)

È pubblicato 14/12/2017 alle 16:09
dall'utente
In altre lingue...                            


1 risposte

voti
1

Penso che un modo più pulito per scrivere questo sarebbe quello di utilizzare difflibil metodoget_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)]

Si noti che questo decostruisce lquindi si consiglia di fare una copia di esso prima.

Risposto il 14/12/2017 a 16:46
fonte dall'utente

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