unterschiedliche Tabellen zusammenführen

TMDolphin

Grünschnabel
Hallo,
ich möchte, Java wird präferiert, ein Programm entwerfen, welches zwei Kundelisten unterschiedlicher Systeme zuordnet. Das Problem ist, dass die einzelnen Kunden leider nicht einheitlich eingegeben wurden. Das heißt z.B. in einem system ist es die "Straße-Straße 12" und im anderen System die "Straße Straße 12", es gibt unterschiedlich viele Anzahl von Feldern. Es handelt sich um einmal 20000 und einmal 2000 Datensätzen. Gibt es eine Bibliothek die bei der Suche und zuordnung der einzelnen Datensätze helfen kann?
vielen Dank TMDolphin
 
Hallo,



Eine Möglichkeit solch einen Abgleich mit zwei Listen zu machen ist beide Liste nach dem "Verknüpfungsattribut" zu verbinden
(quasi wie ein inner join). Dazu müssen beide Listen nach diesem Verknüpfungsattribut sortiert sein.

Anschließend läuft man mit zwei Zeigern diese beiden Listen parallel ab und führt die merge Operation durch.
Dabei kann man nun die Daten des elements aus der einen in die andere kopieren, oder aus beiden Elementen ein neues
Element erzeugen und das in einer neuen Liste ablegen.

Dieses Verfahren kann dann noch beliebig ausgebaut werden (Auf einer Seite fehlende Sätze einfügen, Werte aggregieren etc.)

Hier in Pseudocode:
Code:
sort(listeLinks)
sort(listeRechts)

//hier enthält die Linke liste 

indexListeLinks = 0
indexListeRechts = 0

while(indexListeLinks < len(listeLinks) && indexListeRechts < len(listeRechts){
   elementAusListeLinks = listeLinks[indexListeLinks]
   elementAusListeRechts = listeRechts[indexListeRechts]

   if(elementAusListeLinks > elementAusListeRechts){
      indexListeRechts++;
      continue;
   }else if(elementAusListeLinks < elementAusListeRechts){
      indexListeLinks++;
      continue;
   }

   if(match(elementAusListeLinks,elementAusListeRechts)){
     merge(elementAusListeLinks,elementAusListeRechts);
   }

   indexListeRechts++;
   indexListeLinks++;   
}


Gruß Tom
 
Danke dir für die fixe Antwort.
Mein Problem ist leider, dass es keinen Schlüssel oder ähnliches gibt, welcher die Datensätze eindeutig zuordnet. Ich muss also zunächst herausfinden, welche Datensätze aus den beiden Listen zusammengehören. Sicherlich wird dies nicht zu 100% funktionieren. Mein erster Ansatz war, zunächst alle Datensätze durch die Postleitzahl vorzusortieren.
Dadurch beschränkt sich die Möglichkeit, welche Datensätze zusammengehören um ein Vielfaches.
Die verbleibenden Möglichkeiten müssten nun z.B. durch einen Vergleich einzelner Wörter mit bestmöglicher Trefferquote zugeordnet werden.
Das Vorgehen hierbei ist allerdings nicht so trivial.
Gibt es eine Art Bibliothek, die vielleicht Stringvergleiche mit bestimmten kriterien durchführt, bewertet,....?
 
Hallo,

wenn du die beiden Tabellen schon in einer Datenbank hast könntest du mit Ähnlichkeitssuchen wie soundex oder Kölnerphonetik Erfolg haben. Eine weitere Möglichkeit wäre noch die Levensthein Distanz / Editier-Distanz als Kriterium der Zusammengehörigkeit zu verwenden.

Wenn du die Vergleiche aber sowieso nur Textuell anstellen kannst könnte man sich auch eine Lucene basierte Lösung überlegen. Lucene ist eine Textsuchmaschine für Java mit der man umfangreiche Suchmöglichkeiten hat. Man kann sich dort auch eigene Ähnlichkeits Funktionen hinterlegen um zu entscheiden, wann zwei Dokumente (Also jeweils zu vergleichende eine Zeile deiner Tabellen) "übereinstimmen" bzw. Ähnlich sind. Im Prinzip stellst du dann Lucene eine Frage wie: gib mir mal die x Ähnlichsten Dokumente (Datensätze) zu diesem Datensatz geranked nach einem Score (der Ähnlichkeit).

Ich könnte mir vorstellen, dass das letztere Verfahren hier erfolgreich sein könnte.

Gruß Tom
 

Neue Beiträge

Zurück