FONCTION QUI GÉNÈRE UN CODE GRÂCE À L'ORTOGRAPHE ET LA PRONONCIATION D'UN MOT

cs_jeca Messages postés 341 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 14 juillet 2011 - 18 juin 2009 à 13:10
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015 - 22 juin 2009 à 23: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/50190-fonction-qui-genere-un-code-grace-a-l-ortographe-et-la-prononciation-d-un-mot

kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
22 juin 2009 à 23:35
Slt Foofymany... tout à fait d'accord mon commentaire sur le strtr() concerne le str_replace... si tu travaille sur du muli-byte il va de soit qu'il faut passer par l'extension mb_string... .. .

Par contre je persiste pour le strlen() dans la condition de tes for... tant que la chaine testée n'est pas remaniée dans la boucle même, ce qui est le cas ici, il ne faut surtout pas mettre ton strlen() dans la partie conditionnelle de ta boucle for... imagine tu fais 10000 itération ça te fait 9999 strlen() pour rien... c'est un détail mais qui a son importance... .. .

Au passage $st{$i} est déprécié et n'existera bientôt plus => $st[$i]

Pour le reste rien a redire ne l'ayant pas testé... .. .

@ tchaOo°
cs_exar Messages postés 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 avril 2012 1
22 juin 2009 à 20:42
ORIGINALCOMPO: c'est justement à cause du titre que j'avais écris le message ci-dessus... Il y est question d'"ortographe"...
Bien d'avoir corrigé ta faute, il y en a souvent de trop, ici, hélas. Heureusement, parfois, la qualité du code compense la pauvreté de l'orthographe utilisée.
Enfin, dans ce cas-ci, je suppose qu'il s'agit d'une faute de frappe non relue, donc pas vue. Dans le résumé, il n'y en a pas de trop.
FOOFYMANY: je n'ai pas testé, mais comme tu évoques le PL/SQL, je te conseille de te documenter sur le regexp_like. Très puissant.
Cela n'enlève rien à l'utilité de ton code, pour quelqu'un qui n'a pas besoin de quelque chose d'aussi poussé que cela.
Bonne continuation !
originalcompo Messages postés 65 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 9 octobre 2007 1
22 juin 2009 à 14:35
remplacéES (pardon pour l'orthographe)
originalcompo Messages postés 65 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 9 octobre 2007 1
22 juin 2009 à 14:34
Juste une remarque: les 36 premières lignes du "switch($ch){case '0':$mcar.='00';break; ..."
peuvent être remplacé par:

if (($ch>='0') && ($ch<='9'))
$mcar .= '0'.$ch;
elseif (($ch>='a') && ($ch<='z'))
$mcar .= ord($ch)-87;

Cordialement
foofymany Messages postés 2 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 22 juin 2009
22 juin 2009 à 11:20
Bien sur que ça fonctionne très bien. Même mieux que soundex seul. Car cette fonction à tendance à ne prendre que les consonnes. La vous avez un mix des 2 qui rend le truc assez complet et donne des résultats très cohérents.
cs_exar Messages postés 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 avril 2012 1
19 juin 2009 à 06:32
Grâce à l'ortographe ??? Est sa fonctione qu'on veut n'a bleu mens ?
foofymany Messages postés 2 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 22 juin 2009
18 juin 2009 à 14:33
strtr() seul ne prend pas en compte l'encodage utf-8 càd le multi-octet. C'est pour cela que j'utilise mb_substr() puis le switch case. Je ne suis pas fou, j'ai d'abord eu l'erreur. Maintenant grâce à ça les caractère accentuée ne pas à la trappe. Après si vous n'êtes pas sur de l'utf-8 strtr() suffit!
cs_jeca Messages postés 341 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 14 juillet 2011 14
18 juin 2009 à 14:20
"strtr()" est effectivement beaucoup plus rapide. Je ne l'avais jamais utilisée. Le code ci-dessus passe à 4 secondes.
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
18 juin 2009 à 14:09
La chaine remplacée étant aussi longue que la chaine de remplacement autant utiliser strtr()

------

for($i=0;$i<strlen($str);$i++){

pas bon ça... tu perd du temps et des ressources serveur...

for($i=0,$len=strlen($str);$i<$len;$i++){

------

tu as un strlen redondant en fin de code... strlen($st2)

@ tchaOo°

@ tchaOo°
cs_jeca Messages postés 341 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 14 juillet 2011 14
18 juin 2009 à 13:10
Bonjour,

Pourquoi des "switch... case..." ?
Ceci est beaucoup plus rapide, et moins de code :

function stringRemoveAccent($string)
{
$remplacer = array('ä','à','â','é','è','ê','ë','î','ï','ô','œ','ö','ü','ù','û','ÿ','Ä','À','Â','ñ','É','È','Ê','Ë','Î','Ï','Ô','Œ','Ö','Ü','Ù','Û','ç','Ç','Ÿ','æ','Æ');
$par = array('a','a','a','e','e','e','e','i','i','o','o','o','u','u','u','y','A','A','A','n','E','E','E','E','I','I','O','O','O','U','U','U','c','C','Y','a','a');

return str_replace($remplacer, $par, $string);
}

Sur 10 000 itérations pour une cheîne de 10 caractères, ta fonction prend 28 à 29 secondes, le code ci-dessus 11 à 12 secondes.

Ce doit être applicable aux autres fonctions.
Rejoignez-nous