scrub / tests /test_dutch_recognizers_integration.py
solidprivacy-nl
Add Dutch recognizer integration tests
4334fb3
Raw
History Blame Contribute Delete
3.12 kB
from dutch_recognizers import get_dutch_recognizers, get_dutch_entity_names
from test_cases.legal_regression_cases import EXPECTED_CANDIDATE_TYPES
INTEGRATION_TEXT = """
Zaaknummer: 10598721 / UE VERZ 26-441.
De wederpartij verwees naar intern incidentnummer INC-2026-0912.
In het dossier wordt daarnaast verwezen naar camerabeeld met referentie CAM-MAAS-2026-0518.
Claimreferentie verzekeraar: CLM-2026-112233.
De verhuurder heeft de melding geregistreerd onder reparatienummer REP-2026-4410.
Afdeling bestuursrecht
Zaaknummer: ARN 26/4412
Afdeling vreemdelingenzaken
Zaaknummer: NL26.12345
De gemeente gebruikt zaaknummer GEM-HLM-2026-2210.
Zaaknummer: 200.345.678/01 OK
KvK-nummer vennootschap: 76543210
"""
def _run_lightweight_recognizers(text: str):
entities = get_dutch_entity_names(include_legal=True)
results = []
for recognizer in get_dutch_recognizers(supported_language="en"):
if hasattr(recognizer, "load"):
recognizer.load()
results.extend(recognizer.analyze(text, entities=entities, nlp_artifacts=None))
return results
def _value_map(results, text: str):
mapped = {}
for result in results:
value = text[result.start : result.end]
mapped.setdefault(value, set()).add(result.entity_type)
return mapped
def test_dutch_recognizers_detect_v11_1_legal_reference_values():
results = _run_lightweight_recognizers(INTEGRATION_TEXT)
by_value = _value_map(results, INTEGRATION_TEXT)
expected_values = {
"10598721 / UE VERZ 26-441",
"INC-2026-0912",
"CAM-MAAS-2026-0518",
"CLM-2026-112233",
"REP-2026-4410",
"ARN 26/4412",
"NL26.12345",
"GEM-HLM-2026-2210",
"200.345.678/01 OK",
"76543210",
}
missing = expected_values - set(by_value)
assert not missing, f"Recognizer integration missed values: {sorted(missing)}"
def test_dutch_recognizers_assign_v11_1_reference_entity_types():
results = _run_lightweight_recognizers(INTEGRATION_TEXT)
by_value = _value_map(results, INTEGRATION_TEXT)
expected_subset = {
value: entity_type
for value, entity_type in EXPECTED_CANDIDATE_TYPES.items()
if value in INTEGRATION_TEXT and value != "XX123X" and value != "WR-KLANT-2026-7712" and value != "DOSS/2026/1189"
}
mismatches = {
value: {"expected": expected_type, "actual": sorted(by_value.get(value, set()))}
for value, expected_type in expected_subset.items()
if expected_type not in by_value.get(value, set())
}
assert not mismatches, f"Recognizer integration type mismatches: {mismatches}"
def test_dutch_recognizers_return_value_only_not_context_label():
results = _run_lightweight_recognizers(INTEGRATION_TEXT)
values = {INTEGRATION_TEXT[result.start : result.end] for result in results}
assert "Zaaknummer: 10598721 / UE VERZ 26-441" not in values
assert "intern incidentnummer INC-2026-0912" not in values
assert "Claimreferentie verzekeraar: CLM-2026-112233" not in values
assert "KvK-nummer vennootschap: 76543210" not in values