Ci-dessous, les différences entre deux révisions de la page.
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' | ||
===== Problématique ===== | ===== Problématique ===== | ||
Ligne 18: | Ligne 19: | ||
class Compfr(object): | class Compfr(object): | ||
- | + | """ | |
+ | | ||
def __init__(self, | def __init__(self, | ||
self.decod = decod | self.decod = decod | ||
- | | + | |
self.espinsec = u' | self.espinsec = u' | ||
def __call__(self, | def __call__(self, | ||
- | + | | |
# on convertit en unicode si nécessaire | # on convertit en unicode si nécessaire | ||
if isinstance(v1, | if isinstance(v1, | ||
Ligne 37: | Ligne 39: | ||
v2 = v2.replace(u' | v2 = v2.replace(u' | ||
v2 = v2.replace(self.espinsec, | v2 = v2.replace(self.espinsec, | ||
+ | |||
+ | locale.setlocale(locale.LC_ALL, | ||
+ | comp = locale.strcoll(v1, | ||
+ | locale.setlocale(locale.LC_ALL, | ||
- | # on retourne le résultat de la comparaison | + | |
- | return locale.strcoll(v1, | + | |
</ | </ | ||
Ligne 167: | Ligne 172: | ||
if key == None: | if key == None: | ||
key = lambda c: c | key = lambda c: c | ||
- | x = key(x) | ||
if comp(x, | if comp(x, | ||
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' | * si on cherche le doublon et qu'on le trouve, on trouve celui d' | ||
* si on cherche une valeur juste inférieure au doublon, on trouve aussi le doublon d' | * si on cherche une valeur juste inférieure au doublon, on trouve aussi le doublon d' | ||
+ | |||
+ | Attention, le mot cherché n'est pas corrigé par key: il faut le corriger vous-même avant l' | ||
+ | |||
+ | ===== 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' | ||
+ | ind = [1, | ||
+ | |||
+ | print dichot(u" | ||
+ | [0, 3] | ||
+ | </ | ||
+ | |||
+ | 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' | ||
+ | |||
+ | Avec Python 3.x, on utilise la même formule. | ||
\\ | \\ |