Здравствуйте, я получаю текстовые данные utf8 из иностранного источника, который содержит специальные символы, такие как u"ıöüç"
, в то время как я хочу нормализовать их на английский язык, например "ıöüç"
-> "iouc"
. Каков наилучший способ добиться этого?
Python и нормализация символов
Ответы (4)
Я рекомендую использовать модуль Unicode:
>>> from unidecode import unidecode
>>> unidecode(u'ıöüç')
'iouc'
Обратите внимание, как вы передаете ему строку юникода, и он выводит строку байтов. Вывод гарантированно будет ASCII.
Все зависит от того, насколько далеко вы хотите зайти в транслитерации результата. Если вы хотите полностью преобразовать все в 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')
Самый простой способ, который я нашел:
unicodedata.normalize('NFKD', s).encode("ascii", "ignore")
import unicodedata
unicodedata.normalize()
http://docs.python.org/library/unicodedata.html
transliteration
.
- person soulseekah; 12.11.2010