Murmelin: Wie PLZ von Ortsname unterscheiden?

Hallo,

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

Durch Eintrag in ein Suchfeld kann man nach einem Ort suchen. Das Problem vom 30.01. habe ich per Extra-Feld gelöst, in das die verschiedenen Namen eines Ortes in die Tabelle eingegeben werden (Prag, Praha, Prague, ...)

Aber ein anderes Problem kocht immer wieder hoch: Die zahlreichen Orte mit gleichen Namen, für die man dann zur Unterscheidung eine Landeskennung und Postleitzahl braucht. Das alles kann man in das Suchfeld eintragen, also etwa
"Stockstadt" oder
"D 64589 Stockstadt am Rhein"

Das Problem ist, zu erkennen, was ist die Landeskennung, Postleitzahl und Ortsname.
"Bad Dürkheim" sieht ja danach aus, als ob es die Nationalkennung  "BAD" hat, also vergleiche ich das erste Wort:

      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?

Das erste oder zweite Wort kann ein Postcode sein, leider im Ausland auch mit Buchstaben. Hat "Wyk auf Föhr" die PLZ "Wyk" (wenn nach Korrektur die Nation "Wyk" ausgeschlossen wurde)?

Ich bin etwas ratlos.

Gruß vom Murmelin

  1. Liebes Murmelin,

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

    und was hast Du mit suits Stichworten angefangen?

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Hallo, Felix,

      und was hast Du mit suits Stichworten angefangen?

      Transliteration: Ein neues Problemfeld, das ich mir nicht aufhalsen möchte. Als Beispiel nehme ich
      Михаил Сергеевич Горбачёв (russisch)
      Michail Sergejewitsch Gorbatschow (deutsch - da wird das ё=jo zum o)
      Mikhail Gorbachev (english - nicht wiederzuerkennen)

      Anderes Beispiel:
      Са́нкт-Петербу́рг ist schon im Rusischen nicht klar. Geht man auf die Webseite http://gov.spb.ru/ titelt sie Администрации Санкт-Петербурга hat also ein "а" angehängt.
      Sankt Petersburg (deutsch - das "s" zum Peter ist frei hinzuerfunden)

      Accent Folding: Die Toleranz von Akzenten ist gegeben, aber nicht zu den Akzenten gehört etwa
      Rømø (deutsch: Röm, friesisch: Rem, andere Schreibweise: Römö)

      Klartext: Die Stichworte dienen nicht der Problemlösung. Es geht also nur durch zusätzliches Hinterlegen der verschiedenen Schreibweisen.

      Gruß, Murmelin

  2. Hallo,

    Aber ein anderes Problem kocht immer wieder hoch: Die zahlreichen Orte mit gleichen Namen, für die man dann zur Unterscheidung eine Landeskennung und Postleitzahl braucht. Das alles kann man in das Suchfeld eintragen, also etwa
    "Stockstadt" oder
    "D 64589 Stockstadt am Rhein"

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

    suche unscharf.

    Auslandsbeispiel

    London
    E15 6PP
    United Kingdom

    siehe http://answers.yahoo.com/question/index?qid=20090221104624AAyP5nU
    Rechne mit Abkürzungen.

    Freundliche Grüße

    Vinzenz

  3. 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:(
    
    1. Hallo, Martin,

      Ich würde die Eingabe zunächst in ihre Einzelteile aufsplitten, dabei Leerzeichen und Komma, aber nicht den Bindestrich als Trennzeichen nehmen.

      Mmh - der Bindestrich wird gerne zwischen Nation und Postcode gesetzt.

      Im zweiten Schritt würde ich versuchen, "Stopwords" wie "an", "am", "der", "sur" und ähnliches identifizieren und von der Suche aussschließen.

      Gute Idee.

      Bedingung: Jeder Teil der Eingabe muss im Datensatz als eigenständiges Wort vorkommen, damit es als Treffer gilt.

      Kann mySQL nach Worten suchen? Ich mache das z.Z. mit %LIKE% und da werden auch Teilworte gefunden.

      Ich neige jetzt dazu, Landeskennung, Postcode und Ortsname in getrennten Feldern eingeben zu lassen. Das Problem ist ja scheinbar mit überschaubarem Aufwand nicht zu lösen.

      Gruß, Murmelin