Der Martin: Wie PLZ von Ortsname unterscheiden?

Beitrag lesen

Hi,

bin immer noch mit dem Thema Ortssuche wie am 30.01. beschäftigt.

ist ja auch nicht ganz trivial. Aber konkret: Wie sind denn die Ortsnamen, die du erkennen willst, bei dir gespeichert? Vermutlich doch in einer DB mit getrennten Feldern für Land, Ortsname und PLZ (sofern eine solche in dem Land überhaupt verwendet wird). Dabei ist zu beachten, dass die PLZ in manchen Ländern auch alphanumerisch ist; an die Schreibweise (PLZ vor oder nach dem Ortsnamen) will ich im Moment noch gar nicht denken. Den Ortsnamen hast du auch schon in mehreren Schreibweisen, so wie ich deinen Beitrag verstehe. Also gut.

Das Problem ist, zu erkennen, was ist die Landeskennung, Postleitzahl und Ortsname.

Warum ist das ein Problem? Ist es wirklich eins, oder machst du eins draus?
Ich würde die Eingabe zunächst in ihre Einzelteile aufsplitten, dabei Leerzeichen und Komma, aber nicht den Bindestrich als Trennzeichen nehmen. Im zweiten Schritt würde ich versuchen, "Stopwords" wie "an", "am", "der", "sur" und ähnliches identifizieren und von der Suche aussschließen.

Und dann einen Vergleich aller gefundenen Teile mit den Datenbankeinträgen. Bedingung: Jeder Teil der Eingabe muss im Datensatz als eigenständiges Wort vorkommen, damit es als Treffer gilt. Diese Suche bringt eventuell mehrere Treffer. Groß- und Kleinschreibung dabei nicht beachten.

"Bad Dürkheim" sieht ja danach aus, als ob es die Nationalkennung  "BAD" hat, also vergleiche ich das erste Wort:

Schön - ich würde einen Datensatz suchen, in dem sowohl das Wort "Bad" als auch das Wort "Dürkheim" vorkommt. "Baden-Baden" wird dabei nicht gefunden, weil es "Bad" nicht als separates Wort enthält. Oder "Neustadt an der Weinstraße" - da suche ich nach einem Datensatz, der sowohl "Neustadt" als auch "Weinstraße" enthält ("an" und "der" fallen als Stopwords raus). Entsprechend für "Chalons sur Saône".
Interessant wird es, wenn die Eingabe nicht eindeutig ist. Der Anwender gibt "Kampen" ein, und die Suche findet Kampen auf Sylt (Deutschland) und Kampen in Overijssel (Niederlande). Da brauchen wir als weiteres Merkmal also noch Land (D/DE oder NL) oder Postleitzahl (25980 oder 8260 bis 8279). Hier sehe ich gerade eine weitere Stolperfalle: Die niederländischen Postcodes haben noch ein Suffix aus zwei Buchstaben, das den Ortsteil genauer angibt, der vollständige Ortsname könnte also z.B. "8261PU Kampen" lauten. *grübel*

if ( $lfd = 1 && strlen($val) < 4 && preg_match("/(A|B|CH|CZ|D|DK|E|F|GB|H|HR|I|IL|IRL|JP|L|LK|LT|N|NL|PL|RU|S|SI|SK|TR|USA)/", $val))

{
        $such_land_kz = $val;
      }


> Das ist noch nicht okay, denn "BAD" beinhaltet ein "A" (Österreich). Wie kann man dieses Kommando modifizieren?  
  
Suche nur nach ganzen Wörten (Modifier w). Aber AFAIK betrachtet PHP alles als Wort-Trenner, was nicht [A-Za-z0-9] ist. "Bad Dürkheim" wären dann schon drei Wörter, nämlich "Bad", "D" und "rkheim".  
  

> Ich bin etwas ratlos.  
  
Ich hab's auch noch nicht bis zum Ende durchgedacht, aber vielleicht kannst du ein paar Denkanstöße mitnehmen.  
  
So long,  
 Martin  

-- 
Küssen ist die schönste Methode, eine Frau zum Schweigen zu bringen.  
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(