text-anonymize-legal-de/MODULE.de.md
flemming-it 3e018f528a
Some checks failed
CI / Linux x86_64 (Forgejo) (push) Failing after 1m20s
text.anonymize.legal-de 0.1.0: WASM bridge to the judge-ner host service
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.
2026-07-10 12:44:32 +02:00

3.6 KiB
Raw Blame History

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.01.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