In diesem Teil der Artikelserie “Exotische PHP-Funktionen” möchte ich euch gleich zwei Funktionen vorstellen, die mehr oder weniger das Gleiche bewirken: metaphone() und soundex(). Mit diesen Funktionen lassen sich Ähnlichkeiten von Strings überprüfen.
Anwendung
Beiden Funktionen wird als Parameter eine Zeichenkette übergeben, von der bei metaphone() der Metaphon-Schlüssel und bei soundex() der Soundex-Schlüssel als Zeichenkette zurückgegeben wird. Bei gleicher Aussprache wird der gleiche Wert zurückgegeben.
Laut PHP Manual arbeitet die metaphone()-Funktion genauer, da sie Grundregeln der englischen Aussprache kennt. Die Metaphon-Schlüssel sind zudem von variabler Länge. Soundex-Schlüssel hingegen bestehen immer aus vier Zeichen: ein Buchstabe gefolgt von drei Ziffern.
Beispiel
metaphone:
echo metaphone("train"); // TRN echo metaphone("terrain"); // TRN echo metaphone("not a train"); // NTTRN
soundex:
echo soundex("train"); // T650 echo soundex("terrain"); // T650 echo soundex("not a train"); // N336
Update 24.02.2010: Um deutsche Wörter zu vergleichen, liefert der Algorithmus der Kölner Phonetik bessere Ergebnisse. Ich habe einen Artikel dazu veröffentlicht. (» zum Artikel)
Tags: Aussprache, Funktion, metaphone, Parameter, Rückgabewert, soundex, String, Vergleich, Zeichenkette
Geil, was es net alles gibt
Aber schöne Idee, mit den exotischen Funktionen
Grüße
Erstaunt mich auch immer wieder,
dass man jeden Tag etwas Neues finden kann.
Hi Phil,
habe ich zuletzt auch noch verwendet, um die Ähnlichkeit von zwei Passwörtern zu ermitteln.
Wichtig wäre noch zu erwähnen, daß soundex() Schwächen im Bezug auf unsere deutsche Sprache hat und sich hier der Einsatz der “Kölner Phonetik” anbietet. Eine Implementierung des Algorithmus findet man hier: http://www.php.net/manual/de/function.soundex.php#84881
Aber Achtung ein kleiner Bug ist drin, dadurch nicht E_STRICT kompatibel:
Statt
for ($i=0;$i<$len;$i++){
müsste es heißen
for ($i=0;$i<$len-1;$i++){
Grüße
Hey, damit hast du mir meinen heutigen Artikel vorweggenommen.
Aber du hast recht: Ich hätte es schon in diesem Artikel erwähnen sollen.
Das es so was überhaupt gibt, richtig nett, werde es aber wohl nie benutzten.