Модуль transliterate
представляет собой двунаправленный транслитератор текста для Python.
Транслитерирует (unicode) строки в соответствии с правилами, указанными в языковых пакетах, то есть заменяет все русские буквы на английские и наоборот по правилам транслитерации.
В этом модуле, для транслитерации букв кириллицы буквами латинского алфавита используются правила, описанные в ISO 9:1995 и ГОСТ 7.79-2000
Примечание: обратите внимание на сторонний модуль
unidecode
, который принимает строки в Юникоде и пытается представить их в символах ASCII (т.е. универсально отображаемых символах между0x00
и0x7F
), где компромиссы, принимаемые при сопоставлении между двумя наборами символов, выбираются так, чтобы они были близки к тому, что сделал бы человек на латинской раскладке клавиатуры.
transliterate
в виртуальное окружение:# создаем виртуальное окружение $ python3 -m venv .venv --prompt VirtualEnv # активируем виртуальное окружение $ source .venv/bin/activate # ставим модуль transliterate (VirtualEnv) :~$ python -m pip install -U transliterate
Модуль transliterate
поставляется со следующими языковыми пакетами:
Модуль transliterate
имеет ряд полезных инструментов, таких как:
transliterate.slugify()
для нелатинских текстов.Список доступных (зарегистрированных) языков для осуществления транслитерации.
>>> from transliterate import get_available_language_codes >>> print(get_available_language_codes()) # ['l1', 'uk', 'ka', 'bg', 'sr', 'el', 'mn', 'hy', 'ru', 'mk']
Транслитерация текста с английского на русский, т .е. замена всех английских букв на русские.
>>> from transliterate import translit >>> text = 'Lorem ipsum dolor sit amet' >>> ru_text = translit(text, 'ru') >>> ru_text # 'Лорем ипсум долор сит амет' >>> text = translit('Hello world!', 'ru') >>> text # 'Хелло wорлд!'
Транслитерация текста с русского на английский, т .е. замена всех русских букв на английские.
>>> from transliterate import translit >>> ru_text = 'Лорем ипсум долор сит амет' >>> text = translit(ru_text, language_code='ru', reversed=True) >>> text # 'Lorem ipsum dolor sit amet' >>> ru_text = 'Михаил, Юлия, София, Андрей' >>> text = translit(ru_text, language_code='ru', reversed=True) >>> text # 'Mihail, Julija, Sofija, Andrej'
Так как модуль transliterate
снабжен функцией распознавания языка на основе диапазонов (при наличии соответствующего языкового пакета) обратная транслитерация русского языка (кириллицы) может осуществляться без указания аргумента language_code
.
>>> from transliterate import translit >>> ru_text = 'Лорем ипсум долор сит амет' >>> text = translit(ru_text, reversed=True) >>> text # 'Lorem ipsum dolor sit amet'
Использование функции транслитерации в качестве декоратора.
from transliterate.decorators import transliterate_function @transliterate_function(language_code='ru', reversed=True) def translit(text): return text >>> translit('трансляция с русского на английский') # 'transljatsija s russkogo na anglijskij'
При работе с большими объемами данных, необходимо явно указывать аргумент language_code
, а также импортировать оптимизированную функцию транслитерации текста следующим образом:
from transliterate import get_translit_function text = 'При работе с большими объемами данных' translit_ru = get_translit_function('ru') translit_ru(text, reversed=True) # "Pri rabote s bol'shimi ob'emami dannyh"
transliterate
.>>> from transliterate import slugify >>> text = 'Функция составления URL-адреса' >>> url = slugify(text) >>> url # 'funktsija-sostavlenija-url-adresa'
Обратите внимание, что при использовании с Python 3 модуль транслитерация использует собственный упрощенный резервный генератор "lorem ipsum".
>>> from transliterate.contrib.apps.translipsum import TranslipsumGenerator >>> pg_ru = TranslipsumGenerator(language_code='ru') >>> pg_ru.generate_sentence() # ' Аенеан ац интердум ипсум.' >>> pg_ru.generate_sentence() # ' Нуллам алиqует лецтус маурис, qуис дигниссим ест моллис сед.' >>> pg_ru.generate_paragraph() # ' Црас плацерат анте qуис дуи цонсеqуат цурсус. Нуллам алиqует # лецтус маурис, qуис дигниссим ест моллис сед. Ин сусципит qуам # а вехицула тинцидунт. сед моллис ипсум дапибус витае.'
Если необходимо использовать встроенные языковые пакеты вместе со своим собственным, то перед регистрацией собственного языкового пакета надо обязательно вызвать функцию transliterate.discover.autodiscover()
.
>>> from transliterate.discover import autodiscover >>> autodiscover()
Теперь зарегистрируем пользовательский языковой пакет, который будет транслировать раскладку клавиатуры.
from transliterate.base import TranslitLanguagePack, registry class KBDLanguagePack(TranslitLanguagePack): language_code = "kbd" language_name = "KeyBoard" mapping = ( 'QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>?qwertyuiop[]asdfghjkl;\'zxcvbnm,./', 'ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,йцукенгшщзхъфывапролджэячсмитьбю.', ) >>> registry.register(KBDLanguagePack) # проверяем регистрацию пакета >>> from transliterate import get_available_language_codes, translit >>> 'kbd' in get_available_language_codes() # True # проверка работы >>> text = 'Ghbdtn rfr ltkf' >>> translit(text, language_code='kbd') # 'Привет как дела' >>> text = 'Руддщ Цщкдвю' >>> translit(text, language_code='kbd', reversed=True) # 'Hello World.'