Normalisation des pythons et des caractères
Bonjour
Je récupère des données utf8 basées sur un texte à partir d'une source étrangère qui contient des caractères spéciaux tels que u"ıöüç"
alors que je veux les normaliser en anglais comme "ıöüç"
->"iouc"
. Quelle serait la meilleure façon d'atteindre cet objectif ?
4 réponses
je recommande d'utiliser unidecode module:
>>> from unidecode import unidecode
>>> unidecode(u'ıöüç')
'iouc'
notez comment vous lui donnez une chaîne unicode et qu'elle produit une chaîne byte. La sortie est garantie D'être ASCII.
cela dépend jusqu'où vous voulez aller dans la translittération du résultat. Si vous voulez tout convertir en ASCII (αβγ
abg
)unidecode
est le chemin à parcourir.
si vous voulez simplement supprimer les accents des lettres accentuées, alors vous pouvez essayer de décomposer votre chaîne en utilisant la forme de normalisation NFKD (ceci convertit la lettre accentuée á
pour une lettre simple a
suivi de U+0301 COMBINING ACUTE ACCENT
), puis en écartant les accents (qui appartiennent à la classe de caractères UnicodeMn
- "Mark, nonpacing").
import unicodedata
def remove_nonspacing_marks(s):
"Decompose the unicode string s and remove non-spacing marks."
return ''.join(c for c in unicodedata.normalize('NFKD', s)
if unicodedata.category(c) != 'Mn')
la façon la plus simple que j'ai trouvée:
unicodedata.normalize('NFKD', s).encode("ascii", "ignore")