Питон и нормализация персонажа - PullRequest
16 голосов
/ 12 ноября 2010

Здравствуйте. Я получаю текстовые данные utf8 из внешнего источника, который содержит специальные символы, такие как u"ıöüç", в то время как я хочу нормализовать их на английский язык, такой как "ıöüç" -> "iouc".Каков наилучший способ добиться этого?

Ответы [ 4 ]

36 голосов
/ 12 ноября 2010

Я рекомендую использовать Модуль Unidecode :

>>> from unidecode import unidecode
>>> unidecode(u'ıöüç')
'iouc'

Обратите внимание, как вы передаете ему строку Unicode, и она выводит строку байтов.Выход гарантированно будет ASCII.

5 голосов
/ 12 ноября 2010

Все зависит от того, как далеко вы хотите зайти в транслитерации результата.Если вы хотите преобразовать все до ASCII (αβγ в abg), тогда unidecode - это путь.

Если вы просто хотите удалить акценты в акцентированных буквах, то вы можетепопробуйте разложить вашу строку, используя форму нормализации NFKD (это преобразует акцентированную букву á в простую букву a, за которой следует U+0301 COMBINING ACUTE ACCENT), а затем отбрасывает акценты (которые принадлежат к классу символов Unicode Mn - «Марка без пробелов»).

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')
1 голос
/ 12 апреля 2017

Самый простой способ, который я нашел:

unicodedata.normalize('NFKD', s).encode("ascii", "ignore")

0 голосов
/ 12 ноября 2010
import unicodedata
unicodedata.normalize()

http://docs.python.org/library/unicodedata.html

...