Maison >développement back-end >Tutoriel Python >Distance de Levenshtein : Le Guide Ultime pour Mesurer la Similarité Textuelle
La distance de Levenshtein, aussi connue sous le nom de distance d'édition, est une mesure essentielle pour évaluer la similarité entre deux chaînes de caractères. Elle compte le nombre minimal d'opérations nécessaires pour transformer une chaîne en une autre. Ces opérations incluent :
Ce concept est au cœur de nombreuses applications modernes, telles que la correction orthographique, la recherche floue, et la comparaison ADN.
La distance de Levenshtein entre deux chaînes ( A ) et ( B ) de longueurs ( n ) et ( m ), respectivement, peut être calculée en utilisant une approche dynamique. On définit une matrice ( D ) de dimensions ((n 1) times (m 1)), où chaque ( D[i][j] ) représente le coût minimum pour transformer les ( i ) premiers caractères de ( A ) en les ( j ) premiers caractères de ( B ).
La formule de récurrence est la suivante :
Voici une implémentation simple en Python pour calculer la distance de Levenshtein :
def levenshtein_distance(a, b): n, m = len(a), len(b) dp = [[0] * (m + 1) for _ in range(n + 1)] for i in range(n + 1): for j in range(m + 1): if i == 0: dp[i][j] = j elif j == 0: dp[i][j] = i elif a[i - 1] == b[j - 1]: dp[i][j] = dp[i - 1][j - 1] else: dp[i][j] = 1 + min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) return dp[n][m] # Exemple d'utilisation print(levenshtein_distance("kitten", "sitting")) # Sortie : 3
Les correcteurs orthographiques utilisent Levenshtein pour suggérer des mots proches en cas de fautes de frappe. Par exemple, si vous tapez helo, il peut suggérer hello ou hero.
Dans les moteurs de recherche, la distance de Levenshtein permet d'obtenir des résultats même lorsque l'utilisateur fait des erreurs de frappe.
En bioinformatique, cette distance aide à mesurer la similarité entre deux séquences ADN, chaque opération représentant une mutation possible.
Les systèmes de détection d'usurpation d'identité peuvent comparer les entrées utilisateur avec les données existantes, en tenant compte des petites différences textuelles.
L'algorithme classique utilise une matrice complète, ce qui peut être gourmand en mémoire. Heureusement, on peut optimiser en utilisant seulement deux lignes de mémoire, car chaque calcul ( D[i][j] ) dépend uniquement de ( D[i-1][j] ), ( D[i][j-1] ), et ( D[i-1][j-1] ).
def levenshtein_distance(a, b): n, m = len(a), len(b) dp = [[0] * (m + 1) for _ in range(n + 1)] for i in range(n + 1): for j in range(m + 1): if i == 0: dp[i][j] = j elif j == 0: dp[i][j] = i elif a[i - 1] == b[j - 1]: dp[i][j] = dp[i - 1][j - 1] else: dp[i][j] = 1 + min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) return dp[n][m] # Exemple d'utilisation print(levenshtein_distance("kitten", "sitting")) # Sortie : 3
La distance de Levenshtein est un outil puissant, polyvalent et largement utilisé dans de nombreux domaines. Bien qu'il soit simple à comprendre, ses optimisations et applications complexes démontrent sa valeur dans les systèmes modernes.
En explorant plus loin, on peut aussi se tourner vers des variantes comme la distance de Damerau-Levenshtein, qui prend en compte les transpositions. Vous êtes désormais armé pour intégrer cet outil dans vos projets ou simplement impressionner vos pairs avec vos connaissances approfondies !
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!