Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente | |||
tris_alpha [2011/09/19 08:11] tyrtamos |
tris_alpha [2011/09/21 08:45] (Version actuelle) tyrtamos |
||
---|---|---|---|
Ligne 311: | Ligne 311: | ||
==== Suppression des accents ==== | ==== Suppression des accents ==== | ||
- | On va créer une fonction de conversion: | + | On va utiliser le module unicodedata: |
<code python> | <code python> | ||
+ | import unicodedata | ||
+ | |||
def sansaccent(ch): | def sansaccent(ch): | ||
""" | """ | ||
- | | + | |
- | | + | |
- | x = u"" | + | |
- | | + | |
- | k = alpha1.find(c) | + | |
- | if k>=0: | + | |
- | x += alpha2[k] | + | |
- | else: | + | |
- | x += c | + | |
- | return x | + | |
</ | </ | ||
+ | |||
+ | Ce code est simple et fait très bien le travail, sauf sur un point: il remplace en plus les espaces insécables par des espaces normaux. | ||
+ | |||
+ | Si vous voulez, comme moi, garder les espaces insécables, | ||
+ | |||
+ | <code python> | ||
+ | import unicodedata | ||
+ | |||
+ | def sansaccent(ch): | ||
+ | """ | ||
+ | r = u"" | ||
+ | for car in unicode(ch): | ||
+ | if car==u" | ||
+ | r += car | ||
+ | else: | ||
+ | carnorm = unicodedata.normalize(' | ||
+ | r += carnorm[0] | ||
+ | return r | ||
+ | </ | ||
+ | |||
+ | Comment ça marche? C'est très simple: | ||
+ | * si car est un caractère accentué, par exemple car=' | ||
+ | * si car n'est pas caractère accentué, unicodedata.normalize(' | ||
Exemple (avec la même chaine que précédemment): | Exemple (avec la même chaine que précédemment): | ||
<code python> | <code python> | ||
+ | print chaine | ||
+ | aAàÀâÂäÄåÅæÆbBcCçÇdDeEéÉèÈêÊëËfFgGhHiIîÎïÏjJkKlLmMnNoOôÔöÖœŒpPqQrRsStTuUùÙûÛüÜvVwWxXyYÿŸzZ | ||
print sansaccent(chaine) | print sansaccent(chaine) | ||
aAaAaAaAaAæÆbBcCcCdDeEeEeEeEeEfFgGhHiIiIiIjJkKlLmMnNoOoOoOœŒpPqQrRsStTuUuUuUuUvVwWxXyYyYzZ | aAaAaAaAaAæÆbBcCcCdDeEeEeEeEeEfFgGhHiIiIiIjJkKlLmMnNoOoOoOœŒpPqQrRsStTuUuUuUuUvVwWxXyYyYzZ | ||
</ | </ | ||
- | Si on veut supprimer les accents seulement sur les majuscules, c'est facile aussi: | + | Si on veut supprimer les accents seulement sur les majuscules, c'est facile aussi, à condition d' |
<code python> | <code python> | ||
def sansaccentmaj(ch): | def sansaccentmaj(ch): | ||
- | """ | + | """ |
- | | + | |
- | alpha2 = u" | + | for car in unicode(ch): |
- | x = u"" | + | |
- | for i,c in enumerate(ch): | + | |
- | | + | |
- | if k>=0: | + | |
- | | + | |
else: | else: | ||
- | | + | |
- | return | + | carcat = unicodedata.category(carnorm[0]) |
+ | if carcat==u' | ||
+ | r += carnorm[0] | ||
+ | else: | ||
+ | r += car | ||
+ | return | ||
</ | </ | ||
Ligne 355: | Ligne 376: | ||
<code python> | <code python> | ||
+ | print chaine | ||
+ | aAàÀâÂäÄåÅæÆbBcCçÇdDeEéÉèÈêÊëËfFgGhHiIîÎïÏjJkKlLmMnNoOôÔöÖœŒpPqQrRsStTuUùÙûÛüÜvVwWxXyYÿŸzZ | ||
print sansaccentmaj(chaine) | print sansaccentmaj(chaine) | ||
aAàAâAäAåAæÆbBcCçCdDeEéEèEêEëEfFgGhHiIîIïIjJkKlLmMnNoOôOöOœŒpPqQrRsStTuUùUûUüUvVwWxXyYÿYzZ | aAàAâAäAåAæÆbBcCçCdDeEéEèEêEëEfFgGhHiIîIïIjJkKlLmMnNoOôOöOœŒpPqQrRsStTuUùUûUüUvVwWxXyYÿYzZ | ||
</ | </ | ||
+ | Et, en ne changeant qu'un seul caractère dans la fonction précédente, | ||
+ | |||
+ | \\ | ||
On peut dès lors dans les tri utiliser ces fonctions de correction seules ou combinées avec les précédentes. | On peut dès lors dans les tri utiliser ces fonctions de correction seules ou combinées avec les précédentes. | ||
- | Par exemple: convertir en majuscules sans accent: | + | Par exemple: convertir en majuscules sans accent |
<code python> | <code python> |