sunny: / MySQL - "Ähnliche" Ergebnisse anzeigen

Guten Morgen,

hab da mal eine Frage die zwar sicherlich schon öfter aufgetreten ist, aber dennoch bin ich mir noch nicht so ganz sicher welche Wege es hier gibt, bzw. welcher der Beste wäre, vielleicht hat ja jemand von Euch Erfahrung auf dem Gebiet.

Also es geht um Folgendes, angenommen (ich muss das jetzt - noch - nicht entwickeln, wäre nur eine Idee zur Verbesserung eines bestehenden Systems) ich habe eine Datenbank mit Postleitzahlen und Straßennamen. Der User bekommt Eingabefelder zur Verfügung gestellt in welche er seine eigene PLZ und seinen Straßennamen eintragen kann. Die Suche nach der PLZ in der DB wäre ja noch kein Problem sofern eine numerische Eingabe erzwungen wird (geht auch nur um PLZs aus .at).

Das Interessante wäre allerdings die Abfrage der Straßennamen. So gibt es in der DB zB. eine Straße namens "Eberhard-Fugger-Straße". Gibt der User allerdings zB. "fuckerstrasse" oder "eberhardfuger str" ein so sollte die Straße ebenfalls gefunden werden.

Dazu habe ich jetzt gelesen das man eine LIKE-Abfrage missbrauchen könnte indem man einfach den Suchstring splittet und zwischen jedes Zeichen ein % einfügt. Der Weg erscheint mir aber eher wenig optimal ... ?

Dann soll es auch noch Funktionen wie soundex() oder metaphone() geben. Wo liegt da der Unterschied? Sind diese für so einen Zweck sinnvoll in der Anwendung - noch dazu für österreichische Straßennamen (nicht englischsprachig)?
Dann soll es auch noch Klassen zum Download geben wie zB DoubleMetaPhone (http://hn273.users.phpclasses.org/browse/package/240.html) etc.
Schlussendlich habe ich auch noch etwas von similar_text() und levenshtein() gehört ...

Aber überall finde ich zwar die Information dass das für meine Zwecke hilfreich sein könnte, nur eben nirgends wo jetzt die Unterschiede liegen um herauszufinden wo und wie ich für meinen Fall am besten ansetzen könnte.

Kann da jemand weiterhelfen? Wie gesagt, es geht eigentlich nur mal um einen Ansatz da ich so eine Lösung recht schön fände und mich gerne damit beschäftigen würde, aber nicht vollkommen falsch ansetzen möchte!

Lg
sunny

  1. Sup!

    Beim Metaphone-Algorithmus werden "ähnliche" Laute (k,g,d,t), die Vokale, (p,b), (m,n), (f,ph,v,w) oder so... zusammengefasst. Insgesamt kann so jedes Wort als Folge von Zahlen geschrieben werden. Dann findet man bei der Suche nach Mohammed auch Muhammad oder Nihonat (oder so). Und wenn man zusätzlich noch mehr "Unschärfe" erlaubt, noch viel, viel mehr. Das wäre IMHO der beste Ansatz für Dein Problem. Soundex ist wahrscheinlich ähnlich. Du bräuchtest irgendwie eine deutsche Version davon... dann müsste es klappen.
    Vielleicht (wahrscheinlich) steht auch was im Archiv.

    Gruesse,

    Bio

    --
    Never give up, never surrender!!!
    1. Schau dir mal www.egothor.org an. Unterstützt wohl auch unscharfe Suche. Bin ich auch grad dran.
      Bei Wikipedia DE und EN ist zum Thema unscharfe Suche auch einiges an interessanter Software beschrieben.

      Sonniger Gruß -
      Henry

      www.ehydra.de.vu

      1. Hallo,

        Schau dir mal www.egothor.org an. Unterstützt wohl auch unscharfe Suche. Bin ich auch grad dran.

        Schaut nach Java aus, ich bräuchte das Ganze aber auf PHP-Basis (für MySQL direkt scheint es ja nicht wirklich etwas brauchbares zu geben) ...

        Bei Wikipedia DE und EN ist zum Thema unscharfe Suche auch einiges an interessanter Software beschrieben.

        Ja, hab ich schon durch, alles sehr interessant, im Besonderen die Levenshtein
        distance erscheint mir als guter Lösungsansatz, werde mich noch weiter schlau machen, falls jemand Erfahrungswerte hat - nur her damit!

        Ebenfalls sehr sonniger Gruß :-)
        sunny

        1. Hallo,

          Schau dir mal www.egothor.org an. Unterstützt wohl auch unscharfe Suche. Bin ich auch grad dran.

          Schaut nach Java aus, ich bräuchte das Ganze aber auf PHP-Basis (für MySQL direkt scheint es ja nicht wirklich etwas brauchbares zu geben) ...

          Tja, ursprünglich wollte ich das auch für PHP - fand aber bislang nichts.

          • Henry
  2. Hallo sunny,

    Das Interessante wäre allerdings die Abfrage der Straßennamen. So gibt es in der DB zB. eine Straße namens "Eberhard-Fugger-Straße". Gibt der User allerdings zB. "fuckerstrasse" oder "eberhardfuger str" ein so sollte die Straße ebenfalls gefunden werden.

    Vielleicht hilft dir levenshtein ? Geht allerdings nur in php, nicht in mysql. musst du halt alles aus der db rausholen und erst in php auswerten

    Gruß, Marian