Distance de Levenshtein : Le Guide Ultime pour Mesurer la Similarité Textuelle

Dominique Megnidro - Nov 7 - - Dev Community

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 :

  1. Insertion : Ajouter un caractère.
  2. Suppression : Supprimer un caractère.
  3. Substitution : Remplacer un caractère par un autre.

Ce concept est au cœur de nombreuses applications modernes, telles que la correction orthographique, la recherche floue, et la comparaison ADN.

Le Concept Mathématique

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 :

Image description

Implémentation en Python

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
Enter fullscreen mode Exit fullscreen mode

Applications Pratiques

1. Correction Orthographique

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.

2. Recherche Floue

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.

3. Comparaison ADN

En bioinformatique, cette distance aide à mesurer la similarité entre deux séquences ADN, chaque opération représentant une mutation possible.

4. Authentification et Détection de Fraude

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.

Optimisation : Distance de Levenshtein avec Mémoire Réduite

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 optimized_levenshtein(a, b):
    n, m = len(a), len(b)
    prev = list(range(m + 1))
    curr = [0] * (m + 1)

    for i in range(1, n + 1):
        curr[0] = i
        for j in range(1, m + 1):
            insert = curr[j - 1] + 1
            delete = prev[j] + 1
            substitute = prev[j - 1] + (0 if a[i - 1] == b[j - 1] else 1)
            curr[j] = min(insert, delete, substitute)
        prev, curr = curr, prev

    return prev[m]

# Exemple d'utilisation
print(optimized_levenshtein("kitten", "sitting"))  # Sortie : 3
Enter fullscreen mode Exit fullscreen mode

Conclusion

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 !

Vous avez des questions ou des idées sur la distance de Levenshtein ? Partagez-les dans les commentaires ! 🚀

. . . . . . . . . . . . . . . . . . . . . . . . . . .