Maison >développement back-end >tutoriel php >PHP levenshtein()
Levenshtein() est une fonction intégrée à PHP qui est utilisée pour déterminer une unité de distance appelée distance de Levenshtein par rapport à deux chaînes. La définition de la distance de Levenshtein représente le nombre total de caractères qui doivent être modifiés comme remplacer, insérer ou supprimer la chaîne d'entrée pour la transformer en une autre chaîne.
PUBLICITÉ Cours populaire dans cette catégorie DEVELOPPEUR PHP - Spécialisation | Série de 8 cours | 3 tests simulésCommencez votre cours de développement de logiciels libres
Développement Web, langages de programmation, tests de logiciels et autres
Un poids égal est accordé aux 3 modifications ci-dessus (remplacer, supprimer, insérer) par défaut en PHP. Mais il existe une option pour nous de saisir le coût ou le poids de chacune de ces opérations en donnant les paramètres facultatifs pour ce qui précède. L'algorithme utilisé pour cette fonction a une complexité de O(a*b) où a et b sont respectivement la longueur des chaînes str1 et str2.
Il y a cependant quelques points à noter à propos de cette fonction :
Nous discutons ici de la syntaxe et des paramètres :
Syntaxe :
levenshtein(str1,str2,insert,replace,delete)
Paramètres :
La valeur par défaut des 3 derniers paramètres est 1.
Valeur de retour : Cette fonction génère la distance de Levenshtein entre les deux chaînes d'entrée. Il renvoie la valeur -1 si même l'un des caractères de la chaîne totale dépasse 255.
Prenons quelques exemples pour comprendre le fonctionnement de la fonction Levenshtein.
Code :
<?php // PHP code to determine levenshtein distance // between 2 strings $s1 and $s2 $s1 = 'rdo'; $s2 = 'rst'; print_r(levenshtein($s1, $s2)); ?>
Sortie :
Il s'agit d'un exemple de base où les 2 chaînes d'entrée s1 et s2 ont un mot composé chacune de 3 lettres différentes. Maintenant, la fonction Levenshtein compare ces 2 chaînes caractère par caractère et découvre la différence dans le nombre de caractères. Ici, il y a 2 lettres qui ne sont pas en commun sur les 3. Donc pour que la première chaîne soit identique à la deuxième chaîne, nous devons y ajouter les 2 lettres « s, t » d'où la sortie 2.
Code :
<?php // PHP code to determine levenshtein distance // between 2 strings $s1 and $s2 $s1 = 'first string'; $s2 = 'second string'; print_r(levenshtein($s1, $s2)); ?>
Sortie :
Dans cet exemple de base, nous pouvons connaître la distance de Levenshtein entre les 2 chaînes d'entrée qui sont représentées par s1 et s2 ici. Si nous comparons les caractères des deux chaînes, nous pouvons voir qu'elles ont un mot en commun, c'est-à-dire "chaîne". Et dans les mots restants, il compare entre les mots « premier » et « deuxième » ainsi qu'avec le mot commun « chaîne ». Ici, les seules lettres qui ne sont pas communes sont « f,e,c,o,d » et le « s » supplémentaire. Ainsi, la fonction Levenshtein renvoie la sortie sous la forme 6, ce qui signifie que ces 6 lettres sont la différence entre ces 2 chaînes d'entrée et grâce auxquelles ces 2 chaînes peuvent être rendues égales en termes de caractères.
Code :
<?php // PHP code to determine levenshtein distance // between $s1 and $s2 $s1 = 'Common Three Words'; $s2 = 'Common Words'; echo("The Levenshtein distance is: "); print_r(levenshtein($s1, $s2)); ?>
Sortie :
Ici, dans cet exemple, nous pouvons voir que la première chaîne contient 3 mots alors que la deuxième chaîne ne contient que 2 mots. Et on peut remarquer que ces deux mots de la deuxième chaîne sont déjà présents dans la première chaîne. Par conséquent, la seule différence de caractères ici sera le mot « Trois » qui comporte 5 caractères. Une chose intéressante à remarquer ici est que la sortie donne 6, ce qui signifie que même l'espace supplémentaire est également considéré comme un caractère.
<?php // Giving a misspelled word as input $ip = 'giraffee'; // sample set array to compare with $word_list = array('cat','dog','cow','elephant', 'giraffe','eagle','pigeon','parrot','rabbit'); // Since shortest distance is not found yet $short = -1; // Looping through array to find the closest word foreach ($word_list as $word_list) { // Calculating the levenshtein distance between // input word and the current word $levn = levenshtein($ip, $word_list); // To check for the matching word if ($levn == 0) { // This is the closest one which is an perfect match $closest = $word_list; $short = 0; // Here we break from foreach loop // when the exact match is found break; } // When the distance shown here is less than shortest distance // found in next iteration or if the next shortest word is // yet to be found if ($levn <= $short || $short < 0) { // Setting the shortest distance and one having // closest match to the input word $close = $word_list; $short = $levn; } } echo "Input word: $ip\n"; if ($short == 0) { echo "The closest/exact match found to the input word is: $close\n"; } else { echo "Did you mean to spell: $close?\n"; } ?>
Sortie :
L'exemple ci-dessus nous montre l'un des différents cas où cette fonction levenshtein peut être implémentée. Ici, nous aidons l'utilisateur à corriger un mot mal orthographié en le comparant avec un ensemble prédéfini d'un tableau contenant la liste des mots corrects.
Donc, au début, nous acceptons un mot saisi par l'utilisateur qui est généralement mal orthographié (girafe). Nous définissons un ensemble de noms d'animaux corrects, comme indiqué, qui a également l'orthographe correcte pour le mot d'entrée (girafe). Une boucle foreach est utilisée pour parcourir la liste des tableaux et trouver le mot le plus proche qui correspond à l'entrée et cela se fait à l'aide de la fonction levenshtein. La boucle est interrompue lorsqu'une correspondance exacte ou la plus proche est trouvée. A la fin, nous comparons la distance avec le paramètre court et si la distance est 0 cela signifie qu'une correspondance exacte est trouvée pour le mot d'entrée qui est ensuite imprimé dans la sortie.
Donc, fondamentalement, la fonction Levenshtein renvoie la distance en valeurs entières renvoyées en comparant caractère par caractère des 2 chaînes d'entrée qui lui sont données. Les deux premiers paramètres sont les chaînes d'entrée qui sont obligatoires et les 3 derniers paramètres sont facultatifs qui représentent le coût des opérations de suppression, d'insertion ou de remplacement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!