Подтвердить что ты не робот

Python и нормализация характера

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Если вы просто хотите удалить акценты с акцентированных букв, вы можете попробовать разложить свою строку, используя форму нормировки NFKD (это преобразует акцентированную букву á в обычную букву a, а затем U+0301 COMBINING ACUTE ACCENT), а затем отбрасывает акценты (которые принадлежат Unicode character class Mn - "Mark, nonspacing" ).

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')

Ответ 3

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

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