Deprecated: Array and string offset access syntax with curly braces is deprecated in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/init.php on line 563
tris_dictionnaire_francais [Les recettes Python de Tyrtamos]

Outils pour utilisateurs

Outils du site


tris_dictionnaire_francais

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 par tyrtamos