ru-normalizr — open-source библиотека для нормализации русского текста без обращения к большой языковой модели. Проект пригодится там, где текст нужно сначала привести к предсказуемой форме, а уже потом передать в TTS или другой NLP-пайплайн.

Какую проблему решает проект

В исходном тексте числа, даты, римские цифры, сокращения и латиница записаны так, как удобно человеку, но не всегда так, как их нужно произнести вслух. Например:

В 1980-е годы денег было 25 млн.

ru-normalizr превращает такую запись в словесную форму, с которой дальше проще работать синтезатору речи:

В тысяча девятьсот восьмидесятые годы денег было двадцать пять миллионов.

Это не просто замена по словарю: правила учитывают контекст и грамматическую форму результата.

Два режима обработки

По умолчанию библиотека работает в режиме safe. Он рассчитан на аккуратную нормализацию чисел, дат, времени, годов, римских цифр, единиц измерения и распространённых сокращений.

Для голосовых сценариев есть режим tts. Он дополнительно умеет раскрывать CAPS, инициалы и буквенные аббревиатуры, обрабатывать явные URL и переводить латиницу в кириллицу ближе к тому, как её произносят вслух.

ru-normalizr "Глава IV. Встреча в 10:07." --mode tts

Использование в Python

Самый короткий путь — функция normalize:

from ru_normalizr import normalize

result = normalize("Глава IV. Встреча в 10:07.")
print(result)

Если нужно обработать много строк с одинаковыми настройками, можно создать Normalizer и использовать пакетную обработку:

from ru_normalizr import NormalizeOptions, Normalizer

normalizer = Normalizer(NormalizeOptions.tts())
result = normalizer.normalize_batch([
    "Глава IV.",
    "В 1980-е годы было 25 млн.",
])

Почему без LLM

Нормализация — хороший пример задачи, где важны детерминизм, скорость и предсказуемая стоимость. Для неё не всегда нужно генерировать ответ моделью: специализированные правила легче тестировать, запускать локально и включать в массовый TTS-пайплайн без GPU.

При этом ru-normalizr не пытается решать все задачи русского языка. Например, расстановка ударений в русских словах вынесена в отдельный этап. Это полезное разделение ответственности: нормализатор подготавливает запись, а специализированный инструмент занимается ударениями.

Где попробовать

Следующий естественный шаг для сайта — добавить к этой странице браузерную демо-форму и отдельный API на VPS. Тогда результат можно будет проверить без установки Python и сразу использовать в примерах проекта.