Сообщить об ошибке.

Модуль transliterate в Python, транслитератор текста

Двунаправленный транслитератор текста русский/английский для Python

Модуль 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 поставляется со следующими языковыми пакетами:

  • English,
  • Русский,
  • Serbian (alpha),
  • Ukrainian (beta),
  • и другие.

Модуль transliterate имеет ряд полезных инструментов, таких как:

Примеры транслирования текста.

Список доступных (зарегистрированных) языков для осуществления транслитерации.

>>> 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.

Использование функции генерации URL-адреса.

>>> from transliterate import slugify
>>> text = 'Функция составления URL-адреса'
>>> url = slugify(text)
>>> url
# 'funktsija-sostavlenija-url-adresa'

Использование генератора "lorem ipsum"

Обратите внимание, что при использовании с 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.'