Phonetic - Un autre soundex français en PHP (algorithme phonétique)

[Cliquez ici pour accéder au téléchargement en bas de page]

Pourquoi un nouveau Soundex? Il en existe déjà beaucoup de variantes non? Oui mais...

- Ils généralisent trop les sons, provocants beaucoup de faux positifs.
- Leur conversion phonétique est limitée alors que le français est complexe, résultant beaucoup de manqués.

L'objectif est donc clair. Je voulais en créant cet algo:

- Moins de faux positifs.
- Plus de réussite.
- Avoir une conversion qui reste "lisible" par un humain.
- Une certaine correction des erreurs orthographiques/dyslexiques les plus courantes.

De plus, pour l'utilisation que je compte en faire (un forum de moins de 100 personnes, un moteur de recherche) la performance brute doit être suffisante, sans plus. Ici, j'ai plus de 2000 mots/s sur un CPU à 3GHz (version non optimisée). Le code source à télécharger n'est pas optimisé.

Commençant mes développements il y a environ 6 mois avec 200 mots de référence, relire cette liste à chaque fois était ridiculement improductif et source d'erreurs. Je suis alors passé à la vitesse supérieure en me constituant un corpus de test de 7.000 mots (choisis en "feuilletant" un dictionnaire), ainsi qu'une page de test pour automatiser les vérifications et surtout la détection d'éventuelles régressions.

Pour terminer la validation de mon algorithme, j'ai téléchargé une version française du dictionnaire myspell pour l'ajouter à ma page de test. Cette ultime vérification me permit de corriger quelques défauts. Au final, cet algorithme a été testé et vérifié avec plus de 70.000 mots.

Attention, il n'est pas parfait! Mais j'ai enfin eu ce que je voulais, avec très très peu de concessions, à savoir un algorithme qui se comporte bien avec des mots français, connus ou inconnus. L'occasion pour moi de remercier quelques personnes:

- Frédéric Brouard pour son article sur les soundex.
http://sqlpro.developpez.com/cours/soundex/
- Florent Bruneau de qui j'ai repris quelques morceaux de code. Lui même inspiré par Frédéric Brouard.
http://blog.mymind.fr/post/2007/03/15/Soundex-Francais
- Christophe Pythoud et Vazkor (Jean-Claude M.) pour leur immense travail sur le dictionnaire myspell.
http://perso.latribu.com/rocky2/index.html (Le chien n'est pas méchant)

Une nouvelle version?

Je n'ai pas encore d'axe de travail. Soit je me sers de mon corpus de test pour compacter le code produit tout en gardant l'unicité de sens, soit j'utiliserai un dictionnaire. Mais on n'en est pas encore là.

La lettre X n'est pas gérée par l'algorithme. Ainsi, Bruxelles est différent de Brussels. Une future évolution peut-être?

Édouard BERGÉ - 16.12.2007 (m.à.j. de la page le 23.04.2008)





Brève description de l'algorithme

On formate d'abord le mot. Remplacement des accents et caractères spéciaux, puis passage en majuscules. Certaines occurences linguistiques sont traitées, puis on supprime toutes les répétitions de lettres.

Quelques cas particuliers sont traités. Ce sont des mots très courts qui supportent mal la simplification.

Viennent ensuite les pré-traitements. Ce sont principalement des terminaisons muettes et des combinaisons complexes de voyelles.

La grosse partie de la conversion peut commencer. Simplification des sons YEU, K, WEU, GUEU, SION, UN, AN, O ainsi que les muettes.

Une fois le gros de la troupe passé, on procède aux retouches (le détail est commenté dans le source).

On termine avec les...       ... terminaisons! Suppression des muettes, simplification de sons.

Certains mots courts auront beaucoup souffert de la simplification. C'est pourquoi en début et fin d'algorithme (avant les terminaisons), on aura gardé une copie du code obtenu. On tente alors une "récupération" du code. Si le code n'est pas trop court, on le renvoie. Si le code n'est composé que de consonnes, on suppose alors que c'est un sigle, qu'on renvoie aussi.


Il faut bien comprendre que cet algorithme a été développé de façon empirique, avec un corpus de test et une grosse part d'intuition, car il est aussi prévu pour fonctionner avec des mots mal orthographiés et/ou inconnus. D'où son comportement de conversion en phonétique. Et quoi qu'il en soit, ce programme n'est qu'une petite partie d'un moteur de recherche. Il y a beaucoup d'astuces à ajouter pour réaliser un moteur de recherche performant. Bon courage!

< Télécharger le code source + la base de test (600ko) >
< Télécharger le code source uniquement (6ko) >


Ce code source est distribué sous la licence Creative Commons Paternité - Pas d'Utilisation Commerciale 2.0 (sauf autorisation)




Tester le Phonetic:

 
Gendarme       -> JANDARM           Sceau       -> SO          Verre   -> VER
Phonétique     -> FONETIK           Seau        -> SO          Vert    -> VER
Athmosphérique -> ATMOSFERIK        Sot         -> SO          Vers    -> VER
Morceaux       -> MORSO             Saut        -> SO          Saule   -> SOL
Sciemment      -> SIAMAN            Soûl        -> SOUL        Sol     -> SOL
Comportement   -> KONPORTEMAN       Description -> DESKRIPSION