PHONEX

Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
- - Dernière réponse : 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

Afficher la suite 
J_G
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
6 -
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+
malalam
Messages postés
10844
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
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
6 -
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
10844
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
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 :-)
malalam
Messages postés
10844
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
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.