Soundex en français
Réponses:
11
Visites:
0
Up one level
Vous devez être un membre enregistré pour contribuer sur ce forum.
Inscrivez-vous maintenant
Soundex en français
Posté par
kikan
le
30/03/2005 17:32
Salut les pythoniennes et pythoniens,
Je cherche un module, ou un bout de source qui calcule un soundex en français. C'est à dire, un petit numéro correspondant au son que produit un mot. Le but est d'indexer un annuaire pour faire une recherche en trouvant quand même les orthographes avoisinantes, comme dans l'annuaire électronique de France Télécom. Par exemple : - GAUTHIER = 12345 - GOTTIAIT = 12345 Les deux codes sont égaux, donc on peut renvoyer le résultat pour les deux noms. J'ai trouvé des infos intéressantes ici : http://sqlpro.developpez.com/cours/soundex/ Il y a du Delphi, du Perl, du PLSQL, mais rien directement en python. Avant de me lancer dans l'adaptation, je cherche si ça existe déjà... Merci ! |
Re: Soundex en français
Posté par
tarek
le
30/03/2005 19:01
je n'ai rien trouvé en francais (phonex ou soundex) mais si tu implémentes tu peux partir sur cette lib :
http://www.pypackage.org/packages/python-levenshtein |
Re: Soundex en français
Posté par
fcarlier
le
31/03/2005 11:18
Le lien http://sqlpro.... est vraiment trés intéréssant !!! lu pour culture générale !!
Au vue de l'Article, la programmation de SOUNDEX2 parait vraiment simple !! Cela permet de mettre en oeuvre une premiere technique ! Levenstein est plus complique à mon avis ! dépend des besoins ! |
Re: Soundex en français
Posté par
fcarlier
le
05/04/2005 13:30
Salut,
Je savais bien que j'avais vu un soundex qq part !!!! Sur http://www.diveintopython.org En voici, le code (J'ai rajouté la suppression des espaces et tirés) :
Les trucs à rajouter seraient : -> La gestion des caracteres accentués !! éèà -> 'Â','Ä','À' : car := 'A'; |
Re: Soundex en français
Posté par
kikan
le
05/04/2005 17:34
Ahhh... Merci pour ce code ; à vrai dire, Dive Into Python est également mon livre de chevet
Je m'y suis mis aussi, et ça donne ça (pensez à réindenter là où il faut, le copier-coller sur le site a un peu chamboulé la mise en page) : code: #!/bin/python
# -*- coding: UTF-8 -*- import string import re def phonex(chaine): chaine = chaine.upper() print '0:'+chaine #1 remplacer les y par des i r = chaine.replace('Y','I') print '1:'+r #2 supprimer les h qui ne sont pas précédés de c ou de s ou de p r = re.sub(r'([^P|C|S])H', r'\1', r) print '2:'+r #3 remplacement du ph par f r = r.replace(r'PH', r'F') print '3:'+r #4 remplacer les groupes de lettres suivantes : r = re.sub(r'G(AI?)','K\1',r) print '4:'+r #5 remplacer les occurrences suivantes, si elles sont suivies par une lettre a, e, i, o, ou u : r = re.sub(r'I()','YN\1',r) print '5:'+r #6 remplacement de groupes de 3 lettres (sons 'o', 'oua', 'ein') : r = r.replace('EAU','O') r = r.replace('OUA','2') r = r.replace('EIN','4') r = r.replace('AIN','4') r = r.replace('EIM','4') r = r.replace('AIM','4') print '6:'+r #7 remplacement du son ‘é’ : r = r.replace('É','Y') r = r.replace('È','Y') r = r.replace('Ê','Y') r = r.replace('AI','Y') r = r.replace('EI','Y') r = r.replace('ER','YR') r = r.replace('ESS','YS') r = r.replace('ET','YT') #CP : différence entre la version Delphi et l'algo r = r.replace('EZ','YZ') print '7:'+r #8 remplacer les groupes de 2 lettres suivantes (son ‘an’ et ‘in’), sauf s’il sont suivi par une lettre a, e, i o, u ou un son 1 à 4 : r = re.sub(r'AN([^A|E|I|O|U|1|2|3|4])',r'1\1',r) r = re.sub(r'AM([^A|E|I|O|U|1|2|3|4])',r'1\1',r) r = re.sub(r'EN([^A|E|I|O|U|1|2|3|4])',r'1\1',r) r = re.sub(r'EM([^A|E|I|O|U|1|2|3|4])',r'1\1',r) r = re.sub(r'IN([^A|E|I|O|U|1|2|3|4])',r'4\1',r) print '8:'+r #9 remplacer les s par des z s’ils sont suivi et précédés des lettres a, e, i, o,u ou d’un son 1 à 4 r = re.sub(r'()S()',r'\1Z\2',r) #CP : ajout du Y à la liste print '9:'+r #10 remplacer les groupes de 2 lettres suivants : r = r.replace('OE','E') r = r.replace('EU','E') r = r.replace('AU','O') r = r.replace('OI','2') r = r.replace('OY','2') r = r.replace('OU','3') print '10:'+r #11 remplacer les groupes de lettres suivants r = r.replace('CH','5') r = r.replace('SCH','5') r = r.replace('SH','5') r = r.replace('SS','S') r = r.replace('SC','S') #CP : problème pour PASCAL, mais pas pour PISCINE ? print '11:'+r #12 remplacer le c par un s s’il est suivi d’un e ou d’un i #CP : à mon avis, il faut inverser 11 et 12 et ne pas faire la dernière ligne du 11 r = re.sub(r'C()',r'S\1',r) print '12:'+r #13 remplacer les lettres ou groupe de lettres suivants : r = r.replace('C','K') r = r.replace('Q','K') r = r.replace('QU','K') r = r.replace('GU','K') r = r.replace('GA','KA') r = r.replace('GO','KO') r = r.replace('GY','KY') print '13:'+r #14 remplacer les lettres suivante : r = r.replace('A','O') r = r.replace('D','T') r = r.replace('P','T') r = r.replace('J','G') r = r.replace('B','F') r = r.replace('V','F') r = r.replace('M','N') print '14:'+r #15 Supprimer les lettres dupliquées oldc='#' newr='' for c in r: if oldc != c: newr=newr+c oldc=c r = newr print '15:'+r #16 Supprimer les terminaisons suivantes : t, x r = re.sub(r'(.*)$',r'\1',r) print '16:'+r #17 Affecter à chaque lettres le code numérique correspondant en partant de la dernière lettre num =['1','2','3','4','5','E','F','H','H','I','K','L','N','O','R','S','T','U','W','X','Y','Z'] l = for c in r: l.append(num.index(c)) print '17:' print l #18 Convertissez les codes numériques ainsi obtenu en un nombre de base 22 exprimé en virgule flottante. res=0. i=1 for n in l: res = n*22**-i+res i=i+1 print '18:' print res print phonex('PHILAURHEIMSMET') print phonex('martin') |
Re: Soundex en français
Posté par
kikan
le
05/04/2005 17:37
Non, finalement la mise en page est bien passée ! C'est l'aperçu qui a cafouillé.
J'ai oublié de citer l'auteur de l'algorithme dans le code, c'est mal. Ajoutez les quelques lignes suivantes à votre code : code: #Origine : Algorithme Phonex de Frédéric BROUARD (31/3/99)
#Source : http://sqlpro.developpez.com/cours/soundex
|
Re: Soundex en français
Posté par
fcarlier
le
05/04/2005 17:41
Je viens juste de finir le soundex2 en python !!!
Donc on peut dire que l'on a les 3 !!! Je vais faire une page pour mettre à dispo les 3 sources !!!! A+ |
Re: Soundex en français
Posté par
kikan
le
05/04/2005 17:47
Quelques expressions régulières ne sont pas passées du tout...
Je poste le source ici : http://www.pennaforte.net/christian/phonex.py Il est complet. |
Re: Soundex en français
Posté par
fcarlier
le
05/04/2005 18:08
kikan : Ton fichier passe mal !!! deprecated .... pas encore tester !!!
Sinon, SOUNDEX et SOUNDEX2 sont dispo sur : http://www-ic2.univ-lemans.fr/~carlier/recherche/soundex.py Attend vos améliorations !!! j'ai contacte l'auteur Frédéric BROUARD qui voudrait les rajouter sur la page !!! A+ |
Re: Soundex en français
Posté par
kikan
le
05/04/2005 22:10
Je l'ai remis en téléchargement : j'avais un problème d'Unicode qui le rendait illisible.
Est-ce qu'il est mieux maintenant ? Je viens de le télécharger depuis chez moi, ça passe bien (sur Mac). |
Re: Soundex en français
Posté par
fcarlier
le
07/04/2005 11:28
Salut à tous je viens de faire une page propre sur les soundex/soundex2/phonex (Partie tiré de sqlpro... avec l'autorisation de l'auteur).
J'y ai placé un lien vers les deux script python. A lire et à apporter des optimisations si vous voulez !!! http://www-lium.univ-lemans.fr/~carlier/recherche/soundex.html Merci à tous !! Sinon, dans phonex, prise en compte du son "on" Il faudrait maintenant finir d'implementer la fonction de hamming et voir l'appel au librairie de levenstein. Donc la page doit encore évoluer !!! A+ |
Re: Soundex en français
Posté par
fcarlier
le
07/04/2005 11:35
|




