2012-11-06 5 views
7

Ich versuche, einen Algorithmus, der Fehlerkorrektur in Namen durchführt. Mein Ansatz besteht darin, eine Datenbank mit den richtigen Namen zu erstellen, den Bearbeitungsabstand zwischen jedem von ihnen und den eingegebenen Namen zu berechnen und dann die 5 oder 10 am nächsten zu empfehlen.Fehlerkorrektur in Namen

Diese Aufgabe unterscheidet sich erheblich von der Standardfehlerkorrektur in Wörtern, da einige der Namen möglicherweise durch Initialen ersetzt werden. Zum Beispiel sind "Jonathan Smith" und "J. Smith" eigentlich ziemlich nah und könnten leicht als der selbe Name betrachtet werden, so dass die Editierungsdistanz wirklich klein sein sollte, wenn nicht 0. Eine andere Herausforderung ist, dass einige Namen anders geschrieben werden, während sie den gleich. Zum Beispiel Shnaider und Schneider sind Versionen desselben Namens, geschrieben von Leuten mit verschiedenen Locales (es gibt bessere Beispiele dafür, denke ich). Und noch ein Fall - stellen Sie sich alle möglichen Fehler beim Schreiben vor Jawaharlal Nehru die meisten haben nichts mit dem echten Namen zu tun. Wahrscheinlich werden die meisten von ihnen wieder phonetisch ähnlich sein.

Offensichtlich Lucene Fehlerkorrektur-Algorithmus wird mir hier nicht helfen, da es die oben genannten Fälle nicht behandelt.

Also meine Frage ist: Kennen Sie irgendeine Bibliothek in der Lage, Fehlerkorrektur in Namen zu tun? Können Sie einen Algorithmus zur Behandlung der oben genannten Fälle vorschlagen?

Ich interessiere mich für Bibliotheken in C++ oder Java. Was die Vorschläge für den Algorithmus anbelangt, ist jeder Sprach- oder Pseudocode geeignet.

+0

Ich sehe 2 mögliche Ansätze hier: 1. Haben Sie ein Wörterbuch von Synonymen und enthalten Sie es bei der Berechnung der Entfernung. 2. Verwenden Sie ein AI-Modul mit der von Ihnen beschriebenen Logik. – SomeWittyUsername

+0

Ich glaube, nur Option 2 ist für mich möglich, da ich Millionen von Namen, verschiedene Locales, verschiedene Synonyme habe. Das Problem hier ist ** wie ** die Logik umzusetzen, die ich speziell den phonetischen Ähnlichkeitsteil beschreibe. Auch ich wollte sichergehen, dass nichts ähnliches schon da draußen ist. –

+0

Seien Sie sehr vorsichtig dabei. Ich habe gerade ein mehrwöchiges Streitgespräch mit der UCSD beendet, wo ich für ein paar Jahre, die im Jahr 2009 endete, ein Student war. Sie verlangten von mir eine Schecküberweisung. Es wurde erst gelöst, als ich sie schließlich dazu brachte, das Bild des Schecks auszugraben, anstatt nur auf ihre Unterlagen zu schauen. Der Scheck wurde tatsächlich von jemandem mit dem gleichen Vor- und Nachnamen, aber mit einem mittleren Anfangsbuchstaben geschrieben. Die Buchhaltungsabteilung hatte angenommen, dass sie aufgrund des Namens "Near-Match" zu meinem Konto gehörte. Selbst genaue Namensübereinstimmungen sind nicht sehr nützlich, um zu bestimmen, ob Daten über dieselbe Person sind. –

Antwort

6

Zum phonetischen Abgleich siehe Soundex.

Ich denke, das Ändern eines Levenshtein-Distanzalgorithmus, um "Abkürzung zu einer Initiale" zu behandeln und "expand von einer Initiale" als Einzelentfernungsänderungen sollte geradlinig sein, aber die Details sind im Moment über mir.

+0

Soundex ist definitiv etwas, das ich nutzen kann. Danke für das :) –