app/tests/test_detection_evaluation.py
Rama main · réplica de lectura del repositorio original.
from __future__ import annotations
import json
from pathlib import Path
from app.privacy.detection import DetectorEnsemble
from app.privacy.models import DetectorProfile
from evaluation.evaluate_detection import evaluate, load_corpus
CORPUS_ROOT = Path(__file__).parents[2] / "evaluation" / "corpus"
def test_versioned_corpus_emits_reproducible_per_entity_metrics() -> None:
cases = load_corpus(CORPUS_ROOT)
assert {case.category for case in cases} == {"en", "evasions", "negatives", "ru"}
assert len(cases) >= 24
report = evaluate(DetectorEnsemble(profile=DetectorProfile.STRICT), cases)
serialized = json.loads(report.to_json())
assert report.case_count == len(cases)
assert serialized["profile"] == "strict"
for entity_type in {"EMAIL", "INN", "SNILS", "PASSPORT", "IBAN", "JWT"}:
metric = report.per_entity[entity_type]
assert metric.recall == 1.0
assert metric.precision >= 0.8