Initial deployable Flask application

This commit is contained in:
Repinoid
2026-10-21 12:00:44 +03:00
commit 2450c0c9a1
48 changed files with 6951 additions and 0 deletions
+116
View File
@@ -0,0 +1,116 @@
"""
Константы и словари для 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\xa0]+[А-Я]\.[А-Я]\.'
r'|\b[А-Я][а-я]+[\s\xa0]+[А-Я][а-я]+[\s\xa0]+[А-Я][а-я]+',
)
# ═══════════════════════════════════════════════════════════════════════════
# Словари для генерации фиктивных значений
# ═══════════════════════════════════════════════════════════════════════════
# Русские фамилии (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 = [
"Ленина", "Мира", "Пушкина", "Гагарина", "Советская",
"Кирова", "Октябрьская", "Молодёжная", "Садовая", "Центральная",
"Школьная", "Лесная", "Полевая", "Строителей", "Набережная",
"Парковая", "Солнечная", "Зелёная", "Юбилейная", "Весенняя",
]