Text Preprocessor¶
Обработка текста для TTS: числа в слова, нормализация.
Возможности¶
- Числа в слова (русский язык)
- Даты в текст
- Аббревиатуры
- Телефоны
- Валюта
- Нормализация пунктуации
Использование¶
Числа в слова¶
from kit.utils import TextPreprocessor
preprocessor = TextPreprocessor(language="ru")
# Базовые числа
text = preprocessor.numbers_to_words("У меня 5 яблок и 12 груш")
# "У меня пять яблок и двенадцать груш"
# Большие числа
text = preprocessor.numbers_to_words("Население: 145000000 человек")
# "Население: сто сорок пять миллионов человек"
# Дробные
text = preprocessor.numbers_to_words("Цена: 99.99 рублей")
# "Цена: девяносто девять целых девяносто девять сотых рублей"
Даты¶
text = preprocessor.process_dates("Встреча 15.03.2024 в 14:30")
# "Встреча пятнадцатого марта две тысячи двадцать четвёртого года в четырнадцать тридцать"
# Разные форматы
text = preprocessor.process_dates("2024-03-15")
# "пятнадцатое марта две тысячи двадцать четвёртого года"
Валюта¶
text = preprocessor.process_currency("Цена: $150 или 15000₽")
# "Цена: сто пятьдесят долларов или пятнадцать тысяч рублей"
text = preprocessor.process_currency("€50.99")
# "пятьдесят евро девяносто девять центов"
Телефоны¶
text = preprocessor.process_phones("+7 (999) 123-45-67")
# "плюс семь девятьсот девяносто девять сто двадцать три сорок пять шестьдесят семь"
Аббревиатуры¶
preprocessor = TextPreprocessor(
abbreviations={
"США": "Соединённые Штаты Америки",
"РФ": "Российская Федерация",
"ИИ": "искусственный интеллект"
}
)
text = preprocessor.expand_abbreviations("ИИ развивается в США и РФ")
# "искусственный интеллект развивается в Соединённых Штатах Америки и Российской Федерации"
Полная обработка¶
text = preprocessor.process(
"В 2024 году ИИ в США достиг оборота $500 млрд. Контакт: +1-555-123-4567"
)
# "В две тысячи двадцать четвёртом году искусственный интеллект
# в Соединённых Штатах Америки достиг оборота пятьсот миллиардов долларов.
# Контакт: плюс один пятьсот пятьдесят пять сто двадцать три сорок пять шестьдесят семь"
Нормализация для TTS¶
# Удаление нечитаемых символов
text = preprocessor.normalize_for_tts("Привет!!! Как дела???")
# "Привет! Как дела?"
# Разбиение на предложения
sentences = preprocessor.split_sentences("Привет. Как дела? Отлично!")
# ["Привет.", "Как дела?", "Отлично!"]
API Reference¶
TextPreprocessor¶
class TextPreprocessor:
def __init__(
self,
language: str = "ru",
abbreviations: dict = None
)
def numbers_to_words(self, text: str) -> str
def process_dates(self, text: str) -> str
def process_currency(self, text: str) -> str
def process_phones(self, text: str) -> str
def expand_abbreviations(self, text: str) -> str
def normalize_for_tts(self, text: str) -> str
def split_sentences(self, text: str) -> List[str]
def process(
self,
text: str,
numbers: bool = True,
dates: bool = True,
currency: bool = True,
phones: bool = True,
abbreviations: bool = True,
normalize: bool = True
) -> str
Примеры из production¶
Autoshorts — подготовка скрипта для озвучки¶
class ScriptPreprocessor:
def __init__(self):
self.preprocessor = TextPreprocessor(
language="ru",
abbreviations={
"ИИ": "искусственный интеллект",
"IT": "ай ти",
"CEO": "генеральный директор",
"API": "эй пи ай"
}
)
def prepare_for_tts(self, script: str) -> str:
"""Подготовка скрипта для TTS."""
# Полная обработка
processed = self.preprocessor.process(script)
# Добавление пауз
processed = self.add_pauses(processed)
return processed
def add_pauses(self, text: str) -> str:
"""Добавление пауз в нужных местах."""
# Пауза после заголовков
text = re.sub(r'([.!?])\s*\n', r'\1 <break time="500ms"/> ', text)
# Пауза перед важными словами
important = ["важно", "внимание", "итак"]
for word in important:
text = text.replace(f" {word}", f' <break time="200ms"/> {word}')
return text
DedMoroz.ai — обработка имён¶
class GreetingPreprocessor:
def __init__(self):
self.preprocessor = TextPreprocessor()
def process_greeting(self, name: str, text: str) -> str:
"""Обработка поздравления с именем."""
# Обработка чисел и дат
text = self.preprocessor.process(text)
# Склонение имени (упрощённо)
text = text.replace("{name}", name)
text = text.replace("{name_dat}", self.to_dative(name))
return text
def to_dative(self, name: str) -> str:
"""Простое склонение в дательный падеж."""
if name.endswith("а"):
return name[:-1] + "е"
elif name.endswith("я"):
return name[:-1] + "е"
elif name.endswith(("й", "ь")):
return name[:-1] + "ю"
return name + "у"
# "Дорогому {name_dat}! В 2024 году желаю 1000 удач!"
# -> "Дорогому Саше! В две тысячи двадцать четвёртом году желаю тысячу удач!"