"""Разбиение текста на предложения — для вставки увеличенных пауз. Пожилой человек воспринимает речь медленнее: между предложениями добавляем тишину (задаётся в провайдере как sentence_pause_sec). Минимальная защита от сокращений («т.д.», «т.п.» и т.п.). """ from __future__ import annotations import re from typing import List # Сокращения, где точка — не конец предложения (после точки может быть «д») _ABBREV = ["т.д", "т.п", "т.е", "т.к", "т.н", "др", "пр", "г", "ул", "кв", "руб", "мин"] _SENT_SPLIT = re.compile(r"(?<=[.!?…])\s+") def split_sentences(text: str) -> List[str]: """Разбить текст на предложения (простая эвристика, без NLP).""" text = text.strip() if not text: return [] # Временно прячем точки в сокращениях protected = text for abbr in _ABBREV: protected = protected.replace(f" {abbr}.", f" {abbr}\x01") parts = [p.strip() for p in _SENT_SPLIT.split(protected) if p.strip()] # Возвращаем точки на место for abbr in _ABBREV: parts = [p.replace(f"{abbr}\x01", f"{abbr}.") for p in parts] return parts def insert_pauses(sentences: List[str]) -> str: """Склеить предложения с «длинными» точками (… ) для естественных пауз в одном запросе.""" return "… ".join(sentences) if len(sentences) > 1 else (sentences[0] if sentences else "")