Fuzzy String Matching in Python

Ich habe 2 Listen mit über einer Million Namen mit leicht abweichenden Namenskonventionen. Das Ziel hier ist es, die Datensätze, die ähnlich sind, mit der Logik von 95% Vertrauen abzugleichen.

Mir wurde bewusst, dass es Bibliotheken gibt, auf die ich zurückgreifen kann, z. B. das FuzzyWuzzy-Modul in Python.

Bei der Verarbeitung scheint es jedoch zu viel Ressourcen in Anspruch zu nehmen, wenn jede Zeichenfolge in einer Liste mit der anderen verglichen wird. In diesem Fall ist anscheinend 1 Million multipliziert mit einer weiteren Million Iterationen erforderlich.

ibt es noch andere effizientere Methoden für dieses Proble

AKTUALISIEREN

So habe ich eine Bucketing-Funktion erstellt und eine einfache Normalisierung zum Entfernen von Leerzeichen, Symbolen und zum Konvertieren der Werte in Kleinbuchstaben usw. angewendet.

for n in list(dftest['YM'].unique()):
    n = str(n)
    frame = dftest['Name'][dftest['YM'] == n]
    print len(frame)
    print n
    for names in tqdm(frame):
            closest = process.extractOne(names,frame)

Mit Pythons Pandas werden die Daten in nach Jahren gruppierte kleinere Buckets geladen und anschließend mit dem FuzzyWuzzy-Modulprocess.extractOne wird verwendet, um die beste Übereinstimmung zu erzielen.

Ergebnisse sind noch etwas enttäuschend. Während des Tests wird der obige Code in einem Testdatenrahmen verwendet, der nur fünftausend Namen enthält und fast eine ganze Stunde in Anspruch nimmt.

Die Testdaten werden aufgeteilt nach.

NamJahr Geburtsmonat

Und ich vergleiche sie anhand von Eimern, in denen sich ihre YMs im selben Eimer befinden.

Kann das Problem an dem von mir verwendeten FuzzyWuzzy-Modul liegen? Schätzen Sie jede Hilfe.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage