Регулярное выражение Python для преобразования не-ascii символов в строке в ближайший эквивалент ascii - PullRequest
12 голосов
/ 30 сентября 2010

Я ищу простую функцию Python, которая принимает строку и возвращает аналогичную, но со всеми не-ascii символами, преобразованными в их ближайший эквивалент ascii. Например, диакритические знаки и тому подобное должны быть отброшены. Я предполагаю, что должен быть довольно канонический способ сделать это, и есть много связанных с этим вопросов, связанных с переполнением стека, но я не нахожу простого ответа, поэтому он кажется стоящим отдельного вопроса.

Пример ввода / вывода:

"Étienne" -> "Etienne"

Ответы [ 4 ]

4 голосов
/ 04 ноября 2013

Чтение этого вопроса заставило меня искать что-то лучшее.

https://pypi.python.org/pypi/Unidecode/0.04.1

Делает именно то, что вы просите.

2 голосов
/ 02 апреля 2011

В Python 3 и с использованием реализации регулярных выражений в PyPI:

http://pypi.python.org/pypi/regex

Начиная со строки:

>>> s = "Étienne"

Нормализуйте в NFKD и затем удалите диакритические знаки:

>>> import unicodedata
>>> import regex
>>> regex.sub(r"\p{Mn}", "", unicodedata.normalize("NFKD", s))
'Etienne'
1 голос
/ 02 апреля 2011

Прочитайте ответы на некоторые из дублирующих вопросов.Уловка NFKD работает только как инструмент для удаления акцента.Он не обрабатывает лигатуры и множество других латинских символов, которые нельзя (или не разложить).Для этого нужна подготовленная таблица перевода (и намного быстрее).

1 голос
/ 04 октября 2010

Выполняя поиск 'iconv TRANSLIT python', я нашел: http://www.tablix.org/~avian/blog/archives/2009/01/unicode_transliteration_in_python/, который выглядит так, как будто это то, что вам нужно.В комментариях есть и другие идеи, в которых вместо этого используется стандартная библиотека.

Также есть http://web.archive.org/web/20070807224749/http://techxplorer.com/2006/07/18/converting-unicode-to-ascii-using-python/, который использует NFKD для получения базовых символов, где это возможно.

...