Horst Nogajski: Funktionen für 'unscharfe' String-Vergleiche?

Hallo zusammen,

weiß jemand ob (und wie/womit) es in PHP möglich ist Zeichenketten zu vergleichen und auch (z.B. phonetisch) annähernde Treffer zu bekommen.

Bisher habe ich nur Funktionen gefunden die Zeichenketten miteinander vergleichen und dann maximal caseinsensitive 100% Treffer zurückgeben.

Ich würde aber gerne auch Strings finden die nur so ähnlich aufgebaut sind wie das Suchmuster.

z.B. Suche nach 'Tulpe' findet 'Tulpe, Tulpenfarbe, Tulpnfarbe, Tulip'

Es sollen also bis zu einem gewissen Grad auch ähnliche Strings gefunden werden. (Wenn im Beispiel auch Amsterdam gefunden würde das wäre eindeutig zu unscharf, *g*)

Gibt es da schon in PHP implementierte Möglichkeiten oder auch andere?

Viele Grüße,
Horst

  1. Moin,

    dein Stichwort ist metaphone http://www.php-mysql-programmierung.de/function.metaphone.html

    http://www.infos24.de/phpe/handbuch/5_php_arbeiten_mit_strings.htm

    Habe aber noch nie was damit gemacht, daher weiß ich nicht wie gut das ist.

    Stefan

    1. Hallo,

      dein Stichwort ist metaphone http://www.php-mysql-programmierung.de/function.metaphone.html

      http://www.infos24.de/phpe/handbuch/5_php_arbeiten_mit_strings.htm

      Ja, vielen Dank, das könnte wohl was sein, =:)

      Ich habe etwas herum gesucht und noch folgendes gefunden:
      DoubleMetaphone: http://hn273.users.phpclasses.org/browse/package/240.html
      Das ist eine PHP-Klasse die genauer arbeiten soll als die in PHP eingebaute Funktion metaphone().

      Viele Grüße,
      Horst

  2. Bonjour!

    weiß jemand ob (und wie/womit) es in PHP möglich ist Zeichenketten zu vergleichen und auch (z.B. phonetisch) annähernde Treffer zu bekommen.
    Gibt es da schon in PHP implementierte Möglichkeiten oder auch andere?

    Soweit ich weiß nicht  - eventuell wirst Du hier fündig:
    http://www.phpclasses.org
    da gibt es eine Suchfunktion und tonnenweise Klassen zum download.

    Ciao

    Sven a.M.a.l.N

  3. Hallo Horst

    weiß jemand ob (und wie/womit) es in PHP möglich ist Zeichenketten zu vergleichen und auch (z.B. phonetisch) annähernde Treffer zu bekommen.

    Eine Funktion welche die prozentuale Ähnlichkeit zweier Strings ermittlet ist similar_text

    http://de.php.net/manual/en/function.similar-text.php

    In Aktion sehen kannst Du das z.B. auf unserer Maledivas 404 - Seite

    http://www.maledivas.de/lala.html

    dort werden alle vorhandenen Seiten nach Ihrer grössten Übereinstimmung zur angeforderten angezeigt.

    Hier bekommen lulu.html und anna.html den gleichen Wert.
    Die Funktion ist also relativ "dumm".

    Für Deinen Fall ist vermutlich soundex besser geeignet.

    http://de.php.net/manual/en/function.soundex.php

    Du brauchst aber in jedem Fall eine vollständige Liste aller verfügbaren (Bild-)Kategorien, um dann zum Suchbegriff die besten X Treffer ausgeben zu können.

    Viele Grüße

    lulu

    --
    bythewaythewebsuxgoofflineandenjoytheday
    1. Hallo lulu,

      Eine Funktion welche die prozentuale Ähnlichkeit zweier Strings ermittlet ist similar_text

      In Aktion sehen kannst Du das z.B. auf unserer Maledivas 404 - Seite
      http://www.maledivas.de/lala.html

      [...]

      Für Deinen Fall ist vermutlich soundex besser geeignet.

      Es gibt wohl mehrere Möglichkeiten wie ich jetzt herausgefunden habe:

      http://de.php.net/manual/en/function.similar-text.php
      http://de.php.net/manual/en/function.soundex.php
      http://de.php.net/manual/en/function.metaphone.php

      Die Funktion metaphone gibt wohl etwas bessere Treffer aus als soundex, wenn man die englische Sprache zu Grunde legt.

      Wer grundsätzlich für eine Aufgabenstellung mit metaphone arbeiten kann sollte sich auch noch DoubleMetaphone http://hn273.users.phpclasses.org/browse/package/240.html ansehen.

      Du brauchst aber in jedem Fall eine vollständige Liste aller verfügbaren (Bild-)Kategorien, um dann zum Suchbegriff die besten X Treffer ausgeben zu können.

      Ja, um das wirklich vernüftigt nutzen zu können bedarfs leider noch etwas mehr, ;-). Ich 'frisiere' gerade die Gallery-Version eines Kollegen.

      Das Problem ist das man dann nur nach 'einzelnen', 'ganzen' Worten suchen kann, und mit Teileingaben wie z.B. Eis dann leider keinen Eisverkäufer findet oder auch kein Himbeereis.
      _________

      Das die Maledivas 404 - Seite eine Hitliste der ähnlichsten Eingaben des Request-Namens ausgibt habe ich noch nicht gesehen. Ich glaube die 404 Seite habe ich noch gar nicht gesehen. Aber alles andere schon!
      Die Seite gefällt mir sehr gut, ich habe mich nur nicht in den E-Mail-Reminder eingetragen weil Ihr anscheinend nur in H und noch weiter nördlich spielt, und überhaupt nie nicht hier 'runter kommt.

      Deshalb bleibt mir nur Eure Songs übers Netz anzuhören. Wenn Du mal die Weblogs überprüfst wirst Du sehr wahrscheinlich feststellen das 'Heroes' am häufigsten abgerufen wird.? Das bin immer ich, ;-)
      Danach kommt Maedchen/JamesBrown.

      Viele Grüße,
      Horst

      1. Noch mal hallo lulu,

        http://www.maledivas.de/lala.html
        [...]
        Das die Maledivas 404 - Seite eine Hitliste der ähnlichsten Eingaben des Request-Namens ausgibt habe ich noch nicht gesehen. Ich glaube die 404 Seite habe ich noch gar nicht gesehen. Aber alles andere schon!

        ich hab' sie mir jetzt mal angesehen:
        Also, das ist ja wohl die aufwendigste 404-Seite die ich jeh' gesehen habe. Echt gut! (Ich hab's mal mit und ohne Referer-Header probiert.)

        Viele Grüße,
        Horst

        1. Huhu Horst

          Ich glaube die 404 Seite habe ich noch gar nicht gesehen.

          so soll es ja auch sein ;-)

          ich hab' sie mir jetzt mal angesehen:
          Also, das ist ja wohl die aufwendigste 404-Seite die ich jeh' gesehen habe. Echt gut! (Ich hab's mal mit und ohne Referer-Header probiert.)

          Danke, da habe ich tatsächlich alles was mir (oder anderen) damals so an 404-Features eingefallen ist eingebaut.

          Viele Grüße

          lulu

          --
          bythewaythewebsuxgoofflineandenjoytheday
      2. Huhu Horst

        Wer grundsätzlich für eine Aufgabenstellung mit metaphone arbeiten kann sollte sich auch noch DoubleMetaphone http://hn273.users.phpclasses.org/browse/package/240.html ansehen.

        Habe ich eben mal gemacht, da ist noch mindestens ein grober Schnitzer drin.

        Der Konstruktor in der Klasse heisst "MetaPhone" und nicht wie die
        Klasse "DoubleMetaPhone".
        Nachdem ich das korrigiert hatte klappte es auch mit dem Beispiel "mptest.php", bzw. "mptest.php3".

        Das Problem ist das man dann nur nach 'einzelnen', 'ganzen' Worten suchen kann, und mit Teileingaben wie z.B. Eis dann leider keinen Eisverkäufer findet oder auch kein Himbeereis.

        Das müsste sich aber dahingehend ändern lassen, dass man auch nach Wortteilen suchen kann (ggf. optional).

        Eine Tippfehlertoleranz wäre dann eine weitere Steigerung[1], und wenn sogar semantische Zusammenhänge berücksichtigt werden also "Eis" auch "Sorbet" findet kriegt man bestimmt bei Google einen Job ;-)

        [...] nur in H und noch weiter nördlich spielt, und überhaupt nie nicht hier 'runter kommt.

        Naja, vor ca. einem Jahr war sogar mal Aachen im Gespräch, ist aber bisher nichts draus geworden.
        Im Moment sind wir nur spärlich gebucht, dieses Jahr wird es wohl bei H,KI und HL bleiben.

        Viele Grüße

        lulu

        [1] wobei es vermutlich keinen Sinn macht Teilausdrücke UND Tippfehler/ Buchstabendreher zu berücksichtigen, denn sonst würde "eis" ja auch
        Spiess, Seilbahn, Resi oder Isegrimm finden

        --
        bythewaythewebsuxgoofflineandenjoytheday
        1. Hallo lulu,

          [...]

          Eine Tippfehlertoleranz wäre dann eine weitere Steigerung[1], und wenn sogar semantische Zusammenhänge berücksichtigt werden also "Eis" auch "Sorbet" findet kriegt man bestimmt bei Google einen Job ;-)

          [...]

          [1] wobei es vermutlich keinen Sinn macht Teilausdrücke UND Tippfehler/ Buchstabendreher zu berücksichtigen, denn sonst würde "eis" ja auch
          Spiess, Seilbahn, Resi oder Isegrimm finden

          lol

          Ja, das scheint mir schon ein gewaltiges Thema zu sein.

          Die Lösung die hier jetzt mit dem Gallery angestrebt wird ist einfach per Dropdown-Select eine Liste mit verfügbaren Suchworten vorzuschlagen. Anschliessend werden dann die Suchtreffer jeweils mit all ihren Keywords als erneute Suchlinks ausgegeben. Somit soll sich ein Besucher relativ einfach in die (von meinem Kollegen) verwendeten Suchwort-Kategorien einfinden können.
          Eine Freie-Texteingabe-Suche wird von Gallery sowieso nur für 'ein' Wort unterstützt. Alles nach dem ersten Leerzeichen wird ignoriert.
          Evtl. werde ich die Suche dahin gehend ändern das alle Eingaben berücksichtigt werden, wenn's dann nicht zu langsam wird.

          Viele Grüße,
          Horst