Comparer les textes avec la fonction levenshtein en PHP

Temps de lecture : 10 minutes environ.

Dans le domaine de la programmation, il est souvent nécessaire de comparer des chaînes de caractères pour déterminer leur similarité. PHP propose une fonction native pour cela : la fonction Levenshtein. Dans cet article, nous allons explorer cette fonction en détail, comprendre comment elle fonctionne, et voir comment l'utiliser efficacement dans vos projets PHP.

Qu'est-ce que la Distance de Levenshtein ?

La distance de Levenshtein, parfois appelée "distance d'édition", est le nombre minimum de modifications (insertion, suppression ou remplacement de caractères) nécessaires pour transformer une chaîne de caractères en une autre. Par exemple, pour transformer "chat" en "chien", il faut remplacer "a" par "i", ajouter "n", et remplacer "t" par "e", ce qui donne une distance de 3.

Utilisation de la Fonction Levenshtein en PHP

PHP fournit une fonction native levenshtein() qui permet de calculer cette distance entre deux chaînes de caractères. Voici comment elle fonctionne :

$distance = levenshtein("chat", "chien");
echo $distance; // Affichera 3

Cette fonction peut également accepter des paramètres optionnels pour personnaliser les coûts d'insertion, de suppression et de remplacement :

$distance = levenshtein("chat", "chien", 2, 1, 3);

Dans cet exemple, le coût de chaque insertion est de 2, la suppression coûte 1, et le remplacement coûte 3.

Exemple Pratique : Comparer un Mot avec une Liste de Mots

Supposons que vous avez un mot saisi par un utilisateur, et que vous voulez trouver le mot le plus proche dans une liste prédéfinie. Voici un exemple de code PHP pour accomplir cela :

$input = "cheval";
$list = ["lapin", "vache", "cheval", "renard", "corbeau"];

$closest = null;
$shortest = -1;

foreach ($list as $word) {
$lev = levenshtein($input, $word);

if ($lev == 0) {
$closest = $word;
$shortest = 0;
break;
}

if ($lev < $shortest || $shortest < 0) {
$closest = $word;
$shortest = $lev;
}
}

if ($shortest == 0) {
echo "Le mot exact a été trouvé : $closest";
} else {
echo "Le mot exact n'a pas été trouvé. Le mot le plus proche est : $closest";
}

Dans cet exemple, le script parcourt la liste des mots et utilise la fonction levenshtein() pour trouver le mot le plus proche de l'entrée utilisateur "cheval". Si un mot exact est trouvé, il s'arrête immédiatement; sinon, il retourne le mot avec la distance la plus courte.

Autres Fonctions Similaires : similar_text et soundex

En plus de levenshtein(), PHP propose d'autres fonctions utiles pour comparer des chaînes de caractères.

similar_text()

Cette fonction calcule le pourcentage de similarité entre deux chaînes. Par exemple :

$similarity = 0;
similar_text("cheval", "chaval", $similarity);
echo "Les chaînes sont similaires à $similarity %";

Cela peut être particulièrement utile pour suggérer des corrections orthographiques.

soundex() et metaphone()

Ces fonctions sont utilisées pour comparer des chaînes en se basant sur leur prononciation plutôt que sur leur orthographe. Cela peut être utile dans des applications où l'orthographe exacte n'est pas critique, mais où une similitude sonore est recherchée.

Conclusion

La fonction levenshtein() est un outil puissant pour comparer des chaînes de caractères en PHP, permettant de déterminer la distance d'édition entre elles. Combinée à d'autres fonctions comme similar_text(), soundex(), et metaphone(), elle peut être utilisée pour créer des fonctionnalités avancées de comparaison de texte, telles que la correction automatique, la recherche de similarités dans des bases de données, ou l'amélioration de l'expérience utilisateur sur les moteurs de recherche internes.

N'hésitez pas à expérimenter avec ces fonctions dans vos projets pour voir comment elles peuvent vous aider à améliorer la robustesse et la convivialité de vos applications.

Obtenir de l'aide

Pour obtenir de l'aide, vous pouvez accéder au serveur Discord pour une entraide par chat

Comparer les textes avec la fonction levenshtein en PHP
Article publié le

Catégorie : PHP

Mots-clés : PHP textes fonctions

Partager : Partager sur Facebook Partager sur Twitter Partager sur LinkedIn