Ani-Voice-API / normalizer.py
beleata74's picture
Initial release of Ani-Voice-API (created by Ani-Antigravity)
695fb87 verified
Raw
History Blame Contribute Delete
1.98 kB
import re
from bg_text_normalizer import normalize_text as bg_norm
# Допълнителни специфични замени, които bg_text_normalizer изпуска
EXTRA_ABBREVIATIONS = {
r"\bм²\b": "квадратен метър",
r"\bкв\.м\.\b": "квадратен метър",
r"\bт\.е\.\b": "тоест",
}
def normalize_text(text: str) -> str:
"""
Нормализира текста, използвайки bg-text-normalizer + наши специфични правила.
"""
# 0.5 Предварителна обработка на десетични дроби: заменяме точката със запетая
# bg-text-normalizer бърка '1.4' с '1 април'. За да го чете като дроб, му трябва запетая '1,4'.
text = re.sub(r'(\d)\.(\d)', r'\1,\2', text)
# 1. Първо прилагаме библиотеката bg_text_normalizer
text = bg_norm(text)
# 2. Оправяме точките след съкращения като "лв." и "гр.", които библиотеката е превърнала в "лева."
text = text.replace("лева.", "лева")
text = text.replace("стотинки.", "стотинки")
# 3. Прилагаме нашите допълнителни правила
for pattern, replacement in EXTRA_ABBREVIATIONS.items():
text = re.sub(pattern, replacement, text, flags=re.IGNORECASE)
# Допълнително хващаме м² (без \b, защото ² не е дума)
text = text.replace("м²", "квадратен метър")
# Махане на двойни интервали
text = re.sub(r"\s+", " ", text).strip()
return text
if __name__ == "__main__":
test_text = "Цената е 1500 лв. за м² в кв. Лозенец."
print("Original:", test_text)
print("Normalized:", normalize_text(test_text))