hi,
möchte einen levenshtein abgleich machen. Habe dazu auch ein Beispiel im Internet gefunden:
// eingegebenes falsch geschriebenes Wort
$input = 'carrot';
// Wörterarray als Vergleichsquelle
$words = array('apple','pineapple','banana','carot');
// 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 $word . " " . $lev . "<br>";
}
}
Jetzt wollte ich den Code so anpassen, dass ein array mit den 5 besten Treffern generiert wird und nach Güte sortiert ist.
Habe aber Probleme damit, dieses Array aufzubauen. Nehme mal an, dass geht nur mit einem 2-Dimensionalen.
Kann ich ein 2-D Array erstellen, welches max 5 Einträge hat und dann irgendwie schauen, wo mein neuer $lev-wert reinpasst (bspw. zwischen Eintrag 2 und 3), um den neuen Wert dann direkt dort reinzuschieben und alle nachfolgenden Elemente "nach unten schieben", wobei dann autom. das zuvor 5. Element "rausfällt"?
Hoffe das war verständlich :-)
Danke und Gruß
PS: Kann ich mit PHP bei levenshtein() auch irgendwie die phonetische Gewichtung mit einbauen?