Frage

Ich habe noch nie einen Algorithmus für den Abgleich vor und weiß wirklich nicht, wo ich anfangen soll gebaut. So, hier ist meine Basis-Set und warum ich es mache. Fühlen Sie sich frei, mich zu korrigieren, wenn ich nicht die richtigen Fragen zu stellen.

ich eine Datenbank mit Namen haben und eindeutige Kennungen für die Menschen. Mehrere erzeugten Kennungen (intern erzeugte und einige Dritte), Nachname, Vorname und Geburtsdatum sind die wichtigsten, die ich würde werden.

Mehrere Male im Laufe des Jahres habe ich eine Liste von einem Dritten erhalten, dass der Bedarf importiert und an die vorhandenen Personen in meiner Datenbank gebunden werden, aber die Daten sind nie so sauber wie meine. IDs könnte sich ändern, Geburtsdaten Tippfehler haben könnte, Namen Tippfehler haben könnte, könnte Nachnamen ändern, usw.

Jeder Import könnte 20.000 Datensätze so, auch wenn es 99% genau ist, dass noch 200 Datensätze sind würde ich in Hand und Spiel gehen. Ich glaube, ich bin für mehr wie Genauigkeit von 99,9% suchen, wenn es um Anpassung der eingehenden Menschen meine Nutzer kommt.

Also, wie gehe ich über einen Algorithmus zu machen, die diese herausfinden können?

PS Auch wenn Sie nicht eine genaue Antwort haben, aber von einigen Materialien zu Referenz wissen auch hilfreich sein würde.

PPS Einige Beispiele wären ähnlich dem, was m3rLinEz schrieb:

ID: 9876234 Fname: Jose     LName: Guitierrez       Birthdate:01/20/84  '- Original'

ID: 9876234 Fname: Jose     LName: Guitierrez       Birthdate:10/20/84  '- Typo in birth date'
ID: 0876234 Fname: Jose     LName: Guitierrez       Birthdate:01/20/84  '- Wrong ID'
ID: 9876234 Fname: Jose     LName: Guitierrez-Brown Birthdate:01/20/84  '- Hyphenated last name'
ID: 9876234 Fname: Jose, A. LName: Guitierrez       Birthdate:01/20/84  '- Added middle initial'
ID: 3453555 Fname: Joseph   LName: Guitierrez       Birthdate:01/20/84  '- Probably someone else with same birthdate and same last name'
War es hilfreich?

Lösung

Sie interessieren könnten Levenshtein Abstand .

  

Der Levenshtein Abstand zwischen zwei   Strings als Minimum definiert   Anzahl der Änderungen erforderlich zu transformieren   eine Zeichenkette in die anderen, mit der   wobei zulässige Editieroperationen   Insertion, Deletion oder Substitution   eines einzelnen Zeichens. Es ist benannt   nach Vladimir Levenshtein, der   dieser Abstand 1965 1

betrachtet

Es ist möglich, jede Ihrer Felder und Berechnen der Gesamtdistanz zu vergleichen. Und durch Versuch und Irrtum kann man die entsprechende Schwelle entdeckt Datensätze zu ermöglichen, wie abgestimmt werden zu interpretieren. Lassen Sie sich diese selbst nicht umgesetzt, sondern nur dachte an die Idee:}

Beispiel:

  • Datensatz A - ID: 4831213321, Name: Jane
  • Datensatz B - ID: 431213321, Name: Jann
  • Datensatz C - ID: 4831211021, Name: John

Der Abstand zwischen A und B wird niedriger sein als A und C / B und C, die eine bessere Übereinstimmung anzeigt.

Andere Tipps

Wenn es um so etwas wie dies kommt, nicht neu erfinden das Rad nicht. Der Levehstein Abstand ist wahrscheinlich die beste Wahl, wenn Sie dies selbst tun, aber sonst, einige der Forschung auf bestehende Lösungen, die Datenbankabfrage und Fuzzy-Suche zu tun. Sie wurden es mehr, als Sie tun, wird es wahrscheinlich besser sein, auch ..

Viel Glück!

Wenn Sie sind den Umgang mit Datensätzen dieser Größe und verschiedene Ressourcen importiert werden, können Sie in eine Identity-Management-Lösung zu suchen. Ich bin meistens mit Sun Identity Manager vertraut, aber es kann für sein übertrieben, was Sie zu tun versuchen. Es könnte sein, lohnt ein Blick in.

Wenn die Daten, die Sie von 3. Parteien immer konsistent ist (das gleiche Format jedes Mal) Ich würde wahrscheinlich eine Tabelle für jede der dritten Parteien erstellen Sie bekommen Daten aus. Importieren Sie dann jeden neuen Satz von Daten auf die gleiche Tabelle jedes Mal. Ich weiß, es ist ein Weg, um dann die beiden Tabellen unter Verwendung einer SQL-Anweisung auf der Grundlage gemeinsamer Spalten in jeder mitmachen. Auf diese Weise können Sie SQL-Abfragen durchführen und Daten aus mehreren Tabellen, aber es es aussehen wie aus einem einzigen einheitlichen Tisch kam. Auf ähnliche Datensätze, die hinzugefügt wurden, die gefunden werden keine Übereinstimmungen in beiden Tabellen haben könnten und dann manuell gepaart. So können Sie Ihre ‚saubere‘ Daten halten getrennt von der Junk Sie von Dritten erhalten. Wenn Sie einen echten Import wollte konnte man dann die verknüpfte Tabelle verwenden, um eine dritte Tabelle zu erstellen, um alle Ihre Daten enthält.

würde ich mit den leicht in der Nähe von 100% sicher Matches beginnen und mit ihnen umgehen erste, jetzt haben Sie eine Liste von etwa 200, dass Bedarf Befestigung.

Für die restlichen Zeilen können Sie eine vereinfachte Version von Satz von Bayes .

Für jede unvergleichliche Reihe, berechnen die Wahrscheinlichkeit , dass es ein Spiel für jede Zeile in Ihren Daten gesetzt ist unter der Annahme, dass die Daten bestimmte Änderungen enthalten, die mit bestimmten Wahrscheinlichkeiten auftreten. Zum Beispiel ändert eine Person ihre Namen mit einer Wahrscheinlichkeit von 0,1% (möglicherweise hängt auch von Geschlecht), ändert ihren Vornamens mit einer Wahrscheinlichkeit von 0,01% und ein einen einzigen Tippfehler mit probility 0,2% (Verwendung hat Levenshtein-Distanz die Anzahl der Fehler zu zählen). Andere Felder auch mit bestimmten Wahrscheinlichkeiten ändern. Für jede Zeile berechnen die Wahrscheinlichkeit, dass die Reihe bringt alle Felder betrachtet, die sich geändert haben. Dann wählen Sie den denjenigen, der die höchste Wahrscheinlichkeit hat ein Spiel zu sein.

Zum Beispiel eine Zeile mit nur einem kleinen Tippfehler in einem Feld, sondern gleich auf alle anderen würde eine 0,2% ige Chance einer Übereinstimmung, während Zeilen, die unterscheidet sich in vielen Bereichen haben könnte nur eine 0,0000001% Chance. So können Sie die Zeile mit dem kleinen Schreibfehler holen.

Reguläre Ausdrücke sind, was Sie brauchen, warum das Rad neu erfinden?

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