Conversion de caracteres accentues en ces memes caracteres non accentues
11 réponses
Frédéric Momméja
Bonjour à tous,
j'aimerais savoir si l'un d'entre vous connaît un module ou une manière
élégante qui permette de transformer les caractères accentués d'une
phrase en leur équivalent non accentué ?
Par exemple : « Vous êtes extrêmement sympas de m'avoir dépanné »
deviendrait : « Vous etes extremement sympas de m'avoir depanne »
Pour l'instant, j'utilise un dictionnaire...
Le but est de transformer des titres de chapitre en URLs pour au final
avoir : « Vous_etes_extremement_sympas_de_m_avoir_depanne »
(virer les espaces et les apostrophes, je sais faire).
Je me suis construit un truc un peu "boeuf". L'avantage, c'est que me construit autant de dicos que de besoins (extraction des numériques seuls ; conversion en ascii, en majuscules "à ma façon" ; suppression d'ensembles de caractères ; etc.)
def conv(chaine, mappingchar=mappingcharmaj): return=''.join([mappingchar.get(i, i) for i in chaine])
@-salutations
Michel Claveau
Salut !
Je me suis construit un truc un peu "boeuf". L'avantage, c'est que me
construit autant de dicos que de besoins (extraction des numériques seuls ;
conversion en ascii, en majuscules "à ma façon" ; suppression d'ensembles de
caractères ; etc.)
Je me suis construit un truc un peu "boeuf". L'avantage, c'est que me construit autant de dicos que de besoins (extraction des numériques seuls ; conversion en ascii, en majuscules "à ma façon" ; suppression d'ensembles de caractères ; etc.)
def conv(chaine, mappingchar=mappingcharmaj): return=''.join([mappingchar.get(i, i) for i in chaine])
@-salutations
Michel Claveau
Frédéric Momméja
Do Re Mi chel La Si Do écrivait le 22/06/05 10:45 :
Je me suis construit un truc un peu "boeuf". L'avantage, c'est que me construit autant de dicos que de besoins (extraction des numériques seuls ; conversion en ascii, en majuscules "à ma façon" ; suppression d'ensembles de caractères ; etc.)
Ça n'est pas un module mais c'est très intéressant pour un newbie en python comme moi. ;)
Merci Michel pour ce partage. :)
-- Frédéric Momméja
Do Re Mi chel La Si Do écrivait le 22/06/05 10:45 :
Je me suis construit un truc un peu "boeuf". L'avantage, c'est que me
construit autant de dicos que de besoins (extraction des numériques seuls ;
conversion en ascii, en majuscules "à ma façon" ; suppression d'ensembles de
caractères ; etc.)
Ça n'est pas un module mais c'est très intéressant pour un newbie en
python comme moi. ;)
Do Re Mi chel La Si Do écrivait le 22/06/05 10:45 :
Je me suis construit un truc un peu "boeuf". L'avantage, c'est que me construit autant de dicos que de besoins (extraction des numériques seuls ; conversion en ascii, en majuscules "à ma façon" ; suppression d'ensembles de caractères ; etc.)
Ça n'est pas un module mais c'est très intéressant pour un newbie en python comme moi. ;)
Merci Michel pour ce partage. :)
-- Frédéric Momméja
William Dodé
On 22-06-2005, Frédéric Momméja wrote:
Bonjour à tous,
j'aimerais savoir si l'un d'entre vous connaît un module ou une manière élégante qui permette de transformer les caractères accentués d'une phrase en leur équivalent non accentué ?
j'aimerais savoir si l'un d'entre vous connaît un module ou une manière
élégante qui permette de transformer les caractères accentués d'une
phrase en leur équivalent non accentué ?
j'aimerais savoir si l'un d'entre vous connaît un module ou une manière élégante qui permette de transformer les caractères accentués d'une phrase en leur équivalent non accentué ?
j'aimerais savoir si l'un d'entre vous connaît un module ou une manière élégante qui permette de transformer les caractères accentués d'une phrase en leur équivalent non accentué ?
Merci William, c'est un peu ce vers quoi je pensais me rabattre si aucun module ne prenait en charge la manip. ;)
J'en profite pour remercier les contributeurs réguliers de ce groupe dont Michel et toi faites partie, que je lis avec assiduité et dont les interventions m'apprennent énormément de chose.
Merci donc. ;)
-- Frédéric Momméja
William Dodé écrivait le 22/06/05 11:14 :
On 22-06-2005, Frédéric Momméja wrote:
j'aimerais savoir si l'un d'entre vous connaît un module ou une manière
élégante qui permette de transformer les caractères accentués d'une
phrase en leur équivalent non accentué ?
Merci William, c'est un peu ce vers quoi je pensais me rabattre si aucun
module ne prenait en charge la manip. ;)
J'en profite pour remercier les contributeurs réguliers de ce groupe
dont Michel et toi faites partie, que je lis avec assiduité et dont les
interventions m'apprennent énormément de chose.
j'aimerais savoir si l'un d'entre vous connaît un module ou une manière élégante qui permette de transformer les caractères accentués d'une phrase en leur équivalent non accentué ?
Merci William, c'est un peu ce vers quoi je pensais me rabattre si aucun module ne prenait en charge la manip. ;)
J'en profite pour remercier les contributeurs réguliers de ce groupe dont Michel et toi faites partie, que je lis avec assiduité et dont les interventions m'apprennent énormément de chose.
Merci donc. ;)
-- Frédéric Momméja
Sean McIlroy
def safe(chtr): aa = ['xe1', 'xe0', 'xe2', 'xe4'] AA = ['xc1', 'xc0', 'xc2', 'xc4'] ee = ['xe9', 'xe8', 'xea', 'xeb'] EE = ['xc9', 'xc8', 'xca', 'xcb'] ii = ['xee', 'xef'] II = ['xce', 'xcf'] oo = ['xf4', 'xf6'] OO = ['xd4', 'xd6'] uu = ['xfb', 'xfc'] UU = ['xdb', 'xdc'] if chtr in aa: return 'a' if chtr in AA: return 'A' if chtr in ee: return 'e' if chtr in EE: return 'E' if chtr in ii: return 'i' if chtr in II: return 'I' if chtr in oo: return 'o' if chtr in OO: return 'O' if chtr in uu: return 'u' if chtr in UU: return 'U' if chtr=='x9c': return 'oe' if chtr=='x8c': return 'OE' if chtr=='xe7': return 'c' if chtr=='xc7': return 'C' return chtr
safename = lambda strg: ''.join(map(safe,strg))
def safe(chtr):
aa = ['xe1', 'xe0', 'xe2', 'xe4']
AA = ['xc1', 'xc0', 'xc2', 'xc4']
ee = ['xe9', 'xe8', 'xea', 'xeb']
EE = ['xc9', 'xc8', 'xca', 'xcb']
ii = ['xee', 'xef']
II = ['xce', 'xcf']
oo = ['xf4', 'xf6']
OO = ['xd4', 'xd6']
uu = ['xfb', 'xfc']
UU = ['xdb', 'xdc']
if chtr in aa: return 'a'
if chtr in AA: return 'A'
if chtr in ee: return 'e'
if chtr in EE: return 'E'
if chtr in ii: return 'i'
if chtr in II: return 'I'
if chtr in oo: return 'o'
if chtr in OO: return 'O'
if chtr in uu: return 'u'
if chtr in UU: return 'U'
if chtr=='x9c': return 'oe'
if chtr=='x8c': return 'OE'
if chtr=='xe7': return 'c'
if chtr=='xc7': return 'C'
return chtr
def safe(chtr): aa = ['xe1', 'xe0', 'xe2', 'xe4'] AA = ['xc1', 'xc0', 'xc2', 'xc4'] ee = ['xe9', 'xe8', 'xea', 'xeb'] EE = ['xc9', 'xc8', 'xca', 'xcb'] ii = ['xee', 'xef'] II = ['xce', 'xcf'] oo = ['xf4', 'xf6'] OO = ['xd4', 'xd6'] uu = ['xfb', 'xfc'] UU = ['xdb', 'xdc'] if chtr in aa: return 'a' if chtr in AA: return 'A' if chtr in ee: return 'e' if chtr in EE: return 'E' if chtr in ii: return 'i' if chtr in II: return 'I' if chtr in oo: return 'o' if chtr in OO: return 'O' if chtr in uu: return 'u' if chtr in UU: return 'U' if chtr=='x9c': return 'oe' if chtr=='x8c': return 'OE' if chtr=='xe7': return 'c' if chtr=='xc7': return 'C' return chtr
safename = lambda strg: ''.join(map(safe,strg))
Frédéric Momméja
Sean McIlroy écrivait le 22/06/05 16:29 :
def safe(chtr): [SNIP]
safename = lambda strg: ''.join(map(safe,strg))
C'est vraiment très intéressant de découvrir toutes ces possibilités de traitement tellement différentes les unes des autres qu'offre python pour résoudre un seul et même problème.
Merci Sean pour cette solution pour le moins originale ! ;)
-- Frédéric Momméja
Sean McIlroy écrivait le 22/06/05 16:29 :
def safe(chtr):
[SNIP]
safename = lambda strg: ''.join(map(safe,strg))
C'est vraiment très intéressant de découvrir toutes ces possibilités de
traitement tellement différentes les unes des autres qu'offre python
pour résoudre un seul et même problème.
Merci Sean pour cette solution pour le moins originale ! ;)
C'est vraiment très intéressant de découvrir toutes ces possibilités de traitement tellement différentes les unes des autres qu'offre python pour résoudre un seul et même problème.
Merci Sean pour cette solution pour le moins originale ! ;)
-- Frédéric Momméja
Laurent Pointal
Frédéric Momméja wrote:
Bonjour à tous,
j'aimerais savoir si l'un d'entre vous connaît un module ou une manière élégante qui permette de transformer les caractères accentués d'une phrase en leur équivalent non accentué ?
Par exemple : « Vous êtes extrêmement sympas de m'avoir dépanné » deviendrait : « Vous etes extremement sympas de m'avoir depanne »
Pour l'instant, j'utilise un dictionnaire... Le but est de transformer des titres de chapitre en URLs pour au final avoir : « Vous_etes_extremement_sympas_de_m_avoir_depanne » (virer les espaces et les apostrophes, je sais faire).
Merci. ;)
J'ai fait ça, je l'ai mis sur le wiki python-fr, sur la page: http://wikipython.flibuste.net/moin.py/JouerAvecUnicode En plus ça traite les o-eliés (le but étant d'avoir une chaîne type 'ascii' au final pour pouvoir faire des tris & Co).
@param s: le texte à nettoyer. @type s: str ou unicode @return: le texte nettoyé de ses marques diacritiques. @rtype: unicode """ if isinstance(s,str) : s = unicode(s,"utf8","replace") res = [] for c in s : res.append(_reptable.get(ord(c),c)) return u"".join(res)
Frédéric Momméja wrote:
Bonjour à tous,
j'aimerais savoir si l'un d'entre vous connaît un module ou une manière
élégante qui permette de transformer les caractères accentués d'une
phrase en leur équivalent non accentué ?
Par exemple : « Vous êtes extrêmement sympas de m'avoir dépanné »
deviendrait : « Vous etes extremement sympas de m'avoir depanne »
Pour l'instant, j'utilise un dictionnaire...
Le but est de transformer des titres de chapitre en URLs pour au final
avoir : « Vous_etes_extremement_sympas_de_m_avoir_depanne »
(virer les espaces et les apostrophes, je sais faire).
Merci. ;)
J'ai fait ça, je l'ai mis sur le wiki python-fr, sur la page:
http://wikipython.flibuste.net/moin.py/JouerAvecUnicode
En plus ça traite les o-eliés (le but étant d'avoir une chaîne type
'ascii' au final pour pouvoir faire des tris & Co).
@param s: le texte à nettoyer.
@type s: str ou unicode
@return: le texte nettoyé de ses marques diacritiques.
@rtype: unicode
"""
if isinstance(s,str) :
s = unicode(s,"utf8","replace")
res = []
for c in s :
res.append(_reptable.get(ord(c),c))
return u"".join(res)
j'aimerais savoir si l'un d'entre vous connaît un module ou une manière élégante qui permette de transformer les caractères accentués d'une phrase en leur équivalent non accentué ?
Par exemple : « Vous êtes extrêmement sympas de m'avoir dépanné » deviendrait : « Vous etes extremement sympas de m'avoir depanne »
Pour l'instant, j'utilise un dictionnaire... Le but est de transformer des titres de chapitre en URLs pour au final avoir : « Vous_etes_extremement_sympas_de_m_avoir_depanne » (virer les espaces et les apostrophes, je sais faire).
Merci. ;)
J'ai fait ça, je l'ai mis sur le wiki python-fr, sur la page: http://wikipython.flibuste.net/moin.py/JouerAvecUnicode En plus ça traite les o-eliés (le but étant d'avoir une chaîne type 'ascii' au final pour pouvoir faire des tris & Co).
@param s: le texte à nettoyer. @type s: str ou unicode @return: le texte nettoyé de ses marques diacritiques. @rtype: unicode """ if isinstance(s,str) : s = unicode(s,"utf8","replace") res = [] for c in s : res.append(_reptable.get(ord(c),c)) return u"".join(res)
Frédéric Momméja
Laurent Pointal écrivait le 27/06/05 9:33 :
J'ai fait ça, je l'ai mis sur le wiki python-fr, sur la page: http://wikipython.flibuste.net/moin.py/JouerAvecUnicode En plus ça traite les o-eliés (le but étant d'avoir une chaîne type 'ascii' au final pour pouvoir faire des tris & Co).
Merci pour le lien, très intéressant car prend en charge Unicode. J'en ferai bon usage. ;)
-- Frédéric Momméja
Laurent Pointal écrivait le 27/06/05 9:33 :
J'ai fait ça, je l'ai mis sur le wiki python-fr, sur la page:
http://wikipython.flibuste.net/moin.py/JouerAvecUnicode
En plus ça traite les o-eliés (le but étant d'avoir une chaîne type
'ascii' au final pour pouvoir faire des tris & Co).
Merci pour le lien, très intéressant car prend en charge Unicode.
J'en ferai bon usage. ;)
J'ai fait ça, je l'ai mis sur le wiki python-fr, sur la page: http://wikipython.flibuste.net/moin.py/JouerAvecUnicode En plus ça traite les o-eliés (le but étant d'avoir une chaîne type 'ascii' au final pour pouvoir faire des tris & Co).
Merci pour le lien, très intéressant car prend en charge Unicode. J'en ferai bon usage. ;)
-- Frédéric Momméja
Amaury
Frédéric Momméja wrote:
Bonjour à tous,
j'aimerais savoir si l'un d'entre vous connaît un module ou une manière élégante qui permette de transformer les caractères accentués d'une phrase en leur équivalent non accentué ?
Par exemple : « Vous êtes extrêmement sympas de m'avoir dépanné » deviendrait : « Vous etes extremement sympas de m'avoir depanne »
Pour l'instant, j'utilise un dictionnaire... Le but est de transformer des titres de chapitre en URLs pour au final avoir : « Vous_etes_extremement_sympas_de_m_avoir_depanne » (virer les espaces et les apostrophes, je sais faire).
Merci. ;)
J'ai fait ça, je l'ai mis sur le wiki python-fr, sur la page: http://wikipython.flibuste.net/moin.py/JouerAvecUnicode En plus ça traite les o-eliés (le but étant d'avoir une chaîne type 'ascii' au final pour pouvoir faire des tris & Co).
Ca donne:
...
J'ai mis le temps, mais j'ai trouvé une méthode qui n'a pas besoin de lister tous les caractères. Elle utilise le module unicodedata:
from unicodedata import decomposition s = u"Vous êtes extrêmement sympas de m'avoir dépanné" "".join([chr(int((decomposition(c) or hex(ord(c))).split()[0],16)) for c in s])
C'est peut-être plus clair comme ceci:
from unicodedata import decomposition def enleveAccent(car): deco = decomposition(car) if deco: return chr( int( deco.split()[0] ,16) ) else: return car
s = u"Vous êtes extrêmement sympas de m'avoir dépanné" print "".join([enleveAccent(c) for c in s])
Amaury
Frédéric Momméja wrote:
Bonjour à tous,
j'aimerais savoir si l'un d'entre vous connaît un module ou une manière
élégante qui permette de transformer les caractères accentués d'une
phrase en leur équivalent non accentué ?
Par exemple : « Vous êtes extrêmement sympas de m'avoir dépanné »
deviendrait : « Vous etes extremement sympas de m'avoir depanne »
Pour l'instant, j'utilise un dictionnaire...
Le but est de transformer des titres de chapitre en URLs pour au final
avoir : « Vous_etes_extremement_sympas_de_m_avoir_depanne »
(virer les espaces et les apostrophes, je sais faire).
Merci. ;)
J'ai fait ça, je l'ai mis sur le wiki python-fr, sur la page:
http://wikipython.flibuste.net/moin.py/JouerAvecUnicode
En plus ça traite les o-eliés (le but étant d'avoir une chaîne type
'ascii' au final pour pouvoir faire des tris & Co).
Ca donne:
...
J'ai mis le temps, mais j'ai trouvé une méthode qui n'a pas besoin de
lister tous les caractères. Elle utilise le module unicodedata:
from unicodedata import decomposition
s = u"Vous êtes extrêmement sympas de m'avoir dépanné"
"".join([chr(int((decomposition(c) or hex(ord(c))).split()[0],16))
for c in s])
C'est peut-être plus clair comme ceci:
from unicodedata import decomposition
def enleveAccent(car):
deco = decomposition(car)
if deco:
return chr( int( deco.split()[0] ,16) )
else:
return car
s = u"Vous êtes extrêmement sympas de m'avoir dépanné"
print "".join([enleveAccent(c) for c in s])
j'aimerais savoir si l'un d'entre vous connaît un module ou une manière élégante qui permette de transformer les caractères accentués d'une phrase en leur équivalent non accentué ?
Par exemple : « Vous êtes extrêmement sympas de m'avoir dépanné » deviendrait : « Vous etes extremement sympas de m'avoir depanne »
Pour l'instant, j'utilise un dictionnaire... Le but est de transformer des titres de chapitre en URLs pour au final avoir : « Vous_etes_extremement_sympas_de_m_avoir_depanne » (virer les espaces et les apostrophes, je sais faire).
Merci. ;)
J'ai fait ça, je l'ai mis sur le wiki python-fr, sur la page: http://wikipython.flibuste.net/moin.py/JouerAvecUnicode En plus ça traite les o-eliés (le but étant d'avoir une chaîne type 'ascii' au final pour pouvoir faire des tris & Co).
Ca donne:
...
J'ai mis le temps, mais j'ai trouvé une méthode qui n'a pas besoin de lister tous les caractères. Elle utilise le module unicodedata:
from unicodedata import decomposition s = u"Vous êtes extrêmement sympas de m'avoir dépanné" "".join([chr(int((decomposition(c) or hex(ord(c))).split()[0],16)) for c in s])
C'est peut-être plus clair comme ceci:
from unicodedata import decomposition def enleveAccent(car): deco = decomposition(car) if deco: return chr( int( deco.split()[0] ,16) ) else: return car
s = u"Vous êtes extrêmement sympas de m'avoir dépanné" print "".join([enleveAccent(c) for c in s])
Amaury
Guillaume Bouchard
Amaury wrote:
from unicodedata import decomposition
et dire que c'était si proche... Moi qui cherchais une solution de dingue...
Merci.
-- Guillaume.
Amaury wrote:
from unicodedata import decomposition
et dire que c'était si proche...
Moi qui cherchais une solution de dingue...