Soundex
# Soundex

Soundex est un algorithme phonétique d'indexation de noms par leur prononciation en anglais britannique. L'objectif de base 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 ».

## Historique

Soundex a été conçu par Robert C. Russell et Margaret King-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.

## Description

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 sûr si c'est la première lettre du nom).

L'algorithme exact procède comme suit :

* Supprimer les éventuelles 'espaces' initiales
* Mettre le mot en majuscule
* 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
* 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".

## Variantes et améliorations

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é (en 1990) 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 d'Europe Centrale et Orientale issus des sphères linguistiques germaniques et slaves. Cet algorithme génère un code de six digits ; ce soundex est plus précis que celui de Russell.

L'algorithme NYSIIS (New-York state identification and intelligence system) est une autre version améliorée de Soundex.

Afin d'automatiser la recherche d'homophonies approximatives pour l'allemand, un spécialiste de la lutte contre la contrefaçon, Hans-Joachim Postel, a développé l’algorithme phonétique de Cologne (ou méthode phonétique de Cologne). L'idée est similaire à celle de Soundex, mais ce système est mieux adapté aux spécificités de l'orthographe allemande, notamment pour le système des chuintantes et l'accentuation initiale des mots.

## Application

L'algorithme soundex est très utilisé en informatique pour corriger les erreurs orthographiques et est disponible dans la plupart des SGBD. Par exemple, en MySQL, c'est la fonction soundex(str) qui permet de générer un code soundex :

retourne : 'H400'

