bert: levenshtein vorschlagsliste

Beitrag lesen

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?