Files
drhider/drhider/config.py
T

117 lines
7.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Константы и словари для DrHider.
Содержит:
- ENTITY_PATTERNS — regex-паттерны для обнаружения сущностей
- COMPANY_PATTERN — паттерн для обнаружения названий компаний
- PERSON_PATTERN — паттерн для обнаружения ФИО
- Словари русских имён, городов, улиц
- Список фиктивных доменов для email
"""
import re
# ═══════════════════════════════════════════════════════════════════════════
# Regex-паттерны для обнаружения сущностей в тексте документов
# ═══════════════════════════════════════════════════════════════════════════
ENTITY_PATTERNS = {
"phone": r'(?<!\d)(?:\+7|8)[\s\-]?\(?\d{3}\)?[\s\-]?\d{3}[\s\-]?\d{2}[\s\-]?\d{2}(?!\d)',
"email": r'\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}\b',
# 12-значный ИНН ДО 10-значного — иначе 12-значный матчится как 10-значный
"inn_fl": r'ИНН\s*\d{12}',
"inn_ul": r'ИНН\s*\d{10}',
"ogrn": r'ОГРН\s*\d{13}',
"kpp": r'КПП\s*\d{9}',
"bik": r'БИК\s*\d{9}',
"rs": r'(?:р/с|расч[её]тный\s*сч[её]т)\s*\d{20}',
"ks": r'(?:к/с|кор/сч|корр?[еи]?спондентский\s*сч[её]т)\s*\d{20}',
"passport": r'(?:паспорт|серия\s+номер)[\s:№]*\d{2}\s*\d{2}\s*\d{6,7}',
}
# ═══════════════════════════════════════════════════════════════════════════
# Паттерны для LLM-независимого обнаружения (regex)
# ═══════════════════════════════════════════════════════════════════════════
# Названия компаний: ООО/ЗАО/АО/ПАО/ИП/ТОО + название в кавычках или без
COMPANY_PATTERN = re.compile(
r'(?:ООО|ЗАО|ОАО|АО|ПАО|ИП|ТОО)\s+(?:«[^»]+»|"[^"]+"|\u201c[^\u201d]+\u201d|[А-ЯA-Z][\w\-\.]{2,40})',
re.IGNORECASE,
)
# ФИО: Фамилия + инициалы (Иванов И.И.) или полное имя (Иванов Иван Иванович)
PERSON_PATTERN = re.compile(
r'\b[А-Я][а-я]+\s+[А-Я]\.[А-Я]\.'
r'|\b[А-Я][а-я]+\s+[А-Я][а-я]+\s+[А-Я][а-я]+',
)
# ═══════════════════════════════════════════════════════════════════════════
# Словари для генерации фиктивных значений
# ═══════════════════════════════════════════════════════════════════════════
# Русские фамилии (20 самых распространённых)
RU_SURNAMES = [
"Иванов", "Смирнов", "Кузнецов", "Попов", "Васильев", "Петров",
"Соколов", "Михайлов", "Новиков", "Фёдоров", "Морозов", "Волков",
"Алексеев", "Лебедев", "Семёнов", "Егоров", "Павлов", "Козлов",
"Степанов", "Николаев",
]
# Русские мужские имена
RU_NAMES = [
"Александр", "Дмитрий", "Сергей", "Андрей", "Алексей", "Максим",
"Евгений", "Иван", "Михаил", "Николай", "Владимир", "Павел",
"Виктор", "Олег",
]
# Русские отчества
RU_PATRONYMICS = [
"Александрович", "Дмитриевич", "Сергеевич", "Андреевич",
"Алексеевич", "Иванович", "Михайлович", "Николаевич", "Владимирович",
"Павлович", "Викторович", "Олегович", "Евгеньевич", "Максимович",
]
# Города России (15 крупнейших)
RU_CITIES = [
"Москва", "Санкт-Петербург", "Новосибирск", "Екатеринбург",
"Казань", "Нижний Новгород", "Челябинск", "Самара", "Омск",
"Ростов-на-Дону", "Уфа", "Красноярск", "Воронеж", "Пермь", "Волгоград",
]
# Названия улиц
RU_STREETS = [
"Ленина", "Мира", "Пушкина", "Гагарина", "Советская",
"Кирова", "Октябрьская", "Молодёжная", "Садовая", "Центральная",
]
# Фиктивные домены для генерации email
FAKE_DOMAINS = ["example.ru", "mail.test", "company.local", "org.example.ru"]
# ═══════════════════════════════════════════════════════════════════════════
# Пулы для гибридных токенов (шаблон + номер)
# ═══════════════════════════════════════════════════════════════════════════
# Существительные для названий компаний (20)
COMPANY_NOUNS = [
"Технология", "Прогресс", "Гарант", "Стандарт", "Импульс",
"Вектор", "Сфера", "Альянс", "Синтез", "Меридиан",
"Спектр", "Формат", "Модуль", "Ресурс", "Платформа",
"Система", "Комплекс", "Проект", "Решение", "Сервис",
]
# Города для адресов (20)
CITY_POOL = [
"Москва", "Санкт-Петербург", "Новосибирск", "Екатеринбург",
"Казань", "Нижний_Новгород", "Челябинск", "Самара", "Омск",
"Ростов-на-Дону", "Уфа", "Красноярск", "Воронеж", "Пермь",
"Волгоград", "Краснодар", "Саратов", "Тюмень", "Иркутск", "Хабаровск",
]
# Улицы для адресов (20)
STREET_POOL = [
"Ленина", "Мира", "Пушкина", "Гагарина", "Советская",
"Кирова", "Октябрьская", "Молодёжная", "Садовая", "Центральная",
"Школьная", "Лесная", "Полевая", "Строителей", "Набережная",
"Парковая", "Солнечная", "Зелёная", "Юбилейная", "Весенняя",
]