[TCL] [Librairie] HaploPhone (ex Menz Agitat's Soundex) (version actuelle : 3.0)
#1
 
Description

HaploPhone est un algorithme phonétique inspiré du fonctionnement de Soundex ( http://fr.wikipedia.org/wiki/Soundex ).

Il est cependant bien plus précis que l'algorithme d'origine car il a été spécifiquement conçu pour tenir compte des règles complexes de la prononciation française et retourne une valeur phonétique simplifiée plutôt qu'une valeur alphanumérique de longueur fixe.
Il existe 13 phonèmes simplifiés différents : A B E I J K L M R S T U et V.
Reportez-vous à la table de correspondance basique des phonèmes plus bas pour savoir à quoi ils correspondent.

Il est possible d'appliquer un certain nombre de filtres et de règles, comme par exemple de supprimer toutes les voyelles, de ne les supprimer qu'en fin de mot, ou encore de générer une chaîne de caractères de longueur fixe.
De plus, HaploPhone étant capable de traiter des séquences de mots en une seule fois, vous n'êtes pas obligé de les lui soumettre un par un.

Ce programme a été conçu à force d'expérimentations et d'essais / erreurs, et ne prétend pas avoir une approche scientifique. Néanmoins, de nombreux textes et mots lui ont été soumis afin d'en parfaire le fonctionnement.
Il se base sur un nombre conséquent de règles et d'exceptions et non pas sur le contexte, ce qui ne lui permettra pas de faire la différence entre "couvent" du verbe couver et l'édifice religieux homonyme.
Certaines concessions ont donc dû être faites et en cas de conflit, la prononciation la plus courante sera retenue.

L'intérêt de ce genre d'algorithme est par exemple de comparer 2 phrases orthographiées différemment et de pouvoir déterminer si elles sont équivalentes ou non d'un point de vue phonétique.
Ce principe est utilisé par les correcteurs orthographiques, les moteurs de recherche qui s'en servent pour faire des suggestions, et présente un intérêt en ce qui concerne l'intelligence artificielle.

Pour son fonctionnement interne, ce script utilise certains caractères en guise de marqueurs. Vous devrez donc veiller à ce qu'ils ne soient jamais utilisés dans les chaînes de caractères que vous lui soumettrez.
Ces cinq caractères réservés sont les suivants : ‹ › “ ” …

Ce script pourvoit l'eggdrop du package HaploPhone 3.0


Syntaxe

::HaploPhone::process [-makespaces] [-keepchars <caractères à préserver>] [-filters nnn] [-length n] <chaîne de caractères>

-makespaces provoque le remplacement de tous les caractères qui ne sont pas des lettres par des espaces.

-keepchars force le HaploPhone à préserver les caractères que vous spécifiez.
Par défaut, tous les caractères qui ne sont pas des lettres sont filtrés.
Les caractères que vous excluez doivent être proprement échappés si nécessaire, notamment les caractères suivants : } { ] [ " $ \

-filters permet de définir les modes de filtrage.
nnn est une succession de 3 chiffres ayant chacun une signification et pouvant prendre plusieurs valeurs.
  1er chiffre : mode de traitement des voyelles (vaut 1, 2 ou 3).
      1- Traitement standard des voyelles.
      2- Toutes les voyelles sont remplacées par le caractère générique "A", à l'exception des E en fin de mot.
      3- Toutes les voyelles sont supprimées. Si un mot n'est constitué que de voyelles, retourne "A".
  2ème chiffre : mode de traitement des voyelles en fin de mot (vaut 1 ou 2).
      1- Les "E" sont supprimés en fin de mot, sauf s'il ne reste qu'une lettre.
      2- Toutes les voyelles sont supprimées en fin de mot, sauf s'il ne reste qu'une lettre.
  3ème chiffre : mode de gestion des successions de voyelles (vaut 1 ou 2).
      1- Gestion standard des successions de voyelles.
      2- Si plusieurs voyelles se suivent, on ne conserve que la 1ère.
En l'absence de l'argument -filters, les valeurs par défaut sont 111.

-length permet de définir une longueur fixe pour la valeur phonétique retournée par chaque mot.
Si length est spécifié et qu'un mot est trop long, il sera tronqué pour atteindre la bonne longueur.
Si length est spécifié et qu'un mot est trop court, il sera complété par des 0 pour atteindre la bonne longueur.
Si length n'est pas spécifié ou vaut 0, la valeur aura une longueur variable dépendant de la longueur du mot.

L'ordre des arguments n'est pas important.

Dans le but d'accroître la rapidité d'exécution, la validité de la syntaxe de la commande n'est pas vérifiée. Veillez donc à la respecter scrupuleusement, sans quoi le script ne fonctionnera pas comme prévu et vous n'en serez pas explicitement averti.


Exemples

Penons un exemple :
Code :
::HaploPhone::process "ceci est un test qui fonctionne !"
-> SESIEATESTKIVAKSIAM

Péservation du découpage :
Code :
::HaploPhone::process -makespaces "ceci est un test qui fonctionne !"
-> SESI E A TEST KI VAKSIAM

En écrivant n'importe comment, on arrive au même résultat :
Code :
::HaploPhone::process -makespaces "seussies aie hein teiste ki fonksione"
-> SESI E A TEST KI VAKSIAM

On peut conserver les caractères qu'on veut :
Code :
::HaploPhone::process -makespaces -keepchars ",!" "ceci est un test, qui fonctionne !"
-> SESI E A TEST, KI VAKSIAM !

Essayons un autre exemple pour voir comment les filtres fonctionnent.
En l'absence du paramètres -filters, c'est comme si on avait -filters 111, ce qui signifie qu'on supprime les E en fin de mot :
Code :
::HaploPhone::process -makespaces "oui je crache les noyaux moins loin que vous"
-> UI J KRAJ L MUAIA MUA LUA K VU

Toutes les voyelles sont remplacées par le caractère générique "A", à l'exception des E en fin de mot :
Code :
::HaploPhone::process -makespaces -filters 211 "oui je crache les noyaux moins loin que vous"
-> A J KRAJ L MA MA LA K VA

Toutes les voyelles sont supprimées. Si un mot n'est constitué que de voyelles, retourne "A" :
Code :
::HaploPhone::process -makespaces -filters 311 "oui je crache les noyaux moins loin que vous"
-> A J KRJ L M M L K V

Toutes les voyelles sont supprimées en fin de mot, sauf s'il ne reste qu'une lettre :
Code :
::HaploPhone::process -makespaces -filters 121 "oui je crache les noyaux moins loin que vous"
-> U J KRAJ L M M L K V

Si plusieurs voyelles se suivent, on ne conserve que la 1ère :
Code :
::HaploPhone::process -makespaces -filters 112 "oui je crache les noyaux moins loin que vous"
-> U J KRAJ L MU MU LU K VU

Longueur fixée à 4 :
Code :
::HaploPhone::process -makespaces -length 4 "oui je crache les noyaux moins loin que vous"
-> UI00 J000 KRAJ L000 MUAI MUA0 LUA0 K000 VU00


Table de correspondance basique des phonèmes

A = A / O / AN / IN / ON
B = B / P
E = E / AI / OE
I = I
J = J / CH / TCH
K = K / GU
L = L
M = M / N
R = R
S = S / X / Z (dans certains cas seulement pour X, dans les autres cas il équivaut à KS)
T = T / D
U = U / OU
V = V / F


Changelog :

Citation :3.0
  • Le terme "soundex" désignant un algorithme spécifique qui n'a plus rien à voir avec ce que fait ce script, ce dernier change de nom pour HaploPhone.
  • Modification radicale du fonctionnement du script en vue de le rendre plus précis et plus fiable. La plupart des exceptions et subtilités de prononciation de la langue française sont maintenant prises en compte.
  • Le script ne retourne désormais plus une valeur numérique mais une valeur phonétique simplifiée.
  • Les chiffres sont désormais filtrés par défaut, au même titre que les autres caractères non-alphabétiques.
  • Ajout des nouveaux paramètres -makespaces -filters et -length.
  • Ajout : une aide à la syntaxe est donnée dans l'erreur retournée par la commande ::HaploPhone::process si elle est utilisée sans arguments.
  • Le paramètre -keepspaces a été abandonné puisque le même effet peut être obtenu avec -keepchars ou -makespaces


Téléchargement : HaploPhone  v3.0

lien vers l'ancienne version : Menz Agitat's Soundex

Vous pouvez trouver une liste de mes autres releases ici


Laissez vos commentaires / suggestions / rapports de bugs.
 
Répondre Avertir


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté