DICTIONNAIRE DE RIMES

rambc Messages postés 224 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 29 mars 2009 - 12 déc. 2007 à 16:07
masternico Messages postés 487 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 1 septembre 2011 - 14 déc. 2007 à 17:35
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/45017-dictionnaire-de-rimes

masternico Messages postés 487 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 1 septembre 2011
14 déc. 2007 à 17:35
superbe, c'est beaucoup mieux comme ça...
rambc Messages postés 224 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 29 mars 2009
14 déc. 2007 à 11:47
Merci pour cette info...
opossum_farceur Messages postés 147 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 14 novembre 2009
14 déc. 2007 à 02:43
@RAMBC,

"on pourrait associer à la liste des résultats une autre avec les motrs sans accent. Non ?"

Une solution à ce problème consiste à utiliser l'argument "sort_flags" de la fonction "sort".
Dans la fonction "send" de la classe, le code :

sort($arr);

devient :

setlocale(LC_ALL,french);
sort($arr,SORT_LOCALE_STRING);

à la suite de quoi le "é" est considéré comme un "e" au niveau du tri.

A++
rambc Messages postés 224 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 29 mars 2009
13 déc. 2007 à 23:32
Pour comparer les mots sans les accents, il suffit de faire une comparaison de ces mots sans leurs accents. Quelle lapalicade ! Plus précisément, pour comparer écart et essai, on compare ecart et essai. Concraitement, on pourrait associer à la liste des résultats une autre avec les motrs sans accent. Non ?
opossum_farceur Messages postés 147 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 14 novembre 2009
13 déc. 2007 à 22:10
@MASTERNICO,
"je n'ai pas put installer le code car je suis bridé en php4"
Et là PHP5 est nécessaire à cause de l'extension "SimpleXML".

"j'aurais préféré avoir un tri alphabétique des résultats"
Les résultats sont triés par ordre alphabétique; cependant tu as dû il me semble être abusé par les mots commençant par des caractères accentués, qui sont rangés après les mots commençant par "z", c'est ainsi que fonctionne la fonction "sort()".
Cependant améliorer le tri de manière à positionner les caractères accentués juste après ceux qui ne le sont pas (ou, autre approche, faire comme s'ils ne l'étaient pas!), c'est une idée à creuser.

"Je pense qu'un peut plus de commentaires aurait été bénéfique en compréhention."
C'est vrai, mais j'ai eu peur de devoir écrire un roman à chaque ligne.

"l'utilisation de la variable $_POST['expr'] directement dans la classe"
T'as encore raison, d'ailleurs il y a peu de temps, c'était comme tu le préconises, et je testais l'existence de la variable en dehors de la classe avec un "die" en cas d'échec; et puis j'ai jugé plus rationnel de centraliser toutes les erreurs dans le bloc try-catch.

@CAVIAR,
Merci pour la note.

@MALALAM,
"c'est l'algo phonétique qui est le plus intéressant"
Tout à fait, d'ailleurs, si tu veux creuser un peu le sujet, l'étude du script dont j'ai donné l'adresse me semble tout à fait indiquée; celui-ci, malgré ses quelques centaines de lignes de code est fonctionnel et permet, s'il est mis en relation avec le synthétiseur vocal MBROLA, d'exécuter la prononciation de n'importe qu'elle phrase en français.

A++
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
13 déc. 2007 à 20:30
Hello,

c'est un code très intéressant. Bon, pour être honnête, c'est l'algo phonétique qui est le plus intéressant...mais j'aime bien l'idée du code! Pour avoir bossé sur la version francisée de soundex justement, et l'adaptation php de phonex, je suis très positif sur ce que tu nous présente :-) Sincèrement intéressant.
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
13 déc. 2007 à 17:35
tiens une note aussi pour ma part :)
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
13 déc. 2007 à 17:30
EXCELLENT !!!!
j'avais commencé un travails comme ça basé sur la version francisée de soundex mais ça ne marchais pas aussi bien :)
very good ! je bookmark ton site j'espère que tu vas le laisser en place :)
@+
merci
masternico Messages postés 487 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 1 septembre 2011
13 déc. 2007 à 13:47
Salut, je n'ai pas put installer le code car je suis bridé en php4 (sniff). Par contre j'ai été voir l'example donné qui marche plutôt bien même si j'aurais préféré avoir un tri alphabétique des résultats (c'est plus facile de trouver ce que l'on chercher).

Sinon, dans l'ensemble, c'est propre, mais un peut trop "javélisé". Je pense qu'un peut plus de commentaires aurait été bénéfique en compréhention.

Enfin, dernière petite chose qui m'a chagrinée, c'est l'utilisation de la variable $_POST['expr'] directement dans la classe. Ce qui fait que je suis obligé de modifier la déclaration si je veux utiliser autre chose, genre $_GET['trucmuche'] (rien ne m'oblige a utiliser le POST):
/////////////
try {
$rime=new rime($_POST['expr']);
}
catch(Exception $e) {
echo $e;
}
/////////////
aurait été plus propre à mon sens

Voila

Bonne continuation
opossum_farceur Messages postés 147 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 14 novembre 2009
13 déc. 2007 à 01:24
@GUILL76,

Merci pour la note.
Optimiser les rimes les plus fréquentes aurait pû être utile lors de la phonétisation de tout le dictionnaire, opération qui n'a été exécutée qu'une fois et qui a dû prendre entre 10 et 20 minutes. Dans le cas du script que j'ai posté et où le dictionnaire est déjà phonétisé, seule l'expression tapée dans la zone de saisie subi ce traitement et là franchement, que les rimes soient fréquentes ou pas ne change pas grand chose. A ce niveau, j'ai plutôt axé l'optimisation sur la recherche dans le dico : parcours dichotomique sur un ensemble trié dont les éléments sont écrits à l'envers (et oui, ce qui nous intéresse, c'est la fin des mots!), et aussi fractionnement de l'ensemble des données sur 4 fichiers.
Pour ce qui est des regexp apparaissant dans "rules.xml", celles-ci peuvent rendre les règles difficiles à comprendre, mais il faut savoir que ces dernières ont aussi dû subir une phase d'optimisation et qu'elles se présentaient à l'origine sous un aspect plus engageant (voir le fichier "base" dans "perl_tts.zip").

A++
rambc Messages postés 224 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 29 mars 2009
13 déc. 2007 à 00:35
Merci pour toutes les infos.
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
12 déc. 2007 à 20:07
Salut,
j'étais intrigué alors j'ai testé et regardé ton code et ses ressources.
ça a l'air assez optimisé, même si certaine requêtes peuvent être longues à l'exécution notament pour les rimes les plus fréquentes.
En tout cas c'est une technique sympa certes fastidieuse pour concocter le dico et le fichier de regles: Mérite à celui qui a fait les fichiers textes avec tous ces mots phonétisés et transcrit les regexp s'y rapportant.
Bon j'ai pas l'habitude de noter les sources mais pour l'algo : 9.
opossum_farceur Messages postés 147 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 14 novembre 2009
12 déc. 2007 à 18:46
@RAMBC,

Je n'ai pas utilisé SOUNDEX mais une partie de la technique, appelée TEXT TO SPEACH (TTS pour les initiés) et dont le propos est de faire prononcer, grâce un synthétiseur vocal (comme le logiciel MBROLA), des textes contenus dans de banals fichiers au format "txt"; ces textes, pour être vraiment prononçables, doivent cependant être préalablement phonétisés, et c'est là qu'intervient un script comme "text2phone" (le script écrit en Perl dont j'ai indiqué le lien). Le synthétiseur vocal génère en sortie un fichier audio au format "wav" (ou autre, selon votre OS) avec lequel on attaque votre logiciel de lecture audio favori.
Cette technique est bien connue des personnes mal-voyantes, et Microsoft propose depuis WXP la possibilité de la mettre en oeuvre à moindre frais, ceci dit, en fouillant un peu sur le net, on trouve également des systèmes en open-source.
Mon seul mérite consiste à avoir étudié ce "text2phone" et en avoir isolé juste la partie qui m'intéressait pour phonétiser mon dictionnaire. La base de connaissance, à l'origine sous forme de fichier texte, est maintenant au format xml, le nom des tags reprend celui des clés du tableau associatif d'origine (voir le fichier "rules.xml"); la base de connaissances est une collection de règles basées sur des expressions régulières, chaque règle associant une phonème avec ce qui peut la précèder et lui succéder dans un mot.

A++
rambc Messages postés 224 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 29 mars 2009
12 déc. 2007 à 16:07
Peux-tu en dire un tout petit peu plus sur la façon dont tu as codé cela ? As-tu utilisé SOUNDEX ?

Merci.
Rejoignez-nous