Soundex et Python...

Fermé
louloubyne - 26 févr. 2010 à 14:48
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 26 févr. 2010 à 18:16
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 =)

3 réponses

heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 131
26 févr. 2010 à 15:54
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() ?
0
Merci de ta réponse. Je ne dois pas coder l'algo, mais travailler sur laméthode qu'utilise Soundex. Pour les majuscules oui j'ai utilisé "upper()". pour le remplacements des accentués j'ai utilisé "re.sub(r'...', '', t)"et non "translate()".
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....
0
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 131
26 févr. 2010 à 17:27
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 ?
0
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 131
26 févr. 2010 à 18:16
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)
0