Inleiding
Health Noord Anonimisatie-tool is een Windows-desktopprogramma voor het lokaal anonimiseren van tekstbestanden. De tool gebruikt Deduce [1], [2]; zie de Referenties aan het eind van deze handleiding, voor entiteitsherkenning en kan optionele eigen lijsten toepassen op namen en locaties. Een whitelist kan geselecteerde medische of domeintermen bewust ongewijzigd laten.
De tool is bedoeld voor medewerkers van VVT-organisaties, onderzoekers, data-analisten en andere professionals die vrije tekst uit elektronische cliëntdossiers (ECD’s) willen anonimiseren voordat deze wordt gebruikt voor onderzoek, kwaliteitsverbetering, innovatieprojecten of data-analyse. Door persoonsgegevens automatisch te vervangen door labels wordt het risico op herleidbaarheid verkleind.
| Geen garantie Automatische herkenning kan gegevens missen of onbedoeld vervangen. Beoordeel het resultaat altijd inhoudelijk en volg het privacy- en informatiebeveiligingsbeleid van je organisatie. |
Wat de tool wel en niet doet
- Verwerkt één UTF-8 of ander ondersteund tekstbestand per run.
- Schrijft een nieuw geanonimiseerd tekstbestand en een apart logbestand.
- Werkt lokaal; de ingevoerde tekst wordt niet naar een clouddienst verstuurd.
- Vervangt geen menselijke privacycontrole en is geen garantie op volledige anonimisering.
Anonimiseren versus pseudonimiseren
De tool vervangt herkende persoonsgegevens door labels, zoals:
- [PERSOON-1]
- [DATUM-1]
- [LOCATIE-1]
Hierdoor wordt de kans op identificatie aanzienlijk verkleind. Afhankelijk van de inhoud en context van de tekst kan aanvullende beoordeling nodig zijn om vast te stellen of de gegevens volgens de AVG volledig geanonimiseerd zijn.
2. Voorbereiding en bestanden
Benodigdheden
- Een Windows 10- of Windows 11-computer.
- Minimaal 4 GB RAM.
- Een internetverbinding bij de eerste opstart.
- Schrijfrechten op de gekozen uitvoer- en logmap.
- De door je organisatie verstrekte HealthNoordAnonymizer.exe.
- Is de tool niet door je organisatie verstrekt, dan kun je deze downloaden via: Health Noord Anonimisatie-tool
- De open-source code voor de tool staat op github en eventueel kun je ook zelf de tool genereren: https://github.com/dijkhuist/Health-Noord-Anonimisatie-local
- Een invoerbestand in .txt-formaat. UTF-8 is aanbevolen.
- Optioneel: extra lijsten en/of een whitelist, elk als .txt-bestand.
Eerste gebruik
Beveiligingswaarschuwing. Omdat de applicatie nog niet digitaal is ondertekend, kan Windows (Microsoft Defender SmartScreen) bij het starten een beveiligingswaarschuwing tonen. Is de software afkomstig uit een vertrouwde bron, kies dan Meer informatie en vervolgens Toch uitvoeren.


Figuur: SmartScreen-waarschuwing bij de eerste start
Eerste opstart. De eerste start kan, afhankelijk van de capaciteit van de computer, één tot twee minuten duren. Tijdens deze eerste opstart worden benodigde bestanden gedownload en geïnitialiseerd. Bij volgende starts opent de applicatie doorgaans binnen enkele seconden.
Bestandstypen
| Bestand | Inhoud | Formaat |
| Invoer | Tekst die verwerkt moet worden | Eén .txt-document |
| Patiëntenlijst | Patiëntnamen die zeker vervangen moeten worden | Eén naam per regel |
| Medewerkerslijst | Medewerkersnamen die zeker vervangen moeten worden | Eén naam per regel |
| Locatielijst | Locaties of instellingen die extra herkend moeten worden | Eén term per regel |
| Whitelist | Termen die bewust ongewijzigd blijven | Eén woord of woordgroep per regel |
Lege regels in lijsten worden genegeerd. Vergelijking is hoofdletterongevoelig. Bewaar lijsten op een locatie met passende toegangsbeveiliging.
Voorbeelden van lijsten
Elke lijst is een .txt-bestand met één naam of locatie per regel. Gebruik bij namen bij voorkeur de volledige naam (zie hoofdstuk 7).
| patientenlijst.txt | locatielijst.txt |
| Anna Jansen
Pieter de Vries Kees Bakker Arieneke Pietersen |
Martini Ziekenhuis
Zorgcentrum De Es De Brink ’t Hôft |
3. De interface
De hoofdschermindeling bestaat uit een bestandsgedeelte, filterinstellingen, runbediening en een resultaatvoorbeeld. Bestandsdialogen openen telkens in de map waar de applicatie staat.

Figuur: Hoofdscherm
Onderdelen
| Onderdeel | Gebruik |
| Bestanden | Kies invoerbestand, uitvoermap, optionele logmap, lijsten en whitelist. |
| Filter op | Schakel Deduce-filtergroepen aan of uit voor deze run. |
| Anonimiseer bestand | Voert eerst een controle en bevestiging uit, daarna start de verwerking. |
| Annuleer verwerking | Vraagt bevestiging en stopt na afronding van de huidige tekstchunk. |
| Voortgang | Toont fase, percentage, gelezen bytes en na enige tijd een resttijdschatting. |
| Resultaatvoorbeeld | Toont een begrensd voorbeeld van de uitvoer; het volledige bestand staat op schijf. |
Filtergroepen
Onder Filter op bepaal je welke soorten persoonsgegevens worden gedetecteerd en vervangen:
- Namen (personen, patiënten)
- Locaties (plaatsnamen, straatnamen, postcodes en huisnummers)
- Instellingen (zorginstellingen, ziekenhuizen)
- Datums
- Leeftijden
- Identificatiegegevens (BSN, patiëntnummer)
- Telefoonnummers
- E-mailadressen
- URL’s en websites
4. Een document anonimiseren
In één oogopslag: selecteer invoerbestand → selecteer uitvoermap → kies filterinstellingen → start anonimisatie → controleer resultaten → voer een handmatige eindcontrole uit. De stappen in detail:
- Start HealthNoordAnonymizer.exe. Wacht tot de initialisatie gereed is.
- Kies bij Invoer .txt het tekstbestand dat je in deze run wilt verwerken. Het invoerbestand wordt niet onthouden.
- Kies bij Uitvoermap waar het geanonimiseerde bestand moet worden opgeslagen.
- Kies desgewenst een aparte Logmap. Zonder aparte keuze wordt het log in de uitvoermap geplaatst.
- Kies eventueel patiënten-, medewerkers- en locatielijsten. Elke lijst kan afzonderlijk worden weggelaten.
- Kies eventueel een whitelist. Gebruik deze alleen voor termen die ongewijzigd in de uitvoer mogen voorkomen.
- Controleer de filtergroepen. Uitgeschakelde groepen worden niet door Deduce verwerkt. Is ‘Namen’ uitgevinkt, dan worden ook de patiënten- en medewerkerslijst niet gebruikt; is ‘Locaties’ uitgevinkt, dan ook de locatielijst niet.
- Klik op Anonimiseer bestand. Lees de voorcontrole en controleer bestandsnaam, bestandsgrootte en uitvoerlocaties.
- Bevestig de start. Tijdens de verwerking worden bestandskeuzes en filters vergrendeld om wijzigingen midden in een run te voorkomen.

Figuur: Bestandskeuze en voorcontrole

Figuur: Filtergroepen en lijsten
Voorcontrole
Voor de run controleert de tool of het invoerbestand bestaat en leesbaar is, of de optionele .txt-bestanden beschikbaar zijn en of de uitvoer- en logmappen beschrijfbaar zijn. Bij een probleem verschijnt een korte lijst met punten die eerst moeten worden hersteld.
| Bestandsgrootte Bij grote bestanden kan de verwerking langer duren. De bevestiging toont de grootte voordat de run start. |
5. Voortgang en annuleren
Tijdens de run toont de statusregel de actuele fase, zoals tekst verwerken of uitvoer opslaan. De voortgangsbalk is gebaseerd op de invoerbytes. Na voldoende meettijd verschijnt een schatting van de resterende tijd; dit blijft een benadering, omdat tekstinhoud de herkenningstijd beïnvloedt.
Figuur: Voortgang tijdens verwerking
Annuleren
- Klik op Annuleer verwerking.
- Bevestig de annuleervraag.
- De huidige tekstchunk wordt eerst afgerond. Daarna stopt de run, worden tijdelijke uitvoerbestanden verwijderd en wordt een log met status Geannuleerd opgeslagen.
| Niet geforceerd afsluiten Sluit het proces niet via Taakbeheer tijdens verwerking. Gebruik de annuleerknop zodat tijdelijke bestanden netjes worden opgeruimd. |
6. Resultaten en logbestand
Uitvoer
Na een geslaagde run wordt een nieuw bestand met de invoernaam en een tijdstempel opgeslagen. De naam bevat doorgaans de aanduiding `_anonymized_`. Een bestaand bestand wordt niet overschreven. Het resultaatvoorbeeld in het venster is begrensd; het volledige resultaat staat in het opgeslagen bestand.
Persoonsgegevens worden in de uitvoer vervangen door labels, bijvoorbeeld:
| Originele tekst | Geanonimiseerde tekst |
| Mevrouw Jansen bezocht het Martini Ziekenhuis op 12-03-2024. | [PERSOON-1] bezocht [ZIEKENHUIS-1] op [DATUM-1]. |
Resultatenvenster
Na succes verschijnt automatisch een scrollbaar venster met de volledige logresultaten, waaronder per filtergroep of die aan of uit stond. Onderin open je met Open resultaat het bestand, met Open uitvoermap de map en met Open log het logbestand. Sluit het met Sluiten, Escape of het kruisje. Daarna blijven dezelfde acties beschikbaar als kleine links (Resultaat · Uitvoermap · Log) rechts op de statusregel, tot je een nieuwe run start.

Figuur: Resultatenvenster en log
Wat staat in het log?
| Logveld | Betekenis |
| Status | Geslaagd, Geannuleerd of Mislukt. |
| Starttijd en duur | Wanneer de run begon en hoeveel seconden deze duurde. |
| Bestandsmetadata | Invoerbestandsnaam, grootte en bij succes uitvoernaam; geen volledige paden. |
| Instellingen | Actieve en uitgeschakelde filtergroepen en alleen de ja/nee-status voor whitelist en extra lijsten. |
| Vervangingstotalen | Deduce-vervangingen, extra-lijstvervangingen en hun som. |
| Per type | Aantallen per herkenningstype, bijvoorbeeld BSN, persoon of extra locatie. |
| Foutdetails | Bij mislukking een foutcategorie en korte, waar mogelijk padgemaskeerde melding. |
| Geannuleerd of mislukt Ook dan wordt een statuslog bewaard. Er wordt geen gedeeltelijk geanonimiseerd eindbestand gepubliceerd. |
7. Extra lijsten en whitelist
Extra lijsten
Extra lijsten bevatten namen en locaties die zeker vervangen moeten worden. Ze worden vóór Deduce toegepast, zodat een naam uit de lijst in zijn geheel wordt vervangen, inclusief tussenvoegsels en dubbele achternaam; daarna anonimiseert Deduce de rest van de tekst. Namenlijsten bevatten volledige namen (voornaam en achternaam); locatielijsten bevatten één locatie per regel. Een voor- of achternaam die meerdere mensen in de lijst delen, wordt ook los vervangen, met een eigen pseudoniem. Deduce kent zelf ruim 150.000 Nederlandse straatnamen; een voornaam uit de namenlijst die deel is van zo’n straat (‘Willem’ in ‘Prins Willem-Alexanderstraat’) blijft staan voor Deduce, dat de hele straat met huisnummer vervangt. Zet een straat daarom alleen in de locatielijst als Deduce hem niet kent, bijvoorbeeld bij een afwijkende spelling. Alle lijsten worden in één keer doorlopen en de langste treffer wint, zodat een straat uit de locatielijst voorgaat op een voornaam. Bij een straat uit de locatielijst wordt het huisnummer meegenomen, ook met toevoeging (’12a’, ‘258-K’). Een locatie wordt alleen als hele regel herkend; zet varianten daarom als aparte regels in de lijst. Een postcode op ‘MG’ in hoofdletters (‘9257MG’), die Deduce overslaat, wordt als locatie vervangen; ‘1000 mg’ in kleine letters blijft staan als dosering. Ook een datum zonder jaartal (‘9 mei’, ’27 okt.’) wordt vervangen. De tool kan personen pseudonimiseren met consistente placeholders en telt extra vervangingen afzonderlijk in het log.
Hoofdletters, spaties, regelafbrekingen, koppeltekens en apostroffen mogen afwijken van de lijst. Een dubbele achternaam zoals ‘van den Broek – Zoon’ blijft één geheel. Een losse voor- of achternaam, of een naam van één woord (eventueel met tussenvoegsel), wordt alleen vervangen als die in de tekst met een hoofdletter staat: ‘Arts’ en ‘de Goede’ wel, de gewone woorden ‘arts’ en ‘de goede’ niet. Volledige namen van meer woorden worden altijd vervangen. Een achternaam of naam van één woord die ook een gewoon Nederlands woord is (zoals ‘Linker’ of ‘Anders’) wordt aan het begin van een zin niet vervangen, omdat de hoofdletter daar van het zinsbegin komt; na een titel of voorletter (‘mevr. Anders’) en midden in een zin wel. Voornamen uit een volledige naam (zoals ‘Wil’ uit ‘Wil Bakker’) worden ook aan het begin van een zin vervangen.
Whitelist
Een whitelistbestand bevat één woord of woordgroep per regel. Overeenkomsten zijn hoofdletterongevoelig en volgen woordgrenzen. Een gevonden term wordt vóór herkenning beschermd en daarna in de oorspronkelijke schrijfwijze teruggezet. Staat een term ook in de patiënten-, medewerkers- of locatielijst, dan gaat die lijst voor en wordt de term toch geanonimiseerd. Uitzondering: een term van één woord die ook een gewoon Nederlands woord is (zoals ‘Kamer’ of ‘Zondag’) blijft staan als die op de whitelist staat.
| Bewuste uitzondering Whitelist-termen blijven zichtbaar in de uitvoer. Plaats daarom alleen vaste medische of domeintermen op de whitelist, nooit namen of andere gegevens die geanonimiseerd moeten worden. |
Voorbeeld: als `Gabriele-de Vries syndroom` een vaste aandoeningsnaam is die behouden mag blijven, zet dan de volledige woordgroep op één regel. Voeg niet alleen `Gabriele` of `de Vries` toe als die woorden ook als persoonsnaam voorkomen.
Praktische werkwijze
- Voeg waar mogelijk naam- en locatielijsten toe; dit verbetert de herkenning van minder vaak voorkomende namen en locaties.
- Voer eerst een anonimisatie uit, controleer de uitvoer en voeg niet-herkende namen toe aan een aanvullende namenlijst. Draai de tool daarna opnieuw.
8. Instellingen onthouden
De tool bewaart de filterkeuzes. De andere keuzes worden bewust nooit onthouden; selecteer dit voor iedere run opnieuw.
9. Oefenen en testen met synthetische data
Bij de tool hoort een synthetische testset: een nagemaakte EPD-export met zorgnotities waarin alle personen, adressen, telefoonnummers, e-mailadressen, BSN’s en datums verzonnen zijn. Het bestand heeft hetzelfde formaat als een echte export (tabgescheiden met de kolommen objectId en comment, meerregelige notities en ongeveer de helft lege notities). Je kunt er veilig mee oefenen, een demonstratie geven of controleren hoe goed de tool werkt, zonder echte gegevens te gebruiken. de synthetische test data vind je hier
| Bestand (map testdata\synthetisch) | Inhoud |
| epd_synthetisch.txt | Invoerbestand met 1000 records, waarvan ongeveer 550 met een zorgnotitie. |
| patienten.txt | 150 verzonnen patiëntnamen, voor de patiëntenlijst. |
| medewerkers.txt | 40 verzonnen medewerkersnamen, voor de medewerkerslijst. |
| locaties.txt | Straatnamen, voor de locatielijst. |
| whitelist.txt | Enkele medische termen die moeten blijven staan. |
Oefenen met de testset
- Kies bij Invoer .txt het bestand epd_synthetisch.txt en kies een uitvoermap.
- Kies eventueel patienten.txt, medewerkers.txt, locaties.txt en whitelist.txt bij de optionele bestanden.
- Klik op Anonimiseer bestand en bekijk het resultaat en het logbestand.
- Draai de testset ook eens zonder lijsten en vergelijk het resultaat: zo zie je wat de extra lijsten toevoegen.
In de notities zitten bewust lastige gevallen: namen met en zonder titel, voorletters, tussenvoegsels en dubbele achternamen, familieleden die niet in de lijsten staan, adressen met huisnummer en postcode, datums met en zonder jaartal, en gewone woorden die op een naam lijken (zoals ‘Linker been’ of ‘Meer pijn’). Die gewone woorden horen na anonimisering te blijven staan.
10. Privacy en veilig gebruik
- De verwerking gebeurt lokaal op de computer; tekst wordt niet naar een cloudservice gestuurd.
- Logs bevatten geen tekstfragmenten, whitelisttermen, lijstinhoud of volledige bestandspaden.
- Bestandsnamen en vervangingstellingen kunnen nog steeds operationele informatie onthullen; deel logs daarom alleen met bevoegde personen.
- Bewaar input, uitvoer, lijsten en whitelist volgens het bewaarbeleid van je organisatie.
- Controleer de uitvoer op resterende directe en indirecte identificatoren voordat je deze deelt.
- Gebruik een whitelist uitsluitend als de behouden term aantoonbaar in de gedeelde tekst mag staan.
- Gebruik de tool uitsluitend op systemen die voldoen aan de beveiligingsrichtlijnen van je organisatie.
- Sla bronbestanden en logbestanden niet op in onbeveiligde cloudomgevingen.
- Gebruik duidelijke bestandsnamen en een overzichtelijke mappenstructuur.
- Bewaar logbestanden ter verantwoording richting privacy officers, onderzoekers of projectleiders.
- Verwijder tijdelijke bestanden zodra deze niet meer nodig zijn.
- Raadpleeg bij twijfel de privacy officer of functionaris gegevensbescherming van je organisatie.
| Verantwoordelijkheid De gebruiker blijft verantwoordelijk voor controle van de uitvoer, juiste selectie van lijsten en naleving van AVG- en organisatiebeleid. |
11. Problemen oplossen
| Melding of situatie | Mogelijke oorzaak en oplossing |
| Invoerbestand ontbreekt | Selecteer een bestaand .txt-bestand. Het invoerbestand wordt niet automatisch hersteld uit een vorige sessie. |
| Alleen .txt-bestanden worden ondersteund | Exporteer of sla de brontekst eerst op als .txt. CSV, PDF en Word-bestanden worden niet direct verwerkt. |
| Uitvoer- of logmap niet beschrijfbaar | Kies een map waarin je account bestanden mag aanmaken, bijvoorbeeld een persoonlijke werkmap. |
| Optionele lijst is niet leesbaar | Controleer of het bestand bestaat, een .txt-extensie heeft en niet door een ander programma is vergrendeld. |
| Verwerking lijkt lang te duren | Bekijk fase, bytevoortgang en resttijd. Grote chunks en complexe tekst kunnen meer rekentijd vragen. |
| Annuleren duurt nog even | De huidige chunk moet eerst klaar zijn. Daarna wordt de run veilig afgebroken en verschijnt een annuleerlog. |
| Whitelistterm is vervangen | Controleer de exacte woordgroep, spelling en woordgrenzen in het whitelistbestand. Gebruik geen te brede korte termen. Staat de term ook in een extra lijst, dan wordt hij bewust toch geanonimiseerd, behalve als het één gewoon Nederlands woord is. |
| Gewoon woord wordt als naam vervangen | Het woord staat in de namenlijst en midden in een zin met hoofdletter. Zet het op de whitelist of haal het uit de namenlijst. |
| Windows SmartScreen waarschuwt | Gebruik alleen de door je organisatie verstrekte executable en volg het interne softwarebeleid. Is de bron vertrouwd, kies dan Meer informatie → Toch uitvoeren (zie hoofdstuk 2). |
| Sommige namen worden niet gedetecteerd | Voeg een patiënten- of medewerkerslijst toe en controleer of de filtergroep Namen is aangevinkt. |
| Locaties of datums worden niet vervangen | Controleer of de betreffende filtergroepen zijn aangevinkt. |
| De eerste start duurt lang | Bij de eerste start worden bestanden gedownload en geïnitialiseerd; dit kan één tot twee minuten duren. Zorg voor een internetverbinding. |
12. Controlelijst voor vrijgave
- Is het juiste invoerbestand geselecteerd en is de naam/grootte in de voorcontrole correct?
- Zijn alleen noodzakelijke extra lijsten geselecteerd?
- Zijn whitelisttermen gecontroleerd op ongewenst behoud van persoons- of identificatiegegevens?
- Zijn uitvoer- en logmap geschikt en toegankelijk voor de bedoelde gebruiker?
- Is de verwerking volledig afgerond en is de status Geslaagd?
- Is het volledige uitvoerbestand gecontroleerd voordat het wordt gedeeld?
- Worden uitvoer en log veilig bewaard of verwijderd volgens organisatiebeleid?
| Bij twijfel Deel de uitvoer niet totdat de privacyverantwoordelijke of afgesproken reviewer de tekst heeft gecontroleerd. |
13. Ondersteuning
Voor vragen, opmerkingen of feedback over de Health Noord Anonimisatie-tool kun je contact opnemen met:
Dr. Talko B. Dijkhuis
E-mail: t.b.dijkhuis@pl.hanze.nl
Referenties
[1] Menger, V.J., Scheepers, F., van Wijk, L.M., & Spruit, M. (2017). DEDUCE: A pattern matching method for automatic de-identification of Dutch medical text. Telematics and Informatics, ISSN 0736-5853.
[2] https://github.com/vmenger/deduce
l