Hallo liebe Community,
habe mir Soundex einmal angeschaut, leider vergleicht es nur die Ausprache (und das auch noch im Englischen), daher ist es wie du bereits sagtest ungeeignet.
Wie kann ich dennoch eine Eingabe mit den Einträgen in der Datenbank vergleichen?
Das Ganze ohne Datenbank sieht aktuell wie folgt aus:
[code]<?php
// eingegebenes falsch geschriebenes Wort
$input = ‘Aingabe’;
// Wörterarray als Vergleichsquelle
$words = array(‘Eintrag’,‘Eingabe’,‘Input’,‘Eintragung’);
// noch keine kürzeste Distanz gefunden
$shortest = -1;
// durch die Wortliste gehen, um das ähnlichste Wort zu finden
foreach ($words as $word) {
// berechne die Distanz zwischen Inputwort und aktuellem Wort
$lev = levenshtein($input, $word);
// auf einen exakten Treffer prüfen
if ($lev == 0) {
// das nächste Wort ist das Wort selbst (exakter Treffer)
$closest = $word;
$shortest = 0;
// Schleife beenden, da wir einen exakten Treffer gefunden haben
break;
}
// Wenn die Distanz kleiner ist als die nächste gefundene kleinste Distanz
// ODER wenn ein nächstkleineres Wort noch nicht gefunden wurde
if ($lev <= $shortest || $shortest < 0) {
// setze den nächstliegenden Treffer und die kürzestes Distanz
$closest = $word;
$shortest = $lev;
}
}
echo “Eingegebenes Wort: $input\n”;
if ($shortest == 0) {
echo “Exakter Treffer gefunden: $closest\n”;
} else {
echo “Meinten Sie: $closest?\n”;
}
// Ausgabe des Status der für den Befehl hinterlegt ist
if ($closest == “Eintrag”) {echo “Der Befehl wird nicht bestätigt.”;}
if ($closest == “Eingabe”) {echo “Der Befehl wird bestätigt.”;}
if ($closest == “Input”) {echo “Der Befehl ist gesperrt.”;}
if ($closest == “Eintragung”) {echo “Der Befehl wird bereits verwendet.”;}
?>
[/code]
Dies müsste nun mit einer Datenbank umgesetzt werden. Natürlich liesen sich die Einträge der Datenbank in einen Array lesen und man könnte das obige Script soweit verwenden allerdings ist das vermutlich nicht sehr effizient.
Liebe Grüße
MaxT 