Python: la suppression d'objets similaires à partir d'une liste à l'aide difflib.SequenceMatcher

voix
43

Disons que j'ai une liste de chaînes, et il y a certaines chaînes là que très, très semblable. Et je veux supprimer ces presque doublons . Pour cela, je suis venu avec le code suivant:

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)

Ce qui semble fonctionner très bien mais je ne vraiment pas comme les boucles imbriquées et aussi cette countsolution semble laid. Mais sans doute il est possible d'écrire d'une manière plus Pythonic? L' utilisation des générateurs, peut - être?

Serait reconnaissant un soupçon, merci :)

Créé 14/12/2017 à 16:09
utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

Je pense que d' une manière plus propre d'écrire ce serait d'utiliser la difflibméthodeget_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)]

Notez que cette déstructure de lsorte que vous pouvez faire une copie d' abord.

Créé 14/12/2017 à 16:46
source utilisateur

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