2012-12-03 17 views
10

Ich habe eine große Sammlung von Personennamen (z. B. "John Smith"). Ich möchte Leute mit Namen darin suchen. Einige der Abfragen werden jedoch falsch geschrieben (z. B. "jon smth", "johnsmith"). Gibt es Bibliotheken zur Rechtschreibkorrektur mit Python-Bindungen, die für mich korrigierte Übereinstimmungen finden könnten?Rechtschreibkorrektur für Personennamen (Python)

Ich bin bewusst Whoosh und Python-Aspell. Die Rechtschreibkorrektur von Whoosh funktioniert bei mir nicht ganz, weil es die Sammlung korrekter Schreibweisen auf die Festplatte schreibt und nicht im Speicher ablegt. Das macht Lookups für meine Anwendung zu langsam. Es scheint nicht trivial zu sein, dieses Verhalten zu ändern, weil der Code strukturiert ist. Auch Whoosh gewichtet unterschiedliche Charakter-Edits nicht unterschiedlich, obwohl, zum Beispiel, ein 'y' viel eher mit einem 'i' ("jim kazinsky" -> "jim kazinski") verwechselt wird, als es ein 'z' ist. .

Aspell funktioniert nicht gut mit Personennamen, da Namen normalerweise Leerraum enthalten - Aspell betrachtet das Wort als die grundlegende Einheit der Korrektur. Außerdem, so wie ich es verstehe, verwendet Aspell ein N-Gramm-Modell der Rechtschreibkorrektur anstelle eines Zeichen-Bearbeitungs-Abstandsmodells. Während ein N-Gramm-Modell für Wörterbuchwörter sinnvoll ist, funktioniert es für Namen nicht so gut: Die Leute "bob ruzatoxg" und "joe ruzatoxg" haben viele seltene Trigramme gemeinsam, da sie denselben seltenen Nachnamen haben . Aber sie sind eindeutig verschiedene Leute.

Ich sollte auch erwähnen, dass ich nicht jede Abfrage mit allen Einträgen in der Sammlung vergleichen kann - das wäre zu langsam. Einige Indexe müssen vorher erstellt werden.

Danke!

Antwort

6

Klingt wie (kein Wortspiel beabsichtigt) Sie benötigen eine Form der Metaphone algorithm, die in Python implementiert wurde und ist verfügbar unter Pypi: http://pypi.python.org/pypi/Metaphone/0.4.

Es gibt auch andere Algorithmen zu, wie Levenshtein und Soundex (haben noch keine zuverlässige Python-Implementierung dieser gefunden) - Sie könnten eine Form der Metrik berechnen wollen mehr als eine davon mit (vielleicht sogar unterschiedliche Gewichtung geben zu jedem Ergebnis), um eine Ergebnisliste wahrscheinlicher Korrekturen zu erstellen.

+0

Die Metaphone Bibliothek sieht gut aus, danke dafür. Wenn ich am Ende meine eigene Rechtschreibprüfung für Namen schreibe (und ich hoffe immer noch, dass jemand bereits eine geschrieben hat, die ich benutzen kann ...), werde ich wahrscheinlich einen Metaphon-Abgleich eines Teils der Metrik verwenden. – Jeff

+0

Die Levenshtein-Bibliothek scheint mehr für paarweisen Abgleich zwischen zwei Strings zu sein. Ich glaube nicht, dass ich das verwenden kann, weil ich dann jede Abfrage mit jeder Namensfolge in meiner Sammlung vergleichen muss. Mit der Metaphone-Bibliothek sollte ich jedoch in der Lage sein, ein Wörterbuch der phonetischen Repräsentationen der Namen in meiner Sammlung zu erstellen, bevor Abfragen verarbeitet werden. – Jeff

+2

[Fuzzywuzzy] (http://seatgeek.com/blog/dev/fuzzywuzzy-fuzzy-string-matching-in-python) könnte eine Option sein. – Matthias