Ce face grapheme_levenshtein
Distanța Levenshtein spune câte modificări (inserări, ștergeri, înlocuiri) transformă un text în altul. levenshtein() numără octeți, așa că o literă cu diacritice (2 octeți în UTF-8) poate conta ca două modificări.
grapheme_levenshtein numără grafeme, adică ce vede omul ca un caracter. Este potrivită pentru sugestii „ai vrut să scrii…?” pe text românesc.
Parametri
| Parametru | Descriere |
|---|---|
$string1, $string2 |
Textele comparate (UTF-8). |
$insertion_cost, $replacement_cost, $deletion_cost |
Costul fiecărei operații (implicit 1). |
$locale |
Opțional. Regiunea folosită la compararea caracterelor. |
Ce returnează
Numărul de modificări (int), sau false la eroare.
Exemple
Exemplul 1: Diacritice: octeți față de grafeme
<?php
echo levenshtein("mașină", "masina") . " (levenshtein, pe octeți)\n";
echo grapheme_levenshtein("mașină", "masina") . " (grapheme_levenshtein)";
Rezultat
4 (levenshtein, pe octeți)
2 (grapheme_levenshtein)
Exemplul 2: Sugestie pentru un oraș scris greșit
<?php
$orase = ["Iași", "Brașov", "Timișoara", "Constanța"];
$cautat = "Brasov";
$distante = [];
foreach ($orase as $oras) {
$distante[$oras] = grapheme_levenshtein(mb_strtolower($cautat), mb_strtolower($oras));
}
asort($distante);
echo "Ai vrut să scrii " . array_key_first($distante) . "?";
Rezultat
Ai vrut să scrii Brașov?
Greșeli frecvente
- Compari texte cu litere mari și mici amestecate: „Iași” și „iași” sunt la distanța 1. Folosește
mb_strtolowerpe ambele. - Folosești funcția pe PHP 8.4 sau mai vechi: există doar din PHP 8.5.
Comenzi înrudite
levenshtein: Calculează câte modificări de caractere sunt necesare ca un text să devină altul (distanța Levenshtein).similar_text: Calculează cât de asemănătoare sunt două texte, ca număr de caractere comune și ca procent.grapheme_str_split: Împarte un text în caractere așa cum le vede omul (grafeme), inclusiv emoji compuse și litere cu semne separate.soundex / metaphone: Calculează o cheie fonetică: cuvintele care se pronunță asemănător (în engleză) primesc aceeași cheie.