Frage

Ich bin kein Programmierung Student Natural Language, aber ich weiß, es ist nicht trivial strcmp (n1, n2).

Hier ist, was ich gelernt habe, so weit:

  • Persönliche Namen Vergleich nicht gelöst 100%
  • werden
  • gibt es Möglichkeiten gewissen Grad an Genauigkeit zu erreichen.
  • wird die Antwort sein locale-spezifisch, das ist OK.

Ich bin nicht auf der Suche nach Buchstabieralternativen! Die Annahme ist, dass die Eingabe des Schreibweise.

Zum Beispiel, alle unter Namen auf die gleiche Person beziehen können:

  • Berry Tsakala
  • Bernard Tsakala
  • Berry J. Tsakala
  • Tsakala, Berry

Ich versuche, zu:

  1. Build (oder Kopieren) ein Algorithmus, um die Beziehung 2 Eingabenamen, die Qualitäten
  2. Geben Sie eine Indizierungsmethode finden (für Namen in der Datenbank, für Hash-Tabellen, usw.)

Hinweis: Meine Aufgabe ist es nicht über Namen in Text zu finden, aber zwei Namen zu vergleichen. z.B.

name_compare( "James Brown", "Brown, James", "en-US" ) ---> 99.0%
War es hilfreich?

Lösung

Ich benutzen Tanimoto Koeffizient für eine schnelle (aber nicht super) Lösung, in Python:

"""
Formula:
  Na = number of set A elements
  Nb = number of set B elements
  Nc = number of common items

  T = Nc / (Na + Nb - Nc)
"""
def tanimoto(a, b):
    c = [v for v in a if v in b]
    return float(len(c)) / (len(a)+len(b)-len(c))

def name_compare(name1, name2):
    return tanimoto(name1, name2)


>>> name_compare("James Brown", "Brown, James")
0.91666666666666663
>>> name_compare("Berry Tsakala", "Bernard Tsakala")
0.75
>>> 

Edit: Ein Link zu einem guten und nützlichen Buch .

Andere Tipps

Soundex manchmal vergleichen Ähnliche Namen verwendet wird. Es befasst sich nicht mit Vorname / Name Ordnung, aber Sie könnten wahrscheinlich nur Ihren Code Blick für das Komma, das Problem zu lösen.

Wir haben gerade diese Art von Arbeit getan non-stop in letzter Zeit und der Ansatz, den wir gemacht haben, ist eine Look-up-Tabelle oder Alias-Liste zu haben. Wenn Sie Rechtschreibfehler / misheard / Nicht-Englisch Namen dann der schwierige Teil weg genommen wird diskontieren kann. In Ihren Beispielen würden wir davon ausgehen, dass das erste Wort und das letzte Wort der Vor- und der Nachname ist. Alles, was dazwischen würde (Mitte Namen, Initialen) verworfen. Berry und Bernard in der Alias-Liste wäre -. Und wenn Tsakala nicht zu Berry brachte würden wir das Wort, um um Flip und dann das Spiel bekommen

Eine Sache, die Sie verstehen müssen, ist die Datenbank / Personen aufgeführt, die Sie zu tun haben. In der englischsprachigen Welt sind Mittelnamen inkonsistent aufgezeichnet. So können Sie nicht ein Spiel basierend auf dem mittleren Namen oder Initiale machen oder verweigern. Soundex werden Sie nicht mit gemeinsamen Namen Aliase helfen wie „Dick“ und „Richard“, „Berry“ und „Bernard“ und möglicherweise „Steve“ und „Stephen“. In einigen Gemeinden ist es durchaus üblich, dass Menschen an der gleichen Adresse zu leben und haben 2 oder 3 Generationen an dieser Adresse mit dem gleichen Namen leben. Die einzige Möglichkeit, sie trennen kann, ist durch das Geburtsdatum. Geburtsdatum kann oder kann nicht aufgenommen werden. Wenn Sie die Schlagkraft haben, dann sollten Sie wahrscheinlich die Aufnahme von Geburtsdatum obligatorisch machen. Viele „Menschen Datenbanken“ entweder nicht Geburtsdatum aufnehmen oder sie nicht wegen Datenschutzgründen weggeben.

Effektiv Menschen name matching ist nicht so kompliziert. Es liegt auf der Qualität der gelieferten Daten alleinig. Was in der Praxis geschieht, ist, dass viele Aufzeichnungen unerreicht bleiben - und auch ein Mensch bei ihnen suchen kann die Diskrepanz nicht lösen. Ein Mensch kann Aliasnamen bemerken, die nicht in der Aliase Liste aufgenommen oder kann in der Lage sein, in der der Person im Internet zu sehen -. Aber Sie können Ihr Programm zu tun, dass nicht wirklich erwarten,

Banken, Kredit-Rating-Organisationen und die Regierung haben viele detaillierte Informationen über uns. Vorherige Adressen, Geburtsdatum usw. Und das hilft ihnen Namen zu verbinden. Aber für uns normale Programmierer gibt es kein Allheilmittel.

Die Analyse Name Ordnung und die Existenz von Mittelnamen / Initialen ist trivial, natürlich, so sieht es aus wie die eigentliche Herausforderung Alternative gemeinsame Namen zu kennen. Ich bezweifle, dass dies kann ohne irgendeine Art von Spitznamen Lookup-Tabelle durchgeführt werden. Diese Liste ist ein guter Ausgangspunkt. Es ist keinem Bernard Berry, aber es wäre wahrscheinlich die häufigsten Fälle fangen. Vielleicht kann eine noch umfassendere Liste an anderer Stelle gefunden werden, aber ich denke auf jeden Fall, dass eine länderspezifische Lookup-Tabelle ist der Weg zu gehen.

Ich hatte echte Probleme mit der Tanimoto mit utf-8.

Was funktioniert für Sprachen, die diakritischen Zeichen verwenden ist difflib.SequenceMatcher()

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top