Funktionen für 'unscharfe' String-Vergleiche?
Horst Nogajski
- php
0 Stefan0 Sven Schrodt0 lulu0 Horst Nogajski0 Horst Nogajski0 lulu
0 lulu
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
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
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
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
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
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
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
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
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
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