Initial commit: VoIdeaAI - voice-first AI idea assistant

This commit is contained in:
2026-05-13 12:51:42 +03:00
commit 688d043dad
421 changed files with 47915 additions and 0 deletions
+89
View File
@@ -0,0 +1,89 @@
"""Server-side punctuation restoration for voice transcripts.
Uses simple rule-based approach (no external model dependency).
Can be replaced with ML-based model (e.g., silero, yandex punctuator) later.
"""
from __future__ import annotations
import re
# Words that typically start a new sentence
_SENTENCE_STARTERS: set[str] = {
"а", "но", "и", "да", "вот", "так", "это", "тот", "кто", "что",
"как", "когда", "где", "почему", "зачем", "сколько", "чей",
"во-первых", "во-вторых", "наконец", "однако", "причем", "притом",
"кстати", "например", "между", "тем", "впрочем", "значит",
"итак", "следовательно", "кроме", "того", "помимо",
"я", "ты", "он", "она", "оно", "мы", "вы", "они",
"этот", "эта", "это", "эти", "мой", "твой", "наш", "ваш",
"сегодня", "завтра", "вчера", "сейчас", "потом", "после",
"сначала", "затем", "далее", "теперь", "тут", "там", "здесь",
}
# Interrogative words
_QUESTION_WORDS: set[str] = {
"кто", "что", "какой", "какая", "какое", "какие", "чей", "чья", "чьё", "чьи",
"сколько", "когда", "где", "куда", "откуда", "почему", "зачем", "как",
"неужели", "разве", "ли",
}
# Exclamation words
_EXCLAMATION_WORDS: set[str] = {
"ах", "ох", "ух", "ой", "эй", "ура", "браво", "караул",
"здорово", "отлично", "прекрасно", "замечательно", "классно",
"ужасно", "кошмар", "боже",
}
def restore_punctuation(text: str) -> str:
"""Add basic punctuation and capitalization to raw transcribed text.
Works on Russian text from Whisper/STT output which typically
comes without punctuation.
"""
if not text or not text.strip():
return text
text = text.strip()
# Split into clauses by common separators
clauses = re.split(r"(?<=[^.!?])[;,]\s+", text)
formatted: list[str] = []
for clause in clauses:
clause = clause.strip()
if not clause:
continue
# Ensure first word is capitalized
words = clause.split()
if words:
words[0] = words[0].capitalize()
# Detect sentence type and add punctuation
first_word = words[0].lower().rstrip(",.!?")
# Remove any trailing punctuation
last_word = words[-1].rstrip(",.!?") if words else ""
if first_word in _EXCLAMATION_WORDS:
punctuation = "!"
elif first_word in _QUESTION_WORDS:
punctuation = "?"
elif last_word in _QUESTION_WORDS:
punctuation = "?"
else:
punctuation = "."
formatted.append(" ".join(words) + punctuation)
result = " ".join(formatted)
# Clean up common issues
result = re.sub(r"\s+", " ", result)
result = re.sub(r"\s*([.!?,;:])\s*", r"\1 ", result)
result = re.sub(r"\s+\.", ".", result)
result = result.strip()
return result