Python: Löschen ähnliche Objekte aus einer Liste mit difflib.SequenceMatcher

stimmen
43

Lassen Sie uns sagen , dass ich eine Liste von einigen Strings haben, und es gibt es bestimmte Zeichenketten, die sehr, sehr ähnlich. Und ich möchte diese löschen fast Duplikate . Dafür kam ich mit dem folgenden Code auf:

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)

Welche scheint gut zu funktionieren , aber ich weiß nicht wirklich wie verschachtelte Schleifen und auch diese countLösung sieht hässlich aus . Aber wahrscheinlich ist es möglich , sie in einer Pythonic Weise aufzuschreiben? Mit Generatoren, sein kann?

Wäre dankbar für einen Hinweis, Dank :)

Veröffentlicht am 14/12/2017 um 16:09
vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
1

Ich denke , ein sauberer Weg , dies zu schreiben , wäre zu verwenden difflibMethodeget_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)]

Beachten Sie, dass diese dekonstruiert , lso dass Sie zunächst eine Kopie davon machen möchten.

Beantwortet am 14/12/2017 um 16:46
quelle vom benutzer

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