Abgleich von zwei Adreßdatensätzen aus unterschiedlichen Quellen

DeusoftheWired

Fleet Admiral
Registriert
Juni 2009
Beiträge
13.798
Hallihallo,

beim Abgleichen von zwei Adreßdatensätzen aus unterschiedlichen Quellen bin ich aufgrund der Größe beider Sätze mittlerweile an die Grenze des in vertretbarer Zeit händisch Machbaren gestoßen. Ohne viel Brimborium und etwas vereinfacht:

Satz 1:

Code:
PLZ Ort Straße Hausnummer Hausnummernzusatz X-Koordinate Y-Koordinate

Satz 2:

Code:
PLZ Ort Straße Hausnummer Hausnummernzusatz ID

Das Ziel ist es, Satz 1 mit Satz 2 zu vergleichen und für eine passende einzigartige Adresse die ID in den Satz 1 zu übernehmen. Die ID ist dabei keine fortlaufende Nummer, sondern ein wichtiges technisches Merkmal, mit dem die Erkennung im Projekt steht und fällt.

Satz 1 stammt aus einer hoheitlichen Quelle, nämlich dem Vermessungsamt eines Bundeslandes, und ist dementsprechend die Referenz. Weniger als ein Jahr seit der Datenerhebung. Mittlere sechsstellige Zahl an Adressen.
Satz 2 stammt von einem hptsl. deutschen Konzern mit einem höheren zweistelligen Milliardenumsatz im Jahr 2016. Erhebungsdatum unbekannt, aber nicht älter als fünf Jahre. Höhere sechsstellige Zahl an Adressen.

Das Problem an der ganzen Sache ist nun, daß Satz 2 zwar weitgehend kompatibel mit Satz 1 ist, aber eben nur zu ca. 80 %. Die Nicht-Übereinstimmungen kommen vor allem durch Straßenumbenennungen, Gemeindeumstrukturierungen, Postleitzahlenänderungen und Gebietsreformen zustande, die zwar schon in Satz 1 aber noch nicht in Satz 2 vorhanden sind. Wichtiger Unterschied im Satz 2 ist außerdem, daß Straßennamen nicht ausgeschrieben, sondern auf eine mittlere zweistellige Zahl von Zeichen begrenzt sind. Die Entsprechung einer Professor-Konrad-von-Bergemann-Straße in Satz 1 ist also eine Prof.-K.-v.-Bergem.-Straße in Satz 2, um mal ein absichtlich krasses Beispiel zu wählen. Leider folgt die Einkürzung keinem maschinenerkennbaren Muster, sondern wird in Satz 2 immer von Menschenhand vorgenommen. Immerhin ist sie aber einheitlich, d. h., eine Straße mit einem bestimmten Namen wird in Satz 2 immer mit dem gleichen gekürzten Namen auftauchen. Die üblichen Sachen wie Kurze Gasse statt Kurzegasse oder Wilhelmsstieg statt Wilhelmstieg sind natürlich auch mit dabei.

Bisher habe ich den Spaß immer mit einem SVERWEIS in Excel gelöst, der den vollen Namen (PLZ&" "&Ort&" "&Straße&" "&Hausnummer&" "&Hausnummernzusatz) aus Satz 1 mit allen vollen Namen aus Satz 2 vergleicht und bei einer Übereinstimmung die ID in eine Zelle neben neben vollen Namen von Satz 1 schreibt. Die, die nicht zugeordnet werden konnten, wurden per Hand korrigiert, wofür meist zeitaufwändige Recherche zu Straßenumbenennungen, Gemeindeumstrukturierungen, Postleitzahlenänderungen und Gebietsreformen nötig war. Blieb aber immer noch im Rahmen. Beim aktuellen Projekt (und absehbaren noch größeren in Zukunft) ist das aber nicht mehr vertretbar, weshalb ich nach einer automatisierten Lösung suche.

Wie das ganze technisch umgesetzt wird, ist ziemlich egal, solange es auf einem zeitgemäßen Desktop-Office-Rechner mit Windows 7 lauffähig ist. RegEx in Notepad++, Excel, SQL, alles kein Problem. Freie/quelloffene Lösungen werden bevorzugt, aber es darf auch gern etwas Proprietäres und/oder Kostenpflichtiges im vierstelligen Rahmen sein. Eine Recherche zu Adreßdienstleistern hat bisher nur welche zu Tage gefördert, die Dubletten, Umzieher oder Ähnliches bereinigen, aber keinen Vergleich zwischen zweien anstellen.

Näheres gern auch per PN.

Grüße und schon mal Danke für eure Denkanstöße
 
Du hast die Arbeit doch schon einmal gemacht, oder? Warum verwendest Du dann nicht den jetzt neuen korrigierten Datensatz?

Es gibt hier mehrere Möglichkeiten. Dazu aber einige Fragen:
  • Verändern sich die beiden Quell-Datensätze?
  • Warum verwendest Du den von Dir bereits korrigierten Datensatz als neue Quelle + gewünschter ID?
  • Warum brauchst Du einen permanenten Prozess, der die Daten immer wieder neu liest und abgleicht?
Du mußt erst mal die üblichen Dinge genau beschreiben:
  • wie
  • wo
  • was
  • warum
Am besten ist es hier, eine Anforderung zu erstellen, ein sogenanntes Lastenheft. Darin werden alle Anforderungen, Prozesse und Probleme skizziert. Wenn Du das hast, generierst Du dann die weitere Planung, wie man so etwas technisch umsetzen könnte, das mündet dann in ein Pflichtenheft.

http://www.softselect.de/wissenspool/erlaeuterung_lastenheft_vs_pflichtenheft

Sprich, erst mal planen und überlegen, dann erst handeln und umsetzen, die klassische Planung. ;) Wie man plant, dafür gibt es auch bereits einige etablierte Prozesse in der IT (Scrum, ITIL, ISOXXX, FitSM). Dazu solltest Du mal bei Euch intern klären, was hier bereits verwendet wird, und darauf aufsetzen.

Anfangen tust Du einfach, in dem Du die Prozesse mal mit diversen Tools modellierst, eben aus der Fragestellung heraus, wie wo was warum.

Als Möglichkeiten kann man:
  • Datenabgleich per Programmiersprache (Java, Shell, Perl usw.) über Excel, csv Format oder andere
  • Alle Quelldaten in eine neue Datenbank (Access, MySQL, Postgres, Oracle) schreiben, und daraus einen neuen verfügbaren Datensatz per SQL und CO. mit allen Quelldaten erzeugen.
  • Mit Prozessketten wie DI (DataIntegration) und ESB (Enterprise Service Bus) die Daten zusammenstellen und einem neuen System zur Verfügung stellen. Dafür gibt es beispielsweise OpenSource-Lösung wie Talend
  • ...
Vielleicht gibts ja bei Euch schon eine entsprechende Infrastruktur im Haus?

Ich würde an Deiner Stelle dazu einfach einen entsprechenden IT-Profi bzw. SW-Haus engagieren, mit denen Du das dann planst und umsetzt. Glaub mir, wenn Du da ein gutes findest, spart das Zeit und Geld für Euch, und Du hast dann eine Lösung, die einerseits erweiterungsfähig und zukunftssicher ist, und auf der Du und andere in Deiner Firma dann aufbauen und selbst erweitern könnt.

Es mag sich zunächst bei Dir für Dein "triviales Problem" wie mit Kanonen auf Spatzen geschossen anhören. Aber Dein Problem ist ein Paradebeispiel in der IT: "Ich habe eine Anforderung, wie setze ich sie um?" Erfahrungsgemäß bleibt es eben nicht bei "Ich habe unterschiedliche Datenquellen, wie verwurstle ich sie so, so daß ich damit was anfangen kann!" Da kommt dann doch eine Menge noch zusätzlicher Dinge dazu. ;)

Selbst wenn Du das nun für Dich irgendwie lösen kannst, hast Du noch lange keinen etablierten Prozess (geplant, dokumentiert, versioniert, geprüft usw.), der dauerhaft bestehen kann. Was ist, wenn Du krank bist, wie übergibst Du Deine Lösung, wenn Du gehst, wie können andere damit arbeiten usw.?

Wenn Du es gut machen willst, mach es gleich richtig. ;) Deshalb mache daraus ein kleines Projekt und plane entsprechend.
 
Zuletzt bearbeitet:
Moin,
prinzipiell gebe ich PHuV Recht.
Ich stelle mir die Frage, in welchem Format die Daten vorliegen. *.txt, *.csv, *.irgendwas?
Solltest du Excel ab 2010 verwenden, würde ich das aus der jetzigen Kenntnis deiner Daten und Wünsche mit Power Query -> http://www.excel-ist-sexy.de/power-query-das-add-in/ machen. Ansonsten: (anonymisierte) Muster-Datei mit ca. 10 Datensätzen wäre hilfreich. Die Sache mit der PN/eMail gilt auch für mich ... :cool_alt:
 
Zurück
Oben