fix: word-boundary voor alle keys + memory-validator + placeholder-collapse#4
Open
Treason8579 wants to merge 1 commit into
Open
fix: word-boundary voor alle keys + memory-validator + placeholder-collapse#4Treason8579 wants to merge 1 commit into
Treason8579 wants to merge 1 commit into
Conversation
…llapse
replacer.py:
- Word-boundary (\b) wordt nu toegepast op elke key die begint én eindigt
op een woord-karakter, ongeacht lengte. Voorheen alleen bij keys ≤4
tekens — daardoor matchte 'beveiliging' overal binnen
'informatiebeveiliging' en 'Leiden' binnen 'begeleiden'.
- Post-processing: 'de de X' / 'het het X' / 'een een X' collapst naar
één lidwoord. Fixt dubbele lidwoorden als memory-vervanging al een
lidwoord bevat ('de CISO') en de brontekst er ook een heeft.
- Post-processing: lijsten van 2+ identieke VOORBEELDGEMEENTE-tokens
(komma, 'en', 'of' gescheiden) collapsen naar 'de betrokken gemeenten'.
memory.py:
- Nieuwe valideer_entry(): weigert no-ops (origineel == vervanging),
mojibake (U+FFFD en dubbele-UTF8-markers), en losse generieke
lowercase-nouns uit BLOCKLIST_GENERIEKE_NOUNS (beveiliging, directeur,
griffie, college, etc.).
- remember() roept validator aan voor nieuwe entries; bestaande entries
(update-pad) worden ongemoeid gelaten.
anonimizer.py:
- Toont waarschuwing wanneer een LLM-bevestigde entry wordt afgewezen
door de memory-validator, met reden.
detector.py (prompt):
- Expliciet: geen no-op suggesties. Als vervanging == origineel,
detecteer niet.
- Expliciet: generieke functietitels mét lidwoord ('de directeur'),
interne artikelverwijzingen, en publieke normen (NEN/NTA/ISO) laten
staan.
Tests: 110 → 116 (7 nieuwe replacer-tests, 13 nieuwe memory-tests).
Alle 116 groen.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Samenvatting
Drie structurele bugs opgelost die de output van de anonimizer onleesbaar maakten op realistische testdata.
1. Word-boundary voor alle keys (
replacer.py)Voorheen kregen alleen keys ≤4 tekens `\b`-wrapping. Daardoor matchte `beveiliging` overal als substring binnen `informatiebeveiliging`, en `Leiden` binnen `begeleiden`. Nu krijgt elke key die begint én eindigt op een woord-karakter de boundary — lengte is niet langer beslissend.
2. Dubbele lidwoorden collapsen (
replacer.py)Memory-vervangingen die zelf een lidwoord bevatten (`CISO → de Chief Information Security Officer`) produceerden `de de Chief Information Security Officer` als de brontekst al een lidwoord had. Post-processing stap collapst `de de / het het / een een` → één lidwoord, case-insensitive, met behoud van de oorspronkelijke hoofdletter.
3. Placeholder-lijsten collapsen (
replacer.py)`VOORBEELDGEMEENTE, VOORBEELDGEMEENTE, VOORBEELDGEMEENTE en VOORBEELDGEMEENTE` werd produced wanneer meerdere gemeentenamen op een rij stonden — informatieverlies zonder meerwaarde. Post-processing collapst 2+ opeenvolgende `VOORBEELDGEMEENTE`-tokens (komma/`en`/`of` gescheiden) naar `de betrokken gemeenten`.
4. Memory-validator (
memory.py)Nieuwe `valideer_entry()` weigert drie soorten rotzooi bij `remember()`:
Bestaande entries (update-pad) blijven ongemoeid om niet per ongeluk historische keuzes te wissen. `anonimizer.py` toont nu een waarschuwing met reden wanneer een entry is afgewezen.
5. Detector-prompt (
detector.py)Expliciet: geen no-op suggesties; generieke functietitels mét lidwoord (`de directeur`), interne artikelverwijzingen (`artikel 3.7`) en publieke normen (NEN/NTA/ISO) moeten blijven staan.
Tests
Impact op een realistische testset (6 docs, ~150 kB tekst)
Test plan