Salut
Folgendes Problem:
Ich versuch gerade einen Addressnormalizer für nen Geocoder zu programmieren.
Der Input ist ein gewöhnlicher Addressstring (z.B. Teststrasse 2 9543 Testort Badenwürtenberg).
Was ich bereits geschafft hab, ist den Strassennamen herauszufinden.
Nun will ich den Strassennamen vom Inputstring entfernen/wegnehmen.
So das der String nur noch folgendermassen aussieht: 2 9543 Testort Badenwürtenberg
Hab bisher keine geeignete Lösung gefunden.
Gruss
Gegenfrage: wie willst du die Straßen in Mannheim damit bearbeiten? ;-)
Die sehen ungefähr so aus: "L2/3" ...
P.S.: Wir haben mittlerweile seit 16 Jahren 5-stellige Postleitzahlen.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Was heißt erfasst ... man kann Straßenbezeichnungen irgendwie in kein Muster quetschen. Da gibt es 1000und1 Sonderfall.
Ich würde an der Stelle auch nicht mit SQL arbeiten sondern die Daten mit irgendeiner Skriptsprache auseinandernehmen.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Klappt wie geschmiert.
Danke Andreas
Mit regulären Ausdrücken könnte man sich der Sache durchaus nähern. Um der Überschrift zu genügen, und wirklich den ersten Eintrag zu extrahieren, sprich bis zum ersten Blank bei folgenden Testdaten abzuschneiden:
select str from kunde;
str
----------------------------------
Am Weidenweg 49, 19434 Potsblitz
Löwenhardtdamm 17 10829 Berlin
In der Au 9 44332 Biesdorf
Haus Alpenglühn 88888 Bergdorf
Die Testdaten sind absichtlich etwas fies gewählt, aber in den Alpendörfern sind Häuser ohne Straßenname, wo es aber Hausnamen gibt, möglich. Dafür habe ich keine Mannheimer Straßen aufgeführt, da ich die dortigen Gepflogenheiten nicht kenne.Code:SELECT regexp_replace (str, '([^ ]*) .*', E'\\1') as part1, regexp_replace (str, '[^ ]* (.*)', E'\\1') as part2 FROM kunde; part1 | part2 ----------------+------------------------------- Am | Weidenweg 49, 19434 Potsblitz Löwenhardtdamm | 17 10829 Berlin In | der Au 9 44332 Biesdorf Haus | Alpenglühn 88888 Bergdorf
Eher würde ich aber versuchen vor der Postleitzahl zu trennen:
HIer ist jetzt jeweils die Hausnummer Teil von Part 1, was sich noch ändern ließe, in dem man den Text vor der Postleitzahl mit auf die rechte Seite zieht.Code:SELECT regexp_replace (str, '([^ ]*) [0-9]{5}.*', E'\\1') as part1, regexp_replace (str, '.* ([0-9]{5}.*)', E'\\1') as part2 FROM kunde; part1 | part2 -------------------+----------------- Am Weidenweg 49, | 19434 Potsblitz Löwenhardtdamm 17 | 10829 Berlin In der Au 9 | 44332 Biesdorf Haus Alpenglühn | 88888 Bergdorf
Wenn die Schreibweisen für Hausnummern wie in 17-23, 4a usw. immer einheitlich wären wäre das wohl kein Problem, aber wenn manche Einträge wieder 17 - 23 oder 4 a lauteten, wäre auch entsprechend mehr nachzuarbeiten.
Dank eurer Hilfe bin ich schon sehr viel weiter gekommen.
Mein Normalizer extrahiert HNr, Strassenname, PLZ und das Land vom Ende des Strings.
Nun hab ich das Problem, dass Länder zum Teil aus mehreren Wörtern bestehen.
z.B. British Indian Ocean Territory
Mit Hilfe des Soundex Algorithmus hab ichs geschafft die Länder anhand einer Lookup-Tabelle zu identifizieren.
Nun bräuchte ich jedoch wieder etwas Hilfe.
Ich würde gerne aus dem Inputstring das Land am Ende entfernen. Zuerst werden die Anzahl Wörter des Landes gezählt (Dafür hab ich bereits eine Funktion) und anhand der Anzahl vom Orginalstring entfernt.
Z.B Teststrasse 2 23456 Teststadt British Indian Ocean Territory
Count_word = 4
Code: ?????
Resultat: Teststrasse 2 23456 Teststadt
Greets
Wie wäre es an der Stelle, dann doch mal auf eine Skriptsprache zu wechseln? Perl und Python (und noch ein paar) stehen auch als serverseitige Sprachen zur Verfügung.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
So kurz vor dem Ziel die Sprache wechseln?????
Es braucht nicht mehr viel und ich bin am Ziel....
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen