fix: _scan_regex for docx, PERSON cyrillic-only, 101 entities found — v0.9/v1.0.192
Deploy contracts-flask / validate (push) Successful in 0s

This commit is contained in:
2026-06-29 17:19:24 +04:00
parent 07879328ed
commit 11d1398bad
4 changed files with 12 additions and 16 deletions
+5 -7
View File
@@ -6,7 +6,7 @@ DrHider — обфускация документов (двухпроходна
Согласованность: одна и та же сущность во всех файлах → одно и то же фиктивное значение. Согласованность: одна и та же сущность во всех файлах → одно и то же фиктивное значение.
""" """
DRHIDER_VERSION = "0.8" DRHIDER_VERSION = "0.9"
import io import io
import csv import csv
import re import re
@@ -44,10 +44,10 @@ COMPANY_PATTERN = re.compile(
re.IGNORECASE re.IGNORECASE
) )
# ФИО — Фамилия + инициалы # ФИО — Фамилия + инициалы или полное имя (только кириллица)
PERSON_PATTERN = re.compile( PERSON_PATTERN = re.compile(
r'\b[АA-Z][аa-z]+\s+[АA-Z]\.[АA-Z]\.', r'\b[А-Я][а-я]+\s+[А-Я]\.[А-Я]\.'
re.IGNORECASE r'|\b[А-Я][а-я]+\s+[А-Я][а-я]+\s+[А-Я][а-я]+'
) )
# ═══════════════════════════════════════════ # ═══════════════════════════════════════════
@@ -214,9 +214,7 @@ class TwoPassObfuscator:
all_texts[fname] = text all_texts[fname] = text
if doc is not None: if doc is not None:
all_docx[fname] = doc all_docx[fname] = doc
elif text == "[DOC binary — not parsed]": if text and text != "[DOC binary — not parsed]":
pass # .doc без изменений
else:
self._scan_regex(text) self._scan_regex(text)
if self._llm_client: if self._llm_client:
+5 -7
View File
@@ -6,7 +6,7 @@ DrHider — обфускация документов (двухпроходна
Согласованность: одна и та же сущность во всех файлах → одно и то же фиктивное значение. Согласованность: одна и та же сущность во всех файлах → одно и то же фиктивное значение.
""" """
DRHIDER_VERSION = "0.8" DRHIDER_VERSION = "0.9"
import io import io
import csv import csv
import re import re
@@ -44,10 +44,10 @@ COMPANY_PATTERN = re.compile(
re.IGNORECASE re.IGNORECASE
) )
# ФИО — Фамилия + инициалы # ФИО — Фамилия + инициалы или полное имя (только кириллица)
PERSON_PATTERN = re.compile( PERSON_PATTERN = re.compile(
r'\b[АA-Z][аa-z]+\s+[АA-Z]\.[АA-Z]\.', r'\b[А-Я][а-я]+\s+[А-Я]\.[А-Я]\.'
re.IGNORECASE r'|\b[А-Я][а-я]+\s+[А-Я][а-я]+\s+[А-Я][а-я]+'
) )
# ═══════════════════════════════════════════ # ═══════════════════════════════════════════
@@ -214,9 +214,7 @@ class TwoPassObfuscator:
all_texts[fname] = text all_texts[fname] = text
if doc is not None: if doc is not None:
all_docx[fname] = doc all_docx[fname] = doc
elif text == "[DOC binary — not parsed]": if text and text != "[DOC binary — not parsed]":
pass # .doc без изменений
else:
self._scan_regex(text) self._scan_regex(text)
if self._llm_client: if self._llm_client:
+1 -1
View File
@@ -64,7 +64,7 @@
<a href="/">Сверка договоров</a> <a href="/">Сверка договоров</a>
<span class="sep">|</span> <span class="sep">|</span>
<strong>DrHider</strong> <strong>DrHider</strong>
<span style="font-size:11px;color:var(--muted);">v0.8</span> <span style="font-size:11px;color:var(--muted);">v0.9</span>
</header> </header>
<main> <main>
+1 -1
View File
@@ -73,7 +73,7 @@
<body> <body>
<div class="topbar"> <div class="topbar">
<img src="/static/logo.svg" alt="Nubes"> <img src="/static/logo.svg" alt="Nubes">
<span class="title">Сверка договоров — LLM AI-driven Event Sourcing <span style="font-weight:400;color:var(--muted);font-size:12px;">v1.0.191-flask</span></span> <span class="title">Сверка договоров — LLM AI-driven Event Sourcing <span style="font-weight:400;color:var(--muted);font-size:12px;">v1.0.192-flask</span></span>
<div id="pipelineStepper" style="display:flex;gap:8px;font-size:11px;align-items:center;color:var(--muted);"> <div id="pipelineStepper" style="display:flex;gap:8px;font-size:11px;align-items:center;color:var(--muted);">
<span id="stepUpload">○ Загрузка</span><span></span> <span id="stepUpload">○ Загрузка</span><span></span>
<span id="stepClassify">○ Классификация</span><span></span> <span id="stepClassify">○ Классификация</span><span></span>