Vous êtes sur la page 1sur 3

Sujet dtude : distance de Levenshtein

La distance de Levenshtein mesure le degr de similarit entre deux chanes de caractres. Elle est
gale au nombre minimal de caractres quil faut supprimer, insrer ou remplacer pour passer dune
chane lautre. Cest une distance au sens mathmatique du terme, donc en particulier cest un
nombre positif ou nul, et deux chanes sont identiques si et seulement si leur distance est nulle. On a
aussi des proprits de symtrie, et lingalit triangulaire de la gomtrie est ici aussi vrifie.
Par exemple, pour passer de la chane NICHE la chane CHIENS, il faut :
supprimer les lettres N et I,
insrer les lettres I, N et S.
donc la distance de Levenshtein entre ces deux chanes est au plus 5. On peut montrer1 quelle est
en fait exactement 5. Notons au passage que cette distance ne sintresse pas aux dplacements de
caractres.
Une des applications de cette distance est la correction orthographique : lorsquune personne tape un
mot, on le compare un dictionnaire. Si le mot est prsent, on ne fait rien, sinon, on cherche parmi
les mots du dictionnaire ceux dont la distance de Levenshtein au mot tap est infrieure une limite
donne. Les mots les plus proches sont suggrs comme remplacement en premier.
La mesure de la distance de Levenshtein entre deux chanes Chaine1 et Chaine2, de longueurs respectives n1 et n2, consiste en la mise en uvre lalgorithme suivant :
fonction DistanceDeLevenshtein ( Chaine1 , Chaine2 : chane ) : e n t i e r ;
// N est un e n t i e r reprsentant l a longueur
// de l a plus grande chane manipulable
variables :
n1 , n2 : e n t i e r s
// t a i l l e s des deux chanes
// Le tableau permettant de c a l c u l e r l a distance entre
// l e s deux chanes . On en remplira que l e s n1+1 premires
// lignes , e t l e s n2+1 premires colonnes .
d
: tableau [ 0 . . N, 0 . .N] d e n t i e r s ;
i , j , c : entiers
// c est l e cot d une substitution
n1 < longueur ( Chaine1 )
n2 < longueur ( Chaine2 )
// i n i t i a l i s a t i o n du tableau
pour i de 0 n1 f a i r e d [ i , 0 ] < i
pour j de 0 n2 f a i r e d [ 0 , j ] < j
// remplissage du tableau d , l i g n e par l i g n e
pour i de 1 n1 f a i r e
pour j de 1 n2 f a i r e
s i Chaine1 [ i ] = Chaine2 [ i ] a l o r s c < 0 sinon c < 1
d [ i , j ] < minimum(
d [ i 1, j ] + 1 // effacement
d[ i
, j 1] + 1 // i n s e r t i o n
d [ i 1, j 1] + c // substitution
)
retourner d [ n1 , n2 ]

Les remarques ne garantissent pas quon ne peut pas passer de NICHE CHIENS en faisant moins de 5 oprations.

Pour illustrer le fonctionnement de cet algorithme, observons son droulement avec Chaine1=SAMEDI
et Chaine2=VENDREDI. On commence par initialiser le tableau :

S
A
M
E
D
I

0
1
2
3
4
5
6

V
1

E
2

N
3

D
4

R
5

E
6

D
7

I
8

Ensuite on le remplit ligne par ligne, de la gauche vers la droite. Voici deux tapes intermdiaires :

S
A
M
E
D
I

0
1
2
3
4
5
6

V
1
1
2

E
2
2
2

N
3
3
3

D
4
4
4

R
5
5

E
6
6

D
7
7

I
8
8

S
A
M
E
D
I

0
1
2
3
4
5
6

V
1
1
2
3
4

E
2
2
2
3
3

N
3
3
3
3

D
4
4
4
4

R
5
5
5
5

E
6
6
6
6

D
7
7
7
7

I
8
8
8
8

Dans le tableau de gauche, la case au dessus de celle calcule contient 4, la cas gauche 3, le
minimum est donc 3, auquel on ajoute 1. La case en diagonale contient 3, auquel il faut ajouter 1
parce que la lettre A de SAMEDI nest pas la lettre D de VENDREDI. Le minimum des deux valeurs est
4, cest donc ce quon inscrit dans cette case.
Dans le tableau de droite, le principe est le mme, mais la lettre E tant commune aux deux mots, on
najoute rien la case en diagonale, le minimum est donc 3.
la fin du remplissage, on obtient le tableau suivant :

S
A
M
E
D
I

0
1
2
3
4
5
6

V
1
1
2
3
4
5
6

E
2
2
2
3
3
4
5

N
3
3
3
3
4
4
5

D
4
4
4
4
4
4
5

R
5
5
5
5
5
5
5

E
6
6
6
6
5
6
6

D
7
7
7
7
6
5
6

I
8
8
8
8
7
6
5

Le chemin en gras indique les oprations excuter pour passer du premier mot au second :
un dplacement horizontal indique une insertion,
un dplacement vertical indique une suppression,
un dplacement en diagonal indique une substitution.
Ainsi, la squence permettant de passer de SAMEDI VENDREDI est :
SAMEDI -> VSAMEDI -> VESAMEDI -> VENAMEDI -> VENDMEDI -> VENDREDI
soit deux insertions et trois substitutions. Dautres solutions sont possibles : il suffit daller de case
en case en partant de la case infrieure droite, et en allant vers une case ralisant le minimum calcul
dans cette case. Dans lexemple qui nous occupe, peu importe quel moment on fait les insertions et
les substitutions. On aurait ainsi pu faire :
SAMEDI -> VAMEDI -> VEMEDI -> VENEDI -> VENDEDI -> VENDREDI
Le but de ce sujet dtude est dtudier cet algorithme sur quelques exemples, et de raliser quelques
programmes le mettant en uvre et illustrant son fonctionnement.

TUDE

DE QUELQUES EXEMPLES

Pour bien comprendre comment fonctionne cet algorithme, tudions des exemples dans lesquels une
seule opration est raliser.
1) Construire la matrice issue du calcul de la distance entre PAPA et PARA (exemple dune unique
substitution).
2) Construire la matrice issue du calcul de la distance entre FORT et FORET (exemple dune unique
insertion).
3) Construire la matrice issue du calcul de la distance entre LEON et LEO (exemple dune unique
suppression).
4) Construire la matrice issue du calcul de la distance entre NICHES et CHINE.
Dduire de cette matrice tous les moyens de passer dun mot lautre en effectuant chaque
tape une seule opration.

M ISE

EN UVRE DE L ALGORITHME

1) crire une fonction P ASCAL prenant en argument deux chanes, et calculant la distance de Levenshtein entre elles.
Insrer cette fonction dans un programme permettant de la tester sur quelques chanes saisies
par lutilisateur.
2) Amliorer la fonction prcdente de manire lui faire afficher la matrice calcule, ainsi quune
suite de transformations possibles permettant de passer dune chane lautre.
3) Amliorer encore la fonction prcdente de manire lui faire afficher toutes les suites de transformations possibles.

UN

EXEMPLE DE CORRECTION OR THOGRAPHIQUE

On va tudier sur un exemple le mcanisme de suggestion de mots de substitutions lors dune correction orthographique.
1) crire une fonction prenant en argument une chane c, un entier k et un tableau t de N chanes,
et renvoyant un tableau r de chanes, ne contenant aucune chane si la chane c est une des
chanes de t, et contenant sinon toutes les chanes de t dont la distance C est infrieure k.
2) Tester votre fonction laide dun programme demandant lutilisateur de remplir un dictionnaire
(le tableau t), puis lui demandant une chane (la chane c) et une borne (lentier k), et renvoyant
toutes les suggestions issues du dictionnaire si le mot tap nest pas dans le dictionnaire.
On pourra ajouter une option permettant lutilisateur dajouter le mot tap au dictionnaire !

R ECHERCHES

COMPLMENTAIRES

Se documenter sur les sujets connexes aux notions tudies dans ce sujet dtude : distance entre
deux mots, correction orthographique...

Sources :
http://en.wikipedia.org/wiki/Levenshtein_distance
http://jean-paul.davalan.pagesperso-orange.fr/lang/algo/lev/index.html
http://rosettacode.org/wiki/Levenshtein_distance
3

Vous aimerez peut-être aussi