Ce face levenshtein
levenshtein numără inserările, înlocuirile și ștergerile de caractere prin care primul text devine al doilea. Cu cât numărul este mai mic, cu atât textele sunt mai apropiate; 0 înseamnă identice.
Este folosită pentru sugestii de tip „Ai vrut să scrii…?”. Costul fiecărei operații poate fi schimbat prin ultimii trei parametri. Funcția lucrează pe octeți, deci o diacritică înlocuită contează ca 2 modificări.
Parametri
| Parametru | Descriere |
|---|---|
$string1 |
Primul text. |
$string2 |
Al doilea text. |
$insertion_cost |
Opțional. Costul unei inserări. Implicit 1. |
$replacement_cost |
Opțional. Costul unei înlocuiri. Implicit 1. |
$deletion_cost |
Opțional. Costul unei ștergeri. Implicit 1. |
Ce returnează
Numărul minim de modificări.
Exemple
Exemplul 1: Distanța dintre două cuvinte
<?php
echo levenshtein("Cluj", "Cluj") . "\n";
echo levenshtein("Brasov", "Bracov") . "\n";
echo levenshtein("Iasi", "Iași");
Rezultat
0
1
2
Exemplul 2: Sugestie „Ai vrut să scrii…?”
<?php
$orase = ["Iasi", "Cluj", "Timisoara", "Constanta", "Brasov"];
$scris = "Timisoar";
$cel_mai_bun = null;
$distanta_minima = PHP_INT_MAX;
foreach ($orase as $oras) {
$d = levenshtein(strtolower($scris), strtolower($oras));
if ($d < $distanta_minima) {
$distanta_minima = $d;
$cel_mai_bun = $oras;
}
}
echo "Ai vrut să scrii $cel_mai_bun?";
Rezultat
Ai vrut să scrii Timisoara?
Greșeli frecvente
- Compari cuvinte cu diacritice și distanța pare prea mare: „Iasi” și „Iași” au distanța 2, nu 1, pentru că „ș” are 2 octeți.
Comenzi înrudite
similar_text: Calculează cât de asemănătoare sunt două texte, ca număr de caractere comune și ca procent.strcmp / strcasecmp / strncmp: Compară două texte și spune dacă primul este mai mic, egal sau mai mare decât al doilea.