Homepagebau
Dateiversion:
diesen Beitrag diskutieren,
ergänzen, eine Frage stellen

Ähnlichkeit zweier Namen berechnen

Schwierigkeit: für Anfänger und Fortgeschrittene

 

Skript downloadenVersion: 10.04.2004


ZIP-Archiv
6 kbyte

Skript ausprobieren

Hinweis: Für die Installation dieses Pakets benötigen sie PHP4 und einen FTP-Zugang.

 

Beschreibung:

Sie kennen wahrscheinlich Seiten im Netz, auf denen sie 2 Namen eingeben und die Chancen ausrechnen lassen können, dass die beiden Personen als Paar zusammen passen. In diesem Artikel werden sie erfahren, wie ein solches Scherzprogramm funktioniert. Außerdem können sie sich auch gleich das fertige Skript für ihre eigene Website herunterladen.

Quelltext:

Dieses Programm ist bei uns sowohl für JavaScript, als auch für PHP verfügbar. In diesem Abschnitt wird die PHP-Version beschrieben.

Entweder sind sie der Meinung, dass die Personen gut zusammen passen, deren Namen besonders ähnlich sind. Oder aber die Personen, deren Namen sich stark unterscheiden. Für diesen Artikel werde ich die letztere Variante wählen.

Das Eingabeformular wird den Besucher auffordern, seinen eigenen Namen und den Namen des Liebsten einzugeben. Unser Skript erhält also 2 Strings $a und $b als Eingabe. Wir berechnen nun die Levenshteindistanz dieser beiden Strings. Diese Operation ist in PHP bereits vorimplementiert. Die Levenshteindistanz beschreibt, wie viele Buchstaben sie löschen, einfügen oder austauschen müssen, um aus $a den String $b zu machen. Das heißt, je größer die Levenshteindistanz, umso unterschiedlicher sind die beiden Strings.

Die Levenshteindistanz ist also eine positive, ganze Zahl. Sie ist größer oder gleich Null und sie ist maximal so groß, wie der längere der beiden Strings $a, $b lang ist. Weil: mehr als alle und weniger als gar keine Buchstaben selbstverständlich nicht manipuliert werden können. Wir berechnen diese Zahl in PHP durch die Folgende Anweisung:

$distanz = levenshtein($a,$b);

Jetzt haben wir zwar eine ganze Zahl. Um ein Maß für die Unterschiedlichkeit der beiden Strings zu erhalten, müssen wir diese Zahl ins Verhältnis zur Länge der Wörter setzen. Also: wie viele Buchstaben müssen manipuliert werden im Verhältnis zur Anzahl der maximal manipulierbaren Buchstaben.

Dazu bestimmen wir mit Hilfe der in PHP eingebauten Funktion max() zunächst das Maximum:

$quotient = max(strlen($a), strlen($b));

Nun können wir das Verhältnis der Distanz zum Maximum bestimmen und damit die "potentiellen Chancen" auf eine glückliche Beziehung berechnen:

$chance = $distanz / $quotient;

Damit das Ergebnis für die Ausgabe etwas "schöner" ausschaut, rechnen wir die Zahl auf Prozent um. Abschließend runden wir das Ergebnis auf 2 Nachkommastellen.

Umrechnen in Prozent:

$prozent = $chance * 100;

Zum runden des Ergebnisses auf 2 Nachkommastellen verwenden wir die eingebaute Funktion round():

$rund = round($prozent,2);

Damit ist das Programm fertig und in der Lage, die Chancen für eine glückliche Beziehung zu bestimmen. Mit gerade einmal 5 Zeilen Quelltext erhalten sie so ein nettes, kleines Scherzprogramm für ihre Homepage...

Zum Nachschlagen

int levenshtein(string a, string b)
bestimmt wie viele Schritte notwendig sind, um alle Buchstaben aus String a durch Austauschen, Einfügen oder Löschen in String b umzuwandeln.

mixed max(mixed val{, mixed vals})
bestimmt das Maximum aus einer Reihe von Eingaben. Diese Eingaben können auch Arrays sein und es muss sich nicht unbedingt um Zahlen handeln. Die Eingaben müssen allerdings vergleichbar sein.

int strlen(string a)
bestimmt die Länge des Strings a. Die Länge des leeren Strings "" ist 0.

double round(double val[, int precision])
liefert für die angegebene Zahl das gerundete Ergebnis. Der Parameter "precision" ist optional und gibt die Zahl der Nachkommastellen an, auf die gerundet werden soll. Der Default-Wert für diese Parameter ist 0.

 

Dieses Skript darf (wie alle Skripte bei uns) nicht zu kommerziellen Zwecken oder von Firmen sondern lediglich von Privatpersonen für private Homepages und/oder gemeinnützigen Vereinen für deren Webseiten verwendet werden.
Insbesondere untersagt ist jede unerlaubte Weitergabe oder Verkauf!