Gegeben sind zwei Listen mit Strings.
Eins enthält den Namen von Organisationen (meist Universitäten) auf der ganzen Welt - nicht nur auf Englisch geschrieben, sondern immer mit lateinischem Alphabet.
Die andere Liste enthält meistens vollständige Adressen, in denen Strings (Organisationen) aus der ersten Liste vorkommen können.
Ein Beispiel:
%Vor%Wie Sie sehen können, wäre das gewünschte Mapping:
%Vor% Mein Gedanke war, eine Art "Distanzalgorithmus" zu verwenden, um die Ähnlichkeit der Strings zu berechnen. Da ich nicht einfach in einer Adresse nach einer Organisation suchen kann, mache ich einfach if address in organisation
, weil sie an verschiedenen Stellen etwas anders geschrieben werden könnte. Meine erste Vermutung war das difflib-Modul. Vor allem die difflib.get_close_matches()
-Funktion, um für jede Adresse den nächsten String aus der Organisationsliste auszuwählen. Aber ich bin nicht ganz sicher, dass die Ergebnisse genau genug sein werden. Obwohl ich nicht weiß, wie hoch ich das Verhältnis einstellen sollte, das ein Ähnlichkeitsmaß scheint.
Bevor ich zu viel Zeit mit dem Testen des difflib-Moduls verbracht habe, habe ich daran gedacht, die erfahreneren Leute hier zu fragen, ob dies der richtige Ansatz ist oder ob es ein geeigneteres Werkzeug gibt, um mein Problem zu lösen. Danke!
PS: Ich brauche keine optimale Lösung.
Verwenden Sie Folgendes als Ihre String-Distanz-Funktion (anstelle der einfachen Levenshtein-Distanz):
%Vor%Verwenden Sie dann den Munkres-Zuweisungsalgorithmus hier dargestellt, da es scheint, dass es eine 1: 1-Zuordnung zwischen Organisationen und Adressen gibt.
Sie können mit soundex oder metaphone den Satz in eine Liste von Phonems übersetzen und dann die ähnlichsten Listen vergleichen.
Hier ist eine Python-Implementierung des Doppel-Metaphone-Algo .
Tags und Links python string-matching