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))