Algorithmen zum Aggregieren doppelter Identitäten basierend auf nicht numerischen Daten?

7

Ich habe einen großen Datensatz (2 Millionen Einträge) von Personen, aber viele Personen haben mehrere Einträge in der Datenbank mit leicht (oder signifikant) unterschiedlichen identifizierenden Informationen. Zum Beispiel kann ich J. Doe und John Doe haben, oder ich kann John Doe mit einer zugehörigen E-Mail-Adresse und John Doe ohne eine zugehörige E-Mail-Adresse haben.

Ich habe mir verschiedene Clustering-Algorithmen angesehen, aber nichts scheint für meine Arbeit gut geeignet zu sein, nämlich die Einträge basierend auf Regeln wie den folgenden zu aggregieren:

  • Erraten Sie Vor- und Nachnamen basierend darauf, ob einer der Namen in Großbuchstaben geschrieben ist
  • Aggregieren Sie "J. Doe" und "J. Doe", wenn die E-Mail-Adressen übereinstimmen
  • aggregieren Sie "J. Doe" zu "John Doe", wenn keine anderen Personen einen Vornamen haben, der mit "J" und einem Nachnamen "Doe" beginnt.

Mit einem kleineren Datensatz wäre dies eine relativ einfache Aufgabe, nur mit einigen einfachen Regeln, aber mit der Anzahl der Einträge, die ich habe, können die Aggregationsaufgaben sehr langsam werden und die Logik wird ziemlich kompliziert. Meine aktuelle Lösung (basierend auf der Verwendung der Volltextsuchfunktion in meiner Datenbank, um ähnliche Einträge zu finden, Hashes basierend auf diesen Ergebnissen hinzuzufügen und dann basierend auf einer Mischung aus Hashes und Arten von Mehrdeutigkeiten zu aggregieren) funktioniert, aber jedes Mal, wenn ich versuche, sie auszuführen oder aktualisieren Sie es, es schreit nur, dass es die Art von Problem ist, die jemand anderes bereits gelöst hat. Aber ich konnte keine Lösung finden.

Gibt es Algorithmen, die basierend auf solchen Regeln das tun, was ich will? Oder bestimmte Pakete oder Software, die hilfreich sein könnten? Oder gehe ich dieses Problem völlig falsch an?

Vielen Dank!

(Bitte beachten Sie jedoch, dass ich mir bewusst bin, dass es viele verschiedene Möglichkeiten gibt, Identitäten falsch zu aggregieren (z. B. dass J. Doe John Doe oder James Doe bedeuten könnte), sodass ich keine Warnungen vor dem Versuch benötige, Dinge zu aggregieren.)

Strickleiter
quelle
Haben Sie nach dem Posten dieser Frage etwas ausprobiert oder sich einen Plan ausgedacht? Welche Sprache bevorzugen Sie? Ich habe einige Ideen im Kopf. Python dictionarywird Ihr bester Freund sein, um einen Schlüssel zu haben, dessen Wert in Ihrem Fall übereinstimmt.
Innm
Clustering wird hier das Falsche sein. Durch statistische Analyse werden Sie "Jan" und "Jane" zusammenführen, da sie sich nur um einen Buchstaben unterscheiden. Diese sollten also höchstens interaktiv verwendet werden, wie z. B. in OpenRefine. Suchen Sie stattdessen nach Datensatzverknüpfungsrecherchen.
Hat aufgehört - Anony-Mousse

Antworten:

7

Ich habe mein Problem mit der Verknüpfung von Datensätzen noch nicht erfolgreich gelöst, aber ich wollte einige der Dinge, die ich dabei gefunden habe, für den Fall freigeben, dass sie für andere von Nutzen sind. Dies ist eine laufende Arbeit, die hier auf GitHub basiert .


Verknüpfungsressourcen aufzeichnen

(auch bekannt als Deduplizierung, Datenabgleich, Entitätsauflösung)

Hintergrund

Unterlagen

Gespräche

Bücher

Gratis Software

(Letzte Aktualisierung, Github-Stars ab November 2017)

Python

Java

R.

Andere

Kommerzielle Software und Lösungen

Für SAS

Datenreinigung

Nennen Sie Parser

Python JavaScript

Papiere

Organisationen

Sonstiges

Strickleiter
quelle