- Soundex
-
Soundex est un algorithme phonétique d'indexation de noms par leur prononciation en anglais britannique. L'objectif basique est que les noms ayant la même prononciation soient codés avec la même chaîne de manière à pouvoir trouver une correspondance entre eux malgré des différences mineures d'écriture. Soundex est le plus largement connu des algorithmes phonétiques et est souvent utilisé incorrectement comme synonyme de « algorithme phonétique ».
Soundex a été conçu par Robert Russell et Margaret Odell et breveté en 1918 et 1922 (US patent 1,261,167 et 1,435,663). Une variante nommée American Soundex a été utilisée dans les années 1930 pour une analyse rétrospective des recensements américains entre 1890 et 1920.
Le code Soundex s'est fait connaître dans les années 1960 lorsqu'il est devenu le sujet de nombreux articles dans les communiqués et le journal de l'Association for Computing Machinery, et tout spécialement décrit par Donald Knuth dans son magnum opus, The Art of Computer Programming.
Le code Soundex consiste pour chaque nom en une association d'une lettre suivie de trois chiffres : la lettre correspond à la 1re du nom, et les chiffres encodent les consonnes restantes. Les consonnes à prononciation similaire ont le même code, donc, par exemple, les lettres B, F, P et V sont toutes codées « 1 ». Les voyelles peuvent influencer le code d'une consonne, mais ne sont jamais codées directement (sauf bien sur si c'est la première lettre du nom).
L'algorithme exact procède comme suit :
- Supprimer les éventuels 'espace' initiaux
- Mettre le mot en majuscule
- Garder la première lettre
- Conserver la première lettre de la chaîne
- Supprimer toutes les occurrences des lettres : a, e, h, i, o, u, w, y (à moins que ce ne soit la première lettre du nom)
- Attribuer une valeur numérique aux lettres restantes de la manière suivante :
- Version pour l'anglais :
- 1 = B, F, P, V
- 2 = C, G, J, K, Q, S, X, Z
- 3 = D, T
- 4 = L
- 5 = M, N
- 6 = R
- Version pour le français :
- 1 = B, P
- 2 = C, K, Q
- 3 = D, T
- 4 = L
- 5 = M, N
- 6 = R
- 7 = G, J
- 8 = X, Z, S
- 9 = F, V
- Version pour l'anglais :
- Si deux lettres (ou plus) avec le même nombre sont adjacentes dans le nom d'origine, ou s'il n'y a qu'un h ou un w entre elles, alors on ne retient que la première de ces lettres.
- Renvoyer les quatre premiers octets complétés par des zéros.
En effectuant cet algorithme, on obtient avec "Robert" et "Rupert" la même chaîne : "R163", tandis que "Rubin" donne "R150".
Avec un algorithme similaire nommé Reverse Soundex, c'est la dernière lettre du nom et non la première qui est conservée dans le code.
Afin de pallier les déficiences de l'algorithme Soundex, Lawrence Philips a développé l'algorithme Metaphone qui répond aux mêmes objectifs.
Le Soundex Daitch-Mokotoff a été développé par Gary Mokotoff et Randy Daitch parce qu'ils ont rencontré des difficultés en appliquant le Soundex Russell à des noms germains ou slaves. Cet algorithme est bien plus complexe que celui de Russell.
L'algorithme NYSIIS (New-York State Identification and Intelligence System) est une autre version améliorée de Soundex.
Application
L'algorithme soundex est très utilisé en informatique pour corriger les erreurs orthographiques et est disponible dans la plupart des SQL.
Par exemple, en mysql, c'est la fonction soundex(str) qui permet de générer un code soundex :SELECT SOUNDEX('Hello');
retourne : 'H400'
Liens externes
en anglais
- http://www.archives.gov/publications/general-info-leaflets/55.html
- Daitch-Mokotoff: http://www.avotaynu.com/soundex.html
- Daitch-Mokotoff: http://www.jewishgen.org/infofiles/soundex.html#DM
- Understanding Classic SoundEx Algorithms (with Source code for C, JavaScript, Perl and VB) http://www.creativyst.com/Doc/Articles/SoundEx1/SoundEx1.htm
en français
- L'algorithme du SOUNDEX. http://www.chez.com/algor/soundex/soundex.htm
- Une version PHP de l'algorithme SOUNDEX. http://blog.mymind.fr/post/2007/03/15/Soundex-Francais
- Une version évoluée du Soundex en PHP adapté au français http://www.roudoudou.com/php/phonetic.php
Wikimedia Foundation. 2010.