Das ist ziemlich einfach für die Entfernung 1. Das Erzeugen aller Möglichkeiten für Entfernungen> 1 wird etwas komplexer.
Beginnen Sie mit einem Wort:
$input = 'word';
Split das Wort in Buchstaben und eine Liste der Ersatz zu erzeugen.
$letters = str_split($input);
$alphabet = range('a', 'z');
Löschungen sind die einfachste, nur eine Schleife über jede Position und ersetzen mit ''
:
foreach ($letters as $i => $letter) {
$variants[] = substr_replace($input, '', $i, 1);
}
Einfügungen und Ersetzungen können zur gleichen Zeit durchgeführt werden, weil sie werden sowohl eine Schleife über die erfordern Buchstaben in der Eingabe verschachtelt in einer Schleife über dem Alphabet.
foreach ($alphabet as $variation) {
foreach ($letters as $i => $letter) {
// insertion
$variants[] = substr($input, 0, $i) . $variation . substr($input, $i);
// substitution
// (check that the letter is different or you'll get multiple copies of the input)
if ($variation != $letter) {
$variants[] = substr_replace($input, $variation, $i, 1);
}
}
$variants[] = $input . $variation; // handle insertion at the end
}
Sie können die Ergebnisse überprüfen die levenshtein Abstände korrekt sind, um zu überprüfen:
foreach ($variants as $variant) {
$result[$variant] = levenshtein($input, $variant);
}
Mögliche Duplikat (http [Wie alle Strings zu einem bestimmten Bearbeitungs Abstand von einem gegebenen String finden]: // stackoverflow.com/questions/12886997/how-to-find-all-strings-at-a-given-edit-distance-from-a-given-string) –
Hallo Daniel, ich habe diesen Artikel bereits gelesen, aber es steht geschrieben mit Python und sie sprechen darüber, wie Google-Suche funktioniert. Ich glaube nicht, dass meine Frage doppelt ist. Ich suche hier eine PHP Lösung. –
Wie würden Sie diese Aufgabe mit Stift und Papier erledigen? Nehmen wir an, Ihr Wort ist "AB" und Ihr Alphabet ist "A", "B", "C". Ich denke, es ist einfach für Sie, dies auf dem Papier zu lösen. Schreiben Sie einfach PHP-Code, der dieselben Operationen ausführt wie Sie. –