117 lines
7.2 KiB
Python
117 lines
7.2 KiB
Python
"""
|
||
Константы и словари для 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 = [
|
||
"Ленина", "Мира", "Пушкина", "Гагарина", "Советская",
|
||
"Кирова", "Октябрьская", "Молодёжная", "Садовая", "Центральная",
|
||
"Школьная", "Лесная", "Полевая", "Строителей", "Набережная",
|
||
"Парковая", "Солнечная", "Зелёная", "Юбилейная", "Весенняя",
|
||
]
|