Aus einem String den ersten Eintrag entfernen

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? :wink:

Die sehen ungefähr so aus: “L2/3” …


P.S.: Wir haben mittlerweile seit 16 Jahren 5-stellige Postleitzahlen.



test=*# select substring('Teststrasse 2 9543 Testort Badenwürtenberg', strpos('Teststrasse 2 9543 Testort Badenwürtenberg',' ')+1);
           substring
--------------------------------
 2 9543 Testort Badenwürtenberg
(1 Zeile)

Andreas

Absolut korrekte Einwände. Meine Demo wird für den gestellten Sonderfall arbeiten, nicht aber für alle Datensätze. Wenn das so zensiert erfaßt wurde, hilft wohl nur, die zensiert zu entsorgen …

Andreas

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.

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

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

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.

Eher würde ich aber versuchen vor der Postleitzahl zu trennen:

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

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.

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.

So kurz vor dem Ziel die Sprache wechseln???

Es braucht nicht mehr viel und ich bin am Ziel…