Warning: Undefined array key "DOKU_PREFS" in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/common.php on line 2082
tris_dictionnaire_francais [Les recettes Python de Tyrtamos]

Outils pour utilisateurs

Outils du site


tris_dictionnaire_francais

Warning: Undefined array key -1 in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/html.php on line 1458

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
tris_dictionnaire_francais [2011/09/16 06:24]
tyrtamos
tris_dictionnaire_francais [2012/02/28 09:45]
tyrtamos
Ligne 1: Ligne 1:
 ====== Tri et recherche rapide selon le dictionnaire français ====== ====== Tri et recherche rapide selon le dictionnaire français ======
  
 +(Modification le 28/2/2012: modif du code de la classe Compfr pour éviter des problèmes d'encodage dans le reste du code)
  
 ===== Problématique ===== ===== Problématique =====
Ligne 18: Ligne 19:
  
 class Compfr(object): class Compfr(object):
- +    """comparaison de 2 chaines selon le dictionnaire français""" 
 +    
     def __init__(self, decod='utf-8'):     def __init__(self, decod='utf-8'):
         self.decod = decod         self.decod = decod
-        locale.setlocale(locale.LC_ALL, '')+        self.loc = locale.getlocale(# stocker la locale courante
         self.espinsec = u'\xA0' # espace insécable         self.espinsec = u'\xA0' # espace insécable
    
     def __call__(self, v1, v2):     def __call__(self, v1, v2):
- +        
         # on convertit en unicode si nécessaire         # on convertit en unicode si nécessaire
         if isinstance(v1, str):         if isinstance(v1, str):
Ligne 37: Ligne 39:
         v2 = v2.replace(u'-', '')         v2 = v2.replace(u'-', '')
         v2 = v2.replace(self.espinsec, u'')         v2 = v2.replace(self.espinsec, u'')
 +
 +        locale.setlocale(locale.LC_ALL, '')
 +        comp = locale.strcoll(v1, v2)
 +        locale.setlocale(locale.LC_ALL, self.loc) #retour à la locale courante
    
-        # on retourne le résultat de la comparaison +        return comp retour du résultat de la comparaison
-        return locale.strcoll(v1, v2)+
 </code> </code>
  
Ligne 167: Ligne 172:
     if key == None:     if key == None:
         key = lambda c: c         key = lambda c: c
-    x = key(x) 
     if comp(x,key(L[j]))>0:     if comp(x,key(L[j]))>0:
         return [1,j]         return [1,j]
Ligne 201: Ligne 205:
  
 En cas de doublon dans la liste: En cas de doublon dans la liste:
- 
   * si on cherche le doublon et qu'on le trouve, on trouve celui d'indice le plus faible   * si on cherche le doublon et qu'on le trouve, on trouve celui d'indice le plus faible
   * si on cherche une valeur juste inférieure au doublon, on trouve aussi le doublon d'indice le plus faible   * si on cherche une valeur juste inférieure au doublon, on trouve aussi le doublon d'indice le plus faible
 +
 +Attention, le mot cherché n'est pas corrigé par key: il faut le corriger vous-même avant l'appel!
 +
 +===== Recherche rapide par dichotomie dans une liste indexée triée =====
 +
 +Dans une liste indexée triée, on va utiliser la même recherche par dichotomie:
 +
 +<code python>
 +L = [u'cæcum', u'cadurcien', u'cæsium', u'caennais', u'coercitif', u'cafard', u'cœur']
 +ind = [1,0,3,2,5,4,6]
 +
 +print dichot(u"cæsium", ind, comp=compfr, key=lambda v: L[v])
 +[0, 3]
 +</code>
 +
 +Ce qui est le résultat correct donné par [0, 3]: 
 +  * 0 => le mot a été trouvé
 +  * 3 => il est là: L[ind[3]]=u'cæsium' 
 +
 +Avec Python 3.x, on utilise la même formule.
  
 \\ \\
tris_dictionnaire_francais.txt · Dernière modification: 2012/02/28 09:45 de tyrtamos