PHONEX

J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 - 20 mars 2006 à 12:44
leica69 Messages postés 14 Date d'inscription vendredi 12 février 2010 Statut Membre Dernière intervention 20 février 2013 - 4 mai 2010 à 10:30
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/36561-phonex

leica69 Messages postés 14 Date d'inscription vendredi 12 février 2010 Statut Membre Dernière intervention 20 février 2013
4 mai 2010 à 10:30
Bonjour,
je viens de faire un petit test. Si je recherche "manger", il ne trouve pas "mangé". Pour moi, ce n'est pas concluant.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
27 mai 2008 à 20:11
J'acquiesce...c'est d'ailleurs ce que je fais dans le fichier index.php d'exemple.
De tte manière, cet algo peut être amélioré, comme laplupart des algo.
piranhaworld Messages postés 10 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 9 juillet 2007
27 mai 2008 à 11:55
pour augmenter la pr?cision je vous conseil de r?cup?r? par exemple les 10 phonex les plus proches..
et d'affiner la correction avec un rapide algo de levenstein (natif ? php)

au final une seul correction.. la plus probable.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
20 mars 2006 à 15:06
Ah ben en effet, le mien était à 12.
J'ai mis 16 pour avoir la même précision que l'exemple de l'algo.
Ca ne change en tous cas rien aux résultats finaux obtenus (pas plus, pas moins de mots trouvés). Ce dont je me doutais un peu lol.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
20 mars 2006 à 15:03
Pour la pertinence, j'ai utilise levenshtein pour ma part :
J'ai une liste de noms, et un nom à comparer à cette liste.
Je balance phonex (ou soundex2) pour générer les codes correspondants; je récupère donc une nouvelle liste avec les noms proches de celui recherché. Puis j'applique levenshtein aux noms par rapport au nom recherché (pas leur code hein) : et je classe ensuite ma liste de la distance levenshtein la plus petite à la distance levenshtein la plus grande.
Ca marche pluttôt très bien :-)

Tu veux dire, donc, que 21 mots pas loin d'être identiques, mais pas tout à fait, selon phonex (donc avec 2 codes phonex différents) auront 2 codes phonex proches ? + ou - grand, quoi ?

Je vais jeter un oeil à php.ini alors, moi je n'ai pas 14 chiffres de précision... :-( J'ai essayé avec bcmath, mais sans succès...(je n'ai pas trop cherché non plus en fait).

Mertci en tous cas, vais jeter un oeil :-)
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
20 mars 2006 à 14:34
Yo !

Je n'ai pas utilisé soundex2... Je vais allé faire un petit tour sur ton code.

Le codage en base 22 permet de "comparer" les mots avec des opérateurs numériques.
Là est la grosse différence avec soudex.

Soundex : ces deux mots ont la même prononciation
phonex : ces deux mots ont une prononciation identique "au millième prés"

Ainsi, tu peux rechercher les mots "pas trop loin". Mais du coup, il y'a pondération :(


PHP peux utiliser des flottant très précis... La configuration par défaut est à 14 chiffres de précision mais y'a une case qui trainent dans le php.ini (? ou le httpd.conf ?) qui permet de changer cette valeur.


Voilou...
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
20 mars 2006 à 13:19
Hello J_G,

à l'usage, je me suis rendu compte qu'effectivement, phonex était loin de mes attentes.
Au final, je lui préfère soundex2 (que j'ai traduit aussi déviemment, lol, juste avant ce code-ci).
Phonex a des réactions très bizarres de toutes façons. Un peu trop à mon goût. Certes, par momentk il est d'une efficacité impressionnante...mais il est trop incertain.
Soundex2, lui au moins, comporte moins de surprises, même s'il sort plus de mots.
Je l'ai testé (et implémenté d'ailleurs) sur mon code de recherche des villes et codes postaux français...bah, c'est vraiment curieux. Phonex, si on tape 'pari', ne trouve pas 'paris'...lol.

En dehors de ça, je me pose des questions sur la nécessité de coder en base 22...je me demande si on ne peut pas en rester à l'avant dernière étape de l'algo, à savoir conserver un code similaire à ceux de soundex et soundex2 : un code alphanumérique (soundex et soundex2 sont uniquement alpha...). Je pense que c'était simplement pour limiter les ressources lors d'ujn stockage en bdd. Mais je n'en suis pas encore très sûr. Bref je verrai, parce que ce codage en base22 me pose un problème : php n'a pas la puissance de calcul d'un langage 'non web', et il sort nettement moins de chiffres (4 décimales manquent après la virgule par rapport à un calcul effectué en Delphi, par exemple).

Bref...merci, en tous cas, pour le commentaire et la note :-)
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
20 mars 2006 à 12:44
Salut malalam...

Je me souvient avoir aussi essayé de traduire l'algo phone présenté sur developpez.net en PHP.
Bon je n'avais pas fait un code aussi joli que celui présenté ici. Loin de là même !!!

Mais PHONEX a - à mon gout - un très gros défaut : il pondère les sons selon leur position dans le mot. C'est à dire que la premier sylabe compte beaucoup plus que la deuxième. Et ainsi de suite...

Donc :
"grossissement" est plus proche de "grosse" que "gosse" de "grosse" !?!


Donc, j'ai laissé tombé...


Mais par contre, ton code est très joli !!! Bon, j'arrive pas à noté... Je mettrais le 10 plus tard

A+
Rejoignez-nous