Soundex et Python...
louloubyne
-
heyquem Messages postés 759 Date d'inscription Statut Membre Dernière intervention -
heyquem Messages postés 759 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis débutante en Python et je travaille sur l'Algorithme de Soundex.
J'ai compris tout le processus de remplacement, mais l'appliquer en langage Python, moins évident!
Remplacer les caractères accentués par des non accentués c'est ok, mettre en majuscule c'est ok aussi, mais en ce qui concerne de remplacer les lettres par les chiffres je coince!
Avec la fonction "re.sub", je parviens à faire le remplacement, mais lettre par lettre, ce qui est trop long et fastidieux.
Je pense donc qu'une boucle de type "while" serait plus adaptée, mais je ne parviens pas à définir la bonne formule pour l'appliquer à toutes les lettres. Peut-être n'est-ce pas la bonne solution..
Si vous pouviez m'aider à avancer ça serait avec plaisir.
Bonne journée =)
Je suis débutante en Python et je travaille sur l'Algorithme de Soundex.
J'ai compris tout le processus de remplacement, mais l'appliquer en langage Python, moins évident!
Remplacer les caractères accentués par des non accentués c'est ok, mettre en majuscule c'est ok aussi, mais en ce qui concerne de remplacer les lettres par les chiffres je coince!
Avec la fonction "re.sub", je parviens à faire le remplacement, mais lettre par lettre, ce qui est trop long et fastidieux.
Je pense donc qu'une boucle de type "while" serait plus adaptée, mais je ne parviens pas à définir la bonne formule pour l'appliquer à toutes les lettres. Peut-être n'est-ce pas la bonne solution..
Si vous pouviez m'aider à avancer ça serait avec plaisir.
Bonne journée =)
3 réponses
Bonjour,
Bienvenue dans le pays de Python !
J’aimerais t’aider mais je n’ai jamais rien fait avec Soundex et surtout je n’ai pas tout a fait compris ce que tu souhaites faire:
est-ce que tu veux coder toi-même en Python l’Algorithme du Soundex, bien qu’il doive déjà exister dans des tas de langages de programmation ?
tu fais un algo Soundex pour mots français ?
y a-t-il des modules spécifiques déjà tout prèts à utiliser pour ces travail ? quels modules utilises tu ?
comment as tu fait pour le remplacenment des accentuées par des non-accentuées ? utilises tu translate() ?
pour les majuscules, as tu utilisé upper() ?
Bienvenue dans le pays de Python !
J’aimerais t’aider mais je n’ai jamais rien fait avec Soundex et surtout je n’ai pas tout a fait compris ce que tu souhaites faire:
est-ce que tu veux coder toi-même en Python l’Algorithme du Soundex, bien qu’il doive déjà exister dans des tas de langages de programmation ?
tu fais un algo Soundex pour mots français ?
y a-t-il des modules spécifiques déjà tout prèts à utiliser pour ces travail ? quels modules utilises tu ?
comment as tu fait pour le remplacenment des accentuées par des non-accentuées ? utilises tu translate() ?
pour les majuscules, as tu utilisé upper() ?
Avoir des cas concrets sous les yeux faciliterait la compréhension.
Comment le programme saura-t-il que ’tel’ numéro doit remplacer ’telle’ lettre ? Où se trouve cette information quand le programme démarre ?
Comment le programme saura-t-il que ’tel’ numéro doit remplacer ’telle’ lettre ? Où se trouve cette information quand le programme démarre ?
Que penses tu du code suivant et de son résultat ?
dh = ("Adénoïde aï (singe) aiguë aïeul aïeux aïoli alcaloïde ambiguë ambiguïté " " androïde anéroïde anthérozoïde anthropoïde arachnoïde archaïque archaïsme " " astéroïde j'arguë baïonnette balalaïka barzoï bizarroïde (fam) bisaiguë " " bonsaï caïd caïeu caïman Caïn camaïeu canoë capharnaüm caraïbe Celluloïd " " choroïde ciguë cocaïne cocaïnomane coïncidence coïncident coïncider coïnculpé " " coït colloïdal colloïde contigüe contiguïté corticoïde dadaïsme dalaï-lama " " deltaïque deltoïque discoïde égoïne égoïste égoïstement ellipsoïdal ellipsoïde " " exiguë exiguïté faïence faïencerie faïencier/ère glaïeul goï haïr haïssable " " hautboïste hébraïque hélicoïdal héroïne héroï-comique héroïne héroïsme " " humanoïde hyoïde hyoïdien/enne inouï introït Israël judaïque kafkaïen/enne " " laïc laïcisation laïciser laïcité laïque laïus maïs maoïsme maoïste " " mastoïdien mastoïdite métalloïde moïse mongoloïde monoïque mosaïque naïade " " naïf/ve naïvement naïveté oïdium ouï-dire ouïe ouïr ovoïde pagaïe (fam) " " païen/enne Noël paranoïa paranoïaque perestroïka phalloïde prosaïque " " prosaïquement prosaïsme raïs Rhodoïd rhomboïde röntgen ou roentgen sinusoïdal " " sinusoïde siphoïde skaï spermatozoïde sphénoïde sphéroïde spiroïdal stoïcien/ne " " stoïcisme stoïque stoïquement tabloïd taïaut ou tayaut taïga thyroïde " " thyroïdien/ne trapézoïdal trisaïeul/e troïka typhoïde voltaïque Zaïre ambiguïté " " contiguïté exiguïté Aléa allégresse amitié café céder céleri cicérone crémerie " " crépi crépu défaite désir dessécher dévot égout empiétement enchanté épaule " " événement extrémité fébrile féerie futé gérer goéland goémon guépard " " irrécouvrable irréligieux irrémédiable liséré médecin mélange mémento musée " " muséum pédiatre tétine pécher (faillir) pléiade poésie prévenir réflexion " " refréner réglementer réglementation répréhensible répit sécheresse sécréter " " séquoia spécimen ténacité apôtres hôtes Belvédère célèbre décès dégrèvement " " déjà dérèglement élève éphèbe éphémère épithète géomètre légère légèrement " " légèreté mégère mélèze métèque phénomène prélèvement proxénète sévère sévèrement " " ténèbres théière théorème" ) from time import clock import re iterations = 10000 from string import maketrans table = maketrans('àâéèêëïîôœùûüÿ','aaeeeeiioouuui') print dh.translate(table)[0:808] print te = clock() for i in xrange(iterations): x = dh.translate(table) tf = clock() print tf-te,' avec translate' print dico = dict(zip('àâéèêëïîôœùûüÿ','aaeeeeiioouuui')) print dico def f(u): return dico[u.group()] pat = re.compile('[àâéèêëïîôœùûüÿ]') te = clock() for i in xrange(iterations): x = pat.sub(f,dh) tf = clock() print tf-te,' avec re.sub' print print dh.translate(table)==pat.sub(f,dh)
Oui il s'agit de mots français.
Maintenat, je dois "simplement" =) remplacer telle lettre par tel numéro, mais je n'y parviens pas.
Pas besoin d'un module spécifique à Soundex, je dois faire ça le plus simplement possible, en remplaçant un caractère par un autre. Mais simplement est vite dit....