Сервис обезличивает DOCX через пайплайн:
extract → normalize/expand → replacement plan → replace → audit → second pass replace
LLM извлекает сущности чанками, группирует варианты и алиасы, а код программно заменяет найденные значения в DOCX. LLM не переписывает документ. Regex оставлен только как минимальный post-replacement safety net для аудита остаточных утечек.
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .envВ .env:
OPENAI_API_KEY=sk-...python3 -m anonymizer.cli \
--env .env \
--model gpt-4.1-mini \
--llm-mode openai \
anonymize \
--input path/to/input.docx \
--output outputs/anonymized.docxОтчет будет рядом: outputs/anonymized.report.json.
python3 -m anonymizer.cli \
--env .env \
--model gpt-4.1-mini \
--llm-mode openai \
eval \
--input fixtures/synthetic_obezlichivanie_fixture.docx \
--ground-truth fixtures/tokenized_obezlichivanie_fixture.docx \
--out-dir outputs/openai_evalpython3 -m anonymizer.cli \
--llm-mode fixture \
eval \
--input fixtures/synthetic_obezlichivanie_fixture.docx \
--ground-truth fixtures/tokenized_obezlichivanie_fixture.docx \
--out-dir outputs/fixture_evalОсновной gate: safety_pass=true и residual_leak_count=0.
Дополнительно считаются precision, recall, f1 по уникальным токенам и по occurrences. Для обезличивания приоритет — recall, не precision.
pytest -q