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 и сразу использовать в примерах проекта.