Les deux révisions précédentes
Révision précédente
Prochaine révision
|
Révision précédente
Prochaine révision
Les deux révisions suivantes
|
tris_dictionnaire_francais [2011/09/15 17:53] tyrtamos |
tris_dictionnaire_francais [2011/09/16 06:24] tyrtamos |
<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) |
</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. |
===== 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> |
L = [u'élève', u'élevé'] | L = [u'élève', u'élevé'] |
L = [u'gène', u'gêne'] | L = [u'gène', u'gêne'] |
L = ['MÂCON', 'maçon'] | L = [u'MÂCON', u'maçon'] |
L = [u'pèche', u'PÈCHE', u'pêche', u'PÊCHE', u'péché', u'PÉCHÉ', u'pécher', u'pêcher'] | L = [u'pèche', u'PÈCHE', u'pêche', u'PÊCHE', u'péché', u'PÉCHÉ', u'pécher', u'pêcher'] |
L = [u'relève', u'relevé', u'révèle', u'révélé'] | L = [u'relève', u'relevé', u'révèle', u'révélé'] |
L = [u'cadurcien', u'cæcum', u'caennais', u'cæsium', u'cafard', u'coercitif', u'cœur'] | L = [u'cadurcien', u'cæcum', u'caennais', u'cæsium', u'cafard', u'coercitif', u'cœur'] |
L = [u'vice-consul', u'vicennal', u'vice-président', u'vice-roi', u'vicésimal', u'vice' + u'\xA0' + u'versa', u'vice-versa'] | L = [u'vice-consul', u'vicennal', u'vice-président', u'vice-roi', u'vicésimal', u'vice' + u'\xA0' + u'versa', u'vice-versa'] |
| </code> |
| |
| 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> | </code> |
| |