Модуль transliterate
представляет собой двунаправленный транслитератор текста для Python.
Транслитерирует (unicode) строки в соответствии с правилами, указанными в языковых пакетах, то есть заменяет все русские буквы на английские и наоборот по правилам транслитерации.
В этом модуле, для транслитерации букв кириллицы буквами латинского алфавита используются правила, описанные в ISO 9:1995 и ГОСТ 7.79-2000
Работает на Python >=3.4
Установка модуля transliterate
в виртуальное окружение:
# создаем виртуальное окружение
$ python3 -m venv .venv --prompt VirtualEnv
# активируем виртуальное окружение
$ source .venv/bin/activate
# ставим модуль transliterate
(VirtualEnv) Idea@Centre:~$ 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.'