PHP: Verwandtschaft zweier Strings berechnen

Manchmal braucht man eine entspanntere Vergleichsoperation als das ==, etwa, um festzustellen, ob zwei Zeichenketten einander ähneln. Das könnte sinnvoll sein, wenn man beispielsweise aus einer Menge von Daten den Begriff sucht, der dem gesuchten Wort am ähnlichsten ist

Dazu existiert in PHP die Funktion levenshtein(string1,string2). Sie gibt als Ergebnis die Anzahl Einfüge-, Lösch- oder Ersetzungsoperationen zurück, mit der man den einen String in den anderen verwandeln kann. Sind beide Strings gleich, lautet das Ergebnis 0.

Ein Beispiel: Die folgende Zeile gibt als Ergebnis die Zahl 2 aus:

echo levenshtein("abc","bcd");

Mit der levenshtein-Funktion könnte man eine fehlertolerante Passwort-Prüfung realisieren und beispielsweise ein falsch eingegebenes Zeichen zulassen. An der relevanten Stelle ersetzt man dann einen Ausdruck wie

if ($pw_user==pw_db)

gegen die tolerante Version 

if (levenshtein($pw_user,pw_db) <= 1)

Das Problem “Meyer” gegen “Meier” mit Soundex lösen

Besonders bei Namen steht der Programmierer oft vor einem Problem: Der Benutzer kennt möglicherweise nicht die richtige Schreibweise und findet dann den gewünschten Eintrag nicht.

Dem können Sie mit Hilfe der soundex()-Funktion begegnen. Die errechnet aus einer Zeichenkette einen speziellen Soundex-Wert, der sich mit dem Ergebnis aus anderen Zeichenketten vergleichen lässt. Ein Beispiel: 

<?php

$strName1 = 'Meier';

$strName2 = 'Meyer';

if (soundex($strName1) == soundex($strName2))

{

echo $strName1.' klingt wie '.$strName2;

}

else

{

echo 'Keine Ähnlichkeit zwischen '.$strName1.' und

'.$strName2;

}

?> 

Im Beispiel erkennt das Programm, dass die Namen “Meier” und “Meyer” ähnlich klingen.

Übrigens: Bei Datenbankabfragen brauchen Sie nicht die PHP-Soundex-Funktion zu bemühen. Verwenden Sie stattdessen die MySQL-Version der Funktion in der Abfrage. Mehr dazu finden Sie in der MySQL-Referenz.

Ähnliche Beiträge