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

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 Les deux révisions suivantes
tris_dictionnaire_francais [2011/09/15 17:56]
tyrtamos
tris_dictionnaire_francais [2011/09/16 06:24]
tyrtamos
Ligne 46: Ligne 46:
 <code python> <code python>
 L = ['pèche', 'PÈCHE', 'pêche', 'PÊCHE', 'péché', 'PÉCHÉ', 'pécher', 'pêcher'] L = ['pèche', 'PÈCHE', 'pêche', 'PÊCHE', 'péché', 'PÉCHÉ', 'pécher', 'pêcher']
 +
 compfr = Compfr() compfr = Compfr()
 L.sort(cmp=compfr) L.sort(cmp=compfr)
Ligne 65: Ligne 66:
 </code> </code>
  
-Si on est dans Python 3.x, l'argument cmp de sort() n'existe plus, mais grâce à cmp_to_key du module functools, on peut encore utiliser la même méthode de comparaison avec l'argument 'key'. Il suffira d'écrire: %%L.sort(key=cmp_to_key(compfr))%% après avoir importé le module functools.+Si on est dans Python 3.x, l'argument cmp de sort() n'existe plus, mais grâce à cmp_to_key du module functools, on peut encore utiliser la même méthode de comparaison avec l'argument 'key'. Il suffira d'écrire: 
 + 
 +<code python> 
 +from functools import cmp_to_key 
 + 
 +L = ['pèche', 'PÈCHE', 'pêche', 'PÊCHE', 'péché', 'PÉCHÉ', 'pécher', 'pêcher'
 + 
 +compfr = Compfr() 
 +L.sort(key=cmp_to_key(compfr)) 
 +for mot in L: 
 +    print mot 
 + 
 +pèche 
 +PÈCHE 
 +pêche 
 +PÊCHE 
 +péché 
 +PÉCHÉ 
 +pécher 
 +pêcher 
 +</code>
  
 Tel que la classe Compfr() est définie, la liste est supposée être composée de mots encodés soit en unicode, soit en 'utf-8'. Si les mots non-unicode sont dans un autre encodage, on le donne à l'initialisation. Par exemple, si c'est 'cp1252' (=Windows), on écrit: compfr = Compfr('cp1252'). Dans tous les cas, les comparaisons sont faites en unicode.    Tel que la classe Compfr() est définie, la liste est supposée être composée de mots encodés soit en unicode, soit en 'utf-8'. Si les mots non-unicode sont dans un autre encodage, on le donne à l'initialisation. Par exemple, si c'est 'cp1252' (=Windows), on écrit: compfr = Compfr('cp1252'). Dans tous les cas, les comparaisons sont faites en unicode.   
Ligne 71: Ligne 92:
 ===== Listes de test ===== ===== Listes de test =====
  
-Volà les listes utilisées pour les tests, issues de l'article de référence cité plus haut. Les mots se présentent déjà dans l'ordre correct, et le tri doit donc les renvoyer à l'identique.  +Volà les listes utilisées pour les tests, issues de l'article de référence cité plus haut. Les mots se présentent déjà dans l'ordre correct, et le tri doit donc les renvoyer à l'identique. Mais rien ne vous empêche de changer l'ordre pour vérifier. 
  
 <code python> <code python>
Ligne 86: Ligne 107:
  
 NB: u'\xA0' est l'espace insécable. NB: u'\xA0' est l'espace insécable.
 +
 +===== Tri indexé selon le dictionnaire français =====
 +
 +Dans ce cas, la liste initiale ne change pas, et on veut obtenir l'ordre du tri par l'intermédiaire d'un fichier d'index. Par exemple, le 3ème mot de la liste L sera trouvé grâce au fichier index ind, par L[ind[2]] et non L[2].
 +
 +Voilà comment on trouve ce fichier d'index:
 +
 +<code python>
 +L = [u'cæcum', u'cadurcien', u'cæsium', u'caennais', u'coercitif', u'cafard', u'cœur']
 + 
 +ind = [i for i in xrange(0,len(L))] # permet d'avoir ind=[0,1,2,3,...]
 +compfr = Compfr()
 +ind.sort(cmp=compfr, key=lambda v: L[v]) # c'est l'index que l'on trie!
 +for i in xrange(0,len(L)):
 +    print i, ind[i], L[ind[i]]
 +print
 +
 +0 1 cadurcien
 +1 0 cæcum
 +2 3 caennais
 +3 2 cæsium
 +4 5 cafard
 +5 4 coercitif
 +6 6 cœur
 +</code>
 +
 +Et le résultat affiché est bien l'ordre correct.
 +
 +Si on est avec Python 3.x, l'argument cmp n'existe plus et on utilise encore cmp_to_key du module functools:
 +
 +<code python>
 +from functools import cmp_to_key
 +
 +L = [u'cæcum', u'cadurcien', u'cæsium', u'caennais', u'coercitif', u'cafard', u'cœur']
 + 
 +ind = [i for i in xrange(0,len(L))] # permet d'avoir ind=[0,1,2,3,...]
 +compfr = Compfr()
 +ind.sort(key=cmp_to_key(lambda v1,v2: compfr(L[v1],L[v2]))) # c'est l'index que l'on trie!
 +for i in xrange(0,len(L)):
 +    print i, ind[i], L[ind[i]]
 +print
 +
 +0 1 cadurcien
 +1 0 cæcum
 +2 3 caennais
 +3 2 cæsium
 +4 5 cafard
 +5 4 coercitif
 +6 6 cœur
 +</code>
  
 ===== Recherche rapide par dichotomie dans une liste triée selon le dictionnaire français ===== ===== Recherche rapide par dichotomie dans une liste triée selon le dictionnaire français =====
tris_dictionnaire_francais.txt · Dernière modification: 2012/02/28 09:45 de tyrtamos