NER anonymization of German legal texts (plain text + DOCX) via the JuraNER model by Harshil Darji (MIT). The transformer model runs in the judge-ner host service; this module forwards documents over loopback HTTP and maps responses onto the capability contract.
3.6 KiB
text.anonymize.legal-de
NER-basierte Anonymisierung deutscher juristischer Texte (JuraNER).
Brückenmodul: das Transformers-Modell läuft im judge-ner
Host-Service (fai_judge/host_services/judge-ner/); dieses
WASM-Modul reicht das Dokument per Loopback-HTTP weiter und bildet
die Antwort auf den Capability-Contract ab.
Capability
text.anonymize.legal-de@0.1.0
Eingaben
| Name | Typ | Beschreibung |
|---|---|---|
request |
json | {"mode":"text"|"docx","options":{...}} — siehe unten. |
document |
bytes | UTF-8-Klartext (mode=text) oder eine DOCX-Datei (mode=docx). |
endpoint |
text | Optionale judge-ner-Basis-URL. Default http://127.0.0.1:8756. |
request.options (alle optional)
| Schlüssel | Default | Bedeutung |
|---|---|---|
importance_levels |
["High"] |
Zu anonymisierende Entitätsklassen (High/Mid/Low). |
confidence_threshold |
0.8 |
Minimale NER-Konfidenz (0.0–1.0). |
manual_phrases |
[] |
Zusätzlich zu schwärzende Phrasen (Label RED). |
maintain_consistency |
true |
Gleiche Oberflächenform erhält überall dasselbe ⟦TYPE#⟧-Token. |
remove_rubrum |
false |
Rubrum-Block erkennen und durch Platzhalter ersetzen. |
Ausgaben
| Name | Typ | Beschreibung |
|---|---|---|
result |
json | {"replacements": [...], "text": "..."} — text (der anonymisierte Text) nur bei mode=text. statistics und rubrum werden vom Service durchgereicht, wenn vorhanden. |
document |
bytes | Das anonymisierte Dokument: UTF-8-Text (text/plain) bei mode=text, das umgeschriebene DOCX bei mode=docx. |
Jeder replacements-Eintrag:
{text, label, label_description, start, end, score, line_number, anonymized}; im DOCX-Modus zusätzlich run_id_start,
char_in_start, run_id_end, char_in_end zur Adressierung der
exakten w:t-Knoten des Originaldokuments. Einträge mit
"anonymized": null wurden erkannt, aber nicht ersetzt
(Importance-Level nicht ausgewählt).
Berechtigungen & benötigte Services
permissions:
- "net: localhost"
- "net: 127.0.0.1"
requires_services:
- judge-ner
Der Hub führt Steps mit diesem Modul nur aus, wenn der Operator einen
judge-ner-Service-Endpunkt in ~/.chain/config.yaml (services:)
deklariert hat. Beachte: Der erste judge-ner-Start lädt das
JuraNER-Modell von HuggingFace — bis dahin antwortet der Service mit
503 und dieses Modul schlägt mit einer klaren „NER model not
available"-Meldung fehl.
Einrichtung des judge-ner-Host-Services
Das NER-Modell (JuraNER von Harshil Darji, MIT — transformers + torch) kann nicht in der WASM-Sandbox laufen; es läuft als Host-Service.
# 1. Service starten (Docker; ~1 GB Modell-Download beim ersten Start,
# persistiert im Named Volume — spätere Starts sind offline-fähig)
docker run -d --name judge-ner \
-p 8756:8756 \
-v judge-ner-models:/models \
judge-ner
# 2. Beim Hub registrieren (~/.chain/config.yaml)
# services:
# judge-ner:
# endpoint: http://127.0.0.1:8756
# health_check:
# url: http://127.0.0.1:8756/health
# 3. Prüfen
curl -s localhost:8756/health # {"status":"ok","model_loaded":true}
chain service status judge-ner
Quellcode und Image-Build: fai_judge/host_services/judge-ner/
(docker build -t judge-ner .).
Fehler
- Fehlerhafte
request, Nicht-UTF-8-Textdokument oder 4xx vom Service →invalid input: ... - Service nicht erreichbar, 5xx, fehlerhafte Service-Antwort →
internal error: judge-ner at <url> ...
Build
cargo test
cargo build --release --target wasm32-wasip2