BORIX
Technologia
Presidio Local Anonymizer

Nazwiska obywateli nie muszą wyjeżdżać z nadleśnictwa

W dokumentacji pilotażowej stoi rada: „anonimizuj nazwiska markerem przed skanem”. To narzędzie robi dokładnie to samo, tylko w tekście i automatycznie — w momencie, w którym wklejasz pismo do dowolnego okna przeglądarki.

Kod źródłowy (MIT)Projekt open source, autor: Bartosz Gaca. Licencja MIT.

Jak to wygląda w praktyce

Kopiujesz fragment pisma, wciskasz Ctrl+V w oknie ChatGPT, Claude, Perplexity, Gemini czy w zwykłym formularzu — i w polu pojawia się już wersja pozbawiona danych osobowych:

Jan Kowalski, email: jan@example.com, PESEL: 92010212345

[OSOBA], email: [EMAIL], PESEL: [PESEL]

Alternatywnie: skrót klawiszowy na zaznaczonym tekście albo pozycja w menu kontekstowym. Włącznik ON/OFF siedzi w okienku rozszerzenia, więc da się to wyłączyć na czas pracy z danymi, których nie chcesz maskować.

Co i gdzie się wykonuje

Dwie części: rozszerzenie do Chrome/Edge (Manifest V3) i mały backend w Pythonie (Flask) uruchomiony na Twojej maszynie. Backend nasłuchuje tylko na 127.0.0.1 i ::1 — nie jest widoczny w sieci lokalnej ani z internetu. Domyślny port to 6677, do zmiany zmienną PRESIDIO_PORT.

Rozpoznawanie danych robi Microsoft Presidio wsparte modelem językowym spaCy dla polszczyzny (pl_core_news_md) oraz zestawem wyrażeń regularnych pod polskie identyfikatory. Nazwiska i nazwy miejscowości wychodzą z modelu, PESEL i NIP z reguł — dlatego działa też na tekstach, w których model sam by się pogubił.

Rozmiary, żeby nie było zaskoczenia: model spaCy to około 500 MB na dysku, backend z wczytanym modelem zajmuje ok. 200 MB pamięci, a rozpoznanie danych w typowym fragmencie pisma trwa dziesiątki milisekund.

Typy danych włączone domyślnie

Rodzaj danychCo wstawia w zamian
PESEL[PESEL]
NIP[NIP]
REGON[REGON]
Numer dowodu[DOWOD_PL]
Paszport[PASZPORT_PL]
Imię i nazwisko[OSOBA]
Adres / miejscowość[LOKALIZACJA]
Telefon[TELEFON]
E-mail[EMAIL]
Numer karty[KARTA]
IBAN[IBAN]
Data[DATA]

Do tego wyłączone domyślnie identyfikatory zagraniczne (amerykańskie, brytyjskie, australijskie, singapurskie) — można je włączyć w pliku konfiguracyjnym, jeśli kiedyś będą potrzebne.

Jak to spina się z BORIX

Moduł klasyfikacji JRWA woła model przez zewnętrzne API — to jedyne miejsce, w którym treść wychodzi na zewnątrz (patrz model lokalny). Kolejność, którą rekomendujemy w pilotażu:

  1. Pismo obywatela wpada do kancelarii.
  2. Anonimizacja lokalnie — nazwiska, PESEL, adresy zamieniają się na znaczniki.
  3. Dopiero taki tekst idzie do klasyfikatora albo do modelu w chmurze.
  4. Odpowiedź wraca, a Ty podstawiasz prawdziwe dane w gotowe pismo — już u siebie.

Backend wystawia zwykłe API HTTP (POST /api/anonymize), więc podłączenie tego kroku do własnego procesu to jedno wywołanie. Warunek: backend musi stać na tej samej maszynie, bo celowo nie wychodzi poza localhost i nie ma uwierzytelniania.

Uczciwe ograniczenia

  • Narzędzie nie gwarantuje wykrycia wszystkich danych osobowych — zdarzają się zarówno pominięcia, jak i fałszywe trafienia (np. zamaskowana liczba, która nie była PESEL-em).
  • Samo jego użycie nie czyni procesu zgodnym z RODO. To jeden z technicznych środków ograniczających ryzyko, nie certyfikat.
  • Przy dokumentach klauzulowanych odpowiedź jest inna niż „anonimizuj” — takich treści nie wkleja się do modeli w ogóle.
  • Rozszerzenie instaluje się w trybie dla programistów (nie ma go jeszcze w Chrome Web Store).