Привет
Я извлекаю текстовые данные utf8 из чужого источника, который содержит специальные символы, такие как u"ıöüç"
, пока я хочу нормализовать их на английский, например "ıöüç"
→ "iouc"
. Какой был бы лучший способ достичь этого?
Python и нормализация характера
Ответ 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")
Ответ 4
import unicodedata
unicodedata.normalize()