Spaces:
Sleeping
Sleeping
Harden Dutch legal reference taxonomy batch patterns
Browse files- dutch_recognizers.py +68 -17
dutch_recognizers.py
CHANGED
|
@@ -1,5 +1,8 @@
|
|
| 1 |
"""Dutch / European + Dutch legal recognizers for SolidPrivacy Scrub.
|
| 2 |
|
|
|
|
|
|
|
|
|
|
| 3 |
Phase 1-3 v8 update:
|
| 4 |
- extends the taxonomy strategy with vehicle/object reference categories;
|
| 5 |
- broadens context-bound reference values to include compact values such as
|
|
@@ -303,27 +306,39 @@ class RegexCaptureRecognizer(EntityRecognizer):
|
|
| 303 |
return results
|
| 304 |
|
| 305 |
|
| 306 |
-
|
| 307 |
-
r"
|
| 308 |
-
#
|
| 309 |
-
|
| 310 |
-
r"(?=[A-Z0-9][A-Z0-9./_-]{4,49}\b)(?=[A-Z0-9./_-]*[A-Z])(?=[A-Z0-9./_-]*\d)"
|
| 311 |
-
r"[A-Z0-9]+(?:[./_-][A-Z0-9]+){1,8}"
|
| 312 |
r"|"
|
| 313 |
-
#
|
| 314 |
-
|
| 315 |
-
|
| 316 |
-
#
|
| 317 |
-
r"
|
| 318 |
r"|"
|
| 319 |
-
#
|
|
|
|
|
|
|
|
|
|
| 320 |
r"\d{3}\.\d{3}\.\d{3}/\d{2}\s+[A-Z]{1,5}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 321 |
r"|"
|
| 322 |
-
#
|
| 323 |
-
r"
|
| 324 |
-
r")
|
| 325 |
)
|
| 326 |
|
|
|
|
|
|
|
| 327 |
|
| 328 |
def _keyword_to_regex(keyword: str) -> str:
|
| 329 |
"""Turn a taxonomy keyword into a forgiving but bounded regex."""
|
|
@@ -628,7 +643,7 @@ def get_dutch_recognizers(supported_language: str = "en") -> List[EntityRecogniz
|
|
| 628 |
patterns=[
|
| 629 |
(
|
| 630 |
"kvk_labeled_value",
|
| 631 |
-
r"\b(?:kvk(?:[-\s]?nummer|\s?nr\.)?|kamer\s+van\s+koophandel)\s*(?:is|:|#|-)?\s*(?P<value>\d{8})\b",
|
| 632 |
),
|
| 633 |
],
|
| 634 |
score=0.88,
|
|
@@ -754,7 +769,7 @@ def get_dutch_recognizers(supported_language: str = "en") -> List[EntityRecogniz
|
|
| 754 |
patterns=[
|
| 755 |
(
|
| 756 |
"legal_case_labeled_value",
|
| 757 |
-
|
| 758 |
),
|
| 759 |
],
|
| 760 |
score=0.86,
|
|
@@ -852,6 +867,42 @@ def get_dutch_recognizers(supported_language: str = "en") -> List[EntityRecogniz
|
|
| 852 |
context=["schadenummer", "claimnummer", "polisnummer", "verzekeraar"],
|
| 853 |
supported_language=supported_language,
|
| 854 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 855 |
RegexCaptureRecognizer(
|
| 856 |
entity="NL_LEGAL_PARTY_NAME",
|
| 857 |
patterns=[
|
|
|
|
| 1 |
"""Dutch / European + Dutch legal recognizers for SolidPrivacy Scrub.
|
| 2 |
|
| 3 |
+
Phase 1-3 v8.1 update:
|
| 4 |
+
- adds category-level handling for broader Dutch court case numbers, incident numbers, claim references, other contextual references and KVK label variants;
|
| 5 |
+
|
| 6 |
Phase 1-3 v8 update:
|
| 7 |
- extends the taxonomy strategy with vehicle/object reference categories;
|
| 8 |
- broadens context-bound reference values to include compact values such as
|
|
|
|
| 306 |
return results
|
| 307 |
|
| 308 |
|
| 309 |
+
CASE_NUMBER_VALUE_REGEX = (
|
| 310 |
+
r"(?:"
|
| 311 |
+
# Civil/family court references: C/13/701234 / FA RK 26-321.
|
| 312 |
+
r"C/\d{2}/\d{5,6}\s*/\s*(?:[A-Z]{1,5}\s+){1,4}\d{2}[-/]\d{1,6}"
|
|
|
|
|
|
|
| 313 |
r"|"
|
| 314 |
+
# Numeric court plus procedure block: 10598721 / UE VERZ 26-441.
|
| 315 |
+
r"\d{6,9}\s*/\s*(?:[A-Z]{1,5}\s+){1,4}\d{2}[-/]\d{1,6}"
|
| 316 |
+
r"|"
|
| 317 |
+
# Administrative law: ARN 26/4412.
|
| 318 |
+
r"[A-Z]{2,5}\s+\d{2}/\d{1,6}"
|
| 319 |
r"|"
|
| 320 |
+
# Immigration: NL26.12345.
|
| 321 |
+
r"NL\d{2}\.\d{3,8}"
|
| 322 |
+
r"|"
|
| 323 |
+
# Enterprise chamber / appellate style: 200.345.678/01 OK.
|
| 324 |
r"\d{3}\.\d{3}\.\d{3}/\d{2}\s+[A-Z]{1,5}"
|
| 325 |
+
r")"
|
| 326 |
+
)
|
| 327 |
+
|
| 328 |
+
GENERIC_REFERENCE_VALUE_REGEX = (
|
| 329 |
+
r"(?:"
|
| 330 |
+
# Common uppercase/legal admin codes: CL-FAM-55201, FACT-2026-4481,
|
| 331 |
+
# WR-KLANT-2026-7712, HRZ-SAM-2026-04, GEM-HLM-2026-2210.
|
| 332 |
+
r"(?=[A-Z0-9][A-Z0-9./_-]{4,59}\b)(?=[A-Z0-9./_-]*[A-Z])(?=[A-Z0-9./_-]*\d)"
|
| 333 |
+
r"[A-Z0-9]+(?:[./_-][A-Z0-9]+){1,10}"
|
| 334 |
r"|"
|
| 335 |
+
# Compact context-bound reference values such as XX123X after \"kenteken\".
|
| 336 |
+
r"(?=[A-Z0-9]{5,12}\b)(?=[A-Z0-9]*[A-Z])(?=[A-Z0-9]*\d)[A-Z0-9]{5,12}"
|
| 337 |
+
r")"
|
| 338 |
)
|
| 339 |
|
| 340 |
+
REFERENCE_VALUE_REGEX = re.compile(r"\b(?:" + CASE_NUMBER_VALUE_REGEX + r"|" + GENERIC_REFERENCE_VALUE_REGEX + r")\b")
|
| 341 |
+
|
| 342 |
|
| 343 |
def _keyword_to_regex(keyword: str) -> str:
|
| 344 |
"""Turn a taxonomy keyword into a forgiving but bounded regex."""
|
|
|
|
| 643 |
patterns=[
|
| 644 |
(
|
| 645 |
"kvk_labeled_value",
|
| 646 |
+
r"\b(?:kvk(?:[-\s]?nummer|\s?nr\.)?|kamer\s+van\s+koophandel)(?:[ \t]+(?:vennootschap|bedrijf|organisatie|rechtspersoon|vereniging|stichting))?\s*(?:is|:|#|-)?\s*(?P<value>\d{8})\b",
|
| 647 |
),
|
| 648 |
],
|
| 649 |
score=0.88,
|
|
|
|
| 769 |
patterns=[
|
| 770 |
(
|
| 771 |
"legal_case_labeled_value",
|
| 772 |
+
rf"\b(?:zaaknummer|zaaknr\.?|zaak\s?nr\.?|zaak-/rolnummer|zaak- en rolnummer|rol-/zaaknummer)\s*(?:is|:|#|-)?\s*(?P<value>{CASE_NUMBER_VALUE_REGEX}|{GENERIC_REFERENCE_VALUE_REGEX})\b",
|
| 773 |
),
|
| 774 |
],
|
| 775 |
score=0.86,
|
|
|
|
| 867 |
context=["schadenummer", "claimnummer", "polisnummer", "verzekeraar"],
|
| 868 |
supported_language=supported_language,
|
| 869 |
),
|
| 870 |
+
RegexCaptureRecognizer(
|
| 871 |
+
entity="NL_INCIDENT_NUMBER",
|
| 872 |
+
patterns=[
|
| 873 |
+
(
|
| 874 |
+
"incident_labeled_value",
|
| 875 |
+
rf"\b(?:intern[ \t]+incidentnummer|incidentnummer|incidentnr\.?|incident[ \t]+nr\.?)\s*(?:is|:|#|-)?\s*(?P<value>{GENERIC_REFERENCE_VALUE_REGEX})\b",
|
| 876 |
+
),
|
| 877 |
+
],
|
| 878 |
+
score=0.91,
|
| 879 |
+
context=["incidentnummer", "incident", "intern incident", "melding"],
|
| 880 |
+
supported_language=supported_language,
|
| 881 |
+
),
|
| 882 |
+
RegexCaptureRecognizer(
|
| 883 |
+
entity="NL_CLAIM_NUMBER",
|
| 884 |
+
patterns=[
|
| 885 |
+
(
|
| 886 |
+
"claim_labeled_value",
|
| 887 |
+
rf"\b(?:claimreferentie(?:[ \t]+verzekeraar)?|claim[ \t]+referentie|claimnummer|claimnr\.?)\s*(?:is|:|#|-)?\s*(?P<value>{GENERIC_REFERENCE_VALUE_REGEX})\b",
|
| 888 |
+
),
|
| 889 |
+
],
|
| 890 |
+
score=0.92,
|
| 891 |
+
context=["claimreferentie", "claimnummer", "verzekeraar", "schade"],
|
| 892 |
+
supported_language=supported_language,
|
| 893 |
+
),
|
| 894 |
+
RegexCaptureRecognizer(
|
| 895 |
+
entity="NL_OTHER_REFERENCE",
|
| 896 |
+
patterns=[
|
| 897 |
+
(
|
| 898 |
+
"other_reference_labeled_value",
|
| 899 |
+
rf"\b(?:camerabeeld[ \t]+met[ \t]+referentie|camerareferentie|camera[ \t]+referentie|beeldreferentie|videoreferentie|reparatienummer|reparatie[ \t]+nummer|meldingsnummer|meldingnummer|rapportnummer|verslagreferentie)\s*(?:is|:|#|-)?\s*(?P<value>{GENERIC_REFERENCE_VALUE_REGEX})\b",
|
| 900 |
+
),
|
| 901 |
+
],
|
| 902 |
+
score=0.86,
|
| 903 |
+
context=["camerabeeld", "camera", "reparatienummer", "melding", "rapport", "verslag"],
|
| 904 |
+
supported_language=supported_language,
|
| 905 |
+
),
|
| 906 |
RegexCaptureRecognizer(
|
| 907 |
entity="NL_LEGAL_PARTY_NAME",
|
| 908 |
patterns=[
|