File size: 1,933 Bytes
5c8f9d2 |
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 43 44 45 46 47 48 49 |
"""
Modu艂 do ekstrakcji cech opartych na wyra偶eniach regularnych.
Odpowiedzialny za wykrywanie i zliczanie predefiniowanych wzorc贸w,
takich jak dane osobowe i wra偶liwe (PII), numery identyfikacyjne,
daty, adresy e-mail i inne specyficzne formaty.
"""
from typing import Dict
from ..constants import PII_REGEX_PATTERNS
def calculate_all_regex_features(text: str) -> Dict[str, int]:
"""
Przeszukuje tekst w poszukiwaniu wszystkich zdefiniowanych wzorc贸w i
zlicza ich wyst膮pienia, zachowuj膮c zgodno艣膰 z oryginalnym zestawem cech.
Args:
text (str): Tekst do analizy.
Returns:
Dict[str, int]: S艂ownik, w kt贸rym klucze to nazwy wzorc贸w (np. 'email_reg'),
a warto艣ci to liczba znalezionych dopasowa艅.
"""
if not text:
# Zwracamy s艂ownik z zerami dla wszystkich kluczy, kt贸re by powsta艂y.
# Usuwamy 'domestic_phone_reg', bo nie jest to cecha ko艅cowa.
original_keys = [k for k in PII_REGEX_PATTERNS.keys() if k != 'domestic_phone_reg']
return {name: 0 for name in original_keys}
features = {}
# Przechodzimy przez wszystkie prekompilowane wzorce
for name, pattern in PII_REGEX_PATTERNS.items():
try:
matches = pattern.findall(text)
features[name] = len(matches)
except Exception as e:
print(f"B艂膮d podczas przetwarzania wzorca '{name}': {e}")
features[name] = 0
# Odtworzenie oryginalnej logiki: suma telefon贸w jest przypisana do 'phone_reg'
# a 'domestic_phone_reg' nie jest cech膮 ko艅cow膮.
if 'phone_reg' in features and 'domestic_phone_reg' in features:
features['phone_reg'] += features['domestic_phone_reg']
# Usuwamy klucz pomocniczy, aby nie pojawi艂 si臋 w wynikach ko艅cowych.
del features['domestic_phone_reg']
return features |