"Umowa z Janem Kowalskim, PESEL 85010112345"
↓
"Umowa z [OSOBA_1], PESEL [PESEL_1]" ← to wysyłasz do modelu
[OSOBA_1] = Jan Kowalski ← to zostaje na Twoim dysku
↓
"Jan Kowalski ma zapłacić do 15 marca" ← odpowiedź po podmianie z powrotem
Dla kogo
Dla każdego, kto ma w dokumentach cudze dane i chce korzystać z AI, nie łamiąc RODO: księgowość, kancelarie, kadry, biura rachunkowe, agencje. Nie musisz umieć programować — jest okno w przeglądarce, do którego przeciągasz plik myszką.
Ile z tego działa
Zmierzone na 324 057 słowach polskich pism urzędowych z Biuletynów Informacji Publicznej, w dwóch osobnych zestawach. Drugi zestaw zebraliśmy po zakończeniu prac, więc narzędzie nie widziało tych dokumentów, gdy powstawały jego reguły.
Przez oba zestawy przeszło jedno prawdziwe nazwisko na 287. Sprawdziliśmy to jeszcze raz na cudzym materiale, żeby nikt nie zarzucił nam mierzenia własną miarką: 98,1% pełnych nazwisk na części testowej korpusu KPWr Politechniki Wrocławskiej, gdzie nazwiska oznaczyli ludzie, a nie maszyna.
Pomiar możesz powtórzyć u siebie — sposób liczenia opisuje plik z wynikami, a dołączony skrypt ściąga te same dokumenty z BIP-ów. Dokumentów nie ma w repozytorium: są w nich nazwiska prawdziwych ludzi.
Jak wypada na tle innego polskiego narzędzia
Najdalej zaszedł Parawan i pod jednym względem bije nas na głowę: to jeden plik HTML, który otwierasz podwójnym kliknięciem. Bez instalacji, bez Pythona, bez modelu do pobrania. Przepuściliśmy oba przez te same 19 dokumentów i zmierzyliśmy tym samym przyrządem.
| co mierzymy | Cenzor | Parawan |
|---|---|---|
| pełne nazwiska, 286 sztuk | 99,0% wyciętych | 82,5% wyciętych |
| wszystko, co model uznał za osobę, 556 | 86,3% | 48,7% |
| kod pocztowy | 100% | 100% |
| PESEL (jeden w zestawie) | wycięty | został |
Różnica bierze się z metody. Parawan rozpoznaje dane wzorcami i listami — dlatego mieści się w jednym pliku. Tu pracuje model języka polskiego, więc nazwisko w odmianie i takie, którego nie ma na żadnej liście, też zostaje wycięte.
Jak zacząć
Potrzebujesz Pythona 3.10 lub nowszego. Reszta instaluje się sama.
Mac i Linux
git clone https://github.com/studiogo/cenzor.git cd cenzor ./instaluj.sh
Windows
W PowerShellu (Start → wpisz „PowerShell"). Pythona pobierz z python.org i przy instalacji zaznacz „Add python.exe to PATH".
git clone https://github.com/studiogo/cenzor.git cd cenzor powershell -ExecutionPolicy Bypass -File .\instaluj.ps1
Potem okno w przeglądarce — przeciągasz plik, widzisz, co zniknie, pobierasz wynik:
venv/bin/python okno/serwer.py # Mac i Linux venv\Scripts\python okno\serwer.py # Windows
Okno słucha wyłącznie na Twoim komputerze i nie da się go wystawić na sieć. To nie niedoróbka, tylko sedno narzędzia: w chwili, gdy stanęłoby na serwerze, dokumenty zaczęłyby jechać przez sieć na cudzą maszynę.
Czego to nie załatwia
- Nie chroni przed rozpoznaniem po treści. W protokole sesji rady gminy nazwa gminy padła 56 razy; po oczyszczeniu została dwa razy — a jedno wystarczy, żeby „Wójt [OSOBA_4]" miał tylko jedną możliwą wartość.
- Skany są bezużyteczne. PDF będący zdjęciem strony nie ma w sobie tekstu. Program powie to wprost, zamiast udawać, że zadziałał.
- Danych pacjentów nie anonimizuj. Rejestrów medycznych po prostu nie wyjmuj z systemu klienta.
- Plik z kluczem to cały oryginał. Razem z plikiem oczyszczonym odtwarza dokument w całości. Nie wysyłaj go nigdzie.
In English
Polish PII anonymizer that runs entirely on your machine. It removes names, PESEL, NIP, REGON and 20 more Polish identifiers from a document before you send it to an LLM, and puts the real values back into the answer. Checksums verify the identifiers; a Polish language model catches inflected names. Measured on 324,057 words of Polish public-administration documents: 98.9% of full names removed on documents the tool had never seen, 100% on structured identifiers, 20/20 documents restored character-for-character. MIT licence.