La distance de Jaro-Winkler mesure la similarité entre deux chaînes de caractères. Il s'agit d'une variante proposée en 1999 par William E. Winkler, découlant de la distance de Jaro (1989, Matthew A. Jaro) qui est principalement utilisée dans la détection de doublons.
Plus la distance de Jaro-Winkler entre deux chaînes est élevée, plus elles sont similaires. Cette mesure est particulièrement adaptée au traitement de chaînes courtes comme des noms ou des mots de passe. Le résultat est normalisé de façon à avoir une mesure entre 0 et 1, le zéro représentant l'absence de similarité.
La distance de Jaro entre chaînes s1 et s2 est définie par :
où:
Deux caractères identiques de s1 et de s2 sont considérés comme correspondants si leur éloignement (i.e. la différence entre leurs positions dans leurs chaînes respectives) ne dépasse pas :
Le nombre de transpositions est obtenu en comparant le i-ème caractère correspondant de s1 avec le i-ème caractère correspondant de s2. Le nombre de fois où ces caractères sont différents, divisé par deux, donne le nombre de transpositions.
Soit deux chaînes s1 MARTHA et s2 MARHTA. La table de correspondance est :
M | A | R | T | H | A | |
M | 1 | 0 | 0 | 0 | 0 | 0 |
A | 0 | 1 | 0 | 0 | 0 | 0 |
R | 0 | 0 | 1 | 0 | 0 | 0 |
H | 0 | 0 | 0 | 0 | 1 | 0 |
T | 0 | 0 | 0 | 1 | 0 | 0 |
A | 0 | 0 | 0 | 0 | 0 | 1 |
La distance de Jaro est :
La distance de Jaro-Winkler avec p = 0.1 avec un préfixe de longueur
Avec les chaînes s1 DWAYNE et s2 DUANE on trouve :
La distance de Jaro est :
Celle de Jaro-Winkler avec
Avec les chaînes s1 DIXON et s2 DICKSONX, on obtient :
D | I | X | O | N | |
D | 1 | 0 | 0 | 0 | 0 |
I | 0 | 1 | 0 | 0 | 0 |
C | 0 | 0 | 0 | 0 | 0 |
K | 0 | 0 | 0 | 0 | 0 |
S | 0 | 0 | 0 | 0 | 0 |
O | 0 | 0 | 0 | 1 | 0 |
N | 0 | 0 | 0 | 0 | 1 |
X | 0 | 0 | 0 | 0 | 0 |
On calcule l'éloignement maximum pour le critère de correspondance
La distance de Jaro :
La distance de Jaro-Winkler avec
La méthode introduite par Winkler utilise un coefficient de préfixe p qui favorise les chaînes commençant par un préfixe de longueur
où :