File size: 1,984 Bytes
695fb87
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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))