Ingegneria
· 9 min di lettura

Perché abbiamo costruito il nostro motore di rilevamento

Di Amine Gaaliche · bozza scritta con Claude, riletta e corretta a mano

Una libreria di rilevamento restituisce posizioni nel testo, mentre un prodotto di oscuramento deve mettere un rettangolo sulla pagina. Deve anche leggere una scansione e non segnalare «Direttore» come persona. Fra le due cose sta quasi tutto il lavoro, che consiste più nel filtrare il rumore che nello scegliere il modello.

Una libreria risponde a un'altra domanda

Il codice fiscale ha sedici caratteri, l'ultimo dei quali è di controllo. Si riconosce con un'espressione regolare e un pomeriggio di prove. Per qualche mese abbiamo creduto che anonimizzare un documento fosse lo stesso esercizio, solo più lungo.

La libreria a cui si pensa per prima è Presidio, e a ragione. Riceve un testo, applica riconoscitori fondati su schemi e su modelli, e per ogni dato restituisce un tipo, un punteggio, l'inizio e la fine.

Presidio risponde alla domanda: dove compare, in questa stringa, qualcosa che somiglia a un dato personale. Chi apre un fascicolo chiede invece che cosa va coperto sulla pagina che ha davanti, prima che il file esca dallo studio. La risposta è un PDF senza contenuto sotto i rettangoli, una scansione con i pixel giusti coperti, nessun «Direttore generale» annerito per errore.

La libreria non ha colpe: una funzione che restituisce posizioni corrette ha fatto il suo mestiere. Il problema nasce quando la si scambia per il prodotto intero. Il resto del lavoro consiste soprattutto nel decidere che cosa non segnalare.

Da una posizione a un rettangolo

Una pagina PDF è prima di tutto una composizione grafica. Le parole stanno in caselle con coordinate, e l'estrazione ricompone le colonne come può. Un nome si spezza a fine riga, un IBAN come IT60 X054 2811 1010 0000 0123 456 è stampato a gruppi di quattro. Una tabella letta riga per riga mescola il beneficiario con l'importo accanto.

Per passare dai «caratteri da 40 a 51» al rettangolo da coprire serve una mappa fra il testo analizzato e la sua geometria. La mappa deve restare corretta anche quando il testo viene riordinato o normalizzato. Senza, la posizione più precisa non copre niente.

Coprire poi non basta. Un rettangolo nero sopra un nome lascia il nome nel file, e chiunque può copiarlo. L'oscuramento vero rimuove il contenuto sottostante, anche fuori dalla pagina visibile: nei campi ActualText e Alt, nei metadati XMP, nelle PieceInfo, nelle destinazioni con nome, nei valori dei moduli e nel loro aspetto grafico.

In esportazione il dato viene sostituito anche lì: con il suo codice se è codificato, con un segnaposto neutro se è oscurato. Le miniature di pagina già generate sono immagini in cui non si può cercare né sostituire, e vengono eliminate. Per il titolare del trattamento conta, perché il GDPR guarda a ciò che il file contiene, oltre a ciò che mostra.

Una scansione è un'immagine

Un atto notarile scansionato, la fotocopia di una tessera sanitaria o una fattura fotografata non contengono testo. Un'espressione regolare non vi trova nulla da segnalare. Il nostro motore le elabora a 300 dpi con Tesseract, nella lingua del documento più l'inglese. Individua i dati come regioni dell'immagine, copre quei pixel e ricostruisce sotto un livello di testo ricercabile.

I pacchetti distribuiti sono otto: italiano, inglese, francese, tedesco, spagnolo, olandese, portoghese e polacco. Una scansione letta con il pacchetto sbagliato non dà errori. Dà un testo storpiato, e un dato che non si legge non si trova.

Il grosso del lavoro è scartare

Davanti a un contratto vero, un modello di entità segnala come persona il «Direttore generale» dell'intestazione, il «CEO» sotto la firma, la via intitolata a un patriota. Ogni segnalazione di troppo costa al revisore un clic e un po' di fiducia. Dopo la ventesima, scorre distrattamente anche quelle che contano.

Per questo il motore porta un elenco di 195 titoli e ruoli in più lingue. Impedisce che un «CEO» o un «Directeur» isolato diventi una persona. Accanto a questo elenco ci sono altri dizionari, filtri e regole che servono solo a scartare.

La rilevazione procede a strati. Prima gli schemi ad alta precisione per i dati con una struttura fissa, come codice fiscale e IBAN. Poi un modello di riconoscimento, spaCy, BERT o GLiNER secondo l'installazione, per nomi, datori di lavoro e indirizzi. Infine un modello linguistico, spento per impostazione predefinita.

I risultati vengono uniti, privati dei doppioni e propagati fra le pagine: un nome trovato a pagina 1 viene marcato anche a pagina 4. Solo alla fine si ripuliscono dal rumore. Della scelta del modello si discute di più, ma nella nostra esperienza incide meno: un filtro sbagliato fa comparire cento nomi falsi.

Abbiamo confrontato il nostro motore con Presidio, e pubblicato metodo e conteggi nell'articolo sul confronto con Presidio. Nell'esecuzione pubblicata Presidio ha prodotto 666 occorrenze e promptShield 252. Il test non è stato ripetuto sulla versione attuale del motore. Quei conteggi valgono quindi per quella misurazione e vanno citati con la data.

Dopo la rilevazione

Codifica sostituisce un valore con un codice reversibile, di lunghezza commisurata all'originale. La corrispondenza resta nel Registro codici, sulla macchina dell'utente, e Decodifica la ripristina. Rimuovi cancella in modo irreversibile.

Cartelle diverse restano separate e ricevono codici distinti, così due pratiche non si ricollegano attraverso i codici. In passato abbiamo scritto il contrario, in sette lingue, ed era sbagliato. L'app gratuita nel browser genera i codici con lo stesso schema del desktop e una chiave propria: il codice che si vede in prova ha la forma reale.

Avere un motore nostro ci ha anche permesso di alleggerire il modello per farlo girare in un browser, come raccontiamo a proposito della versione per il browser. Con un componente altrui, quella scelta non sarebbe stata nostra.

Dove passa il documento

Molte integrazioni di una libreria finiscono su un servizio in cloud. Chi gestisce il servizio diventa responsabile del trattamento ai sensi dell'art. 28 GDPR, con contratto, istruzioni e verifiche. Per un avvocato o un commercialista si aggiunge il segreto professionale. Il Garante per la protezione dei dati personali, quando chiede conto di un trattamento, comincia da chi lo ha svolto e su quali istruzioni.

Non tocca a noi dire se una configurazione regge davanti a queste regole. Possiamo dire dove nasce l'obbligo, e che un file che resta sul portatile ne restringe la portata.

L'applicazione desktop elabora il file sulla macchina, e «100% offline» vale per questa. La modalità senza verifiche della licenza né segnalazioni di arresto anomalo è riservata al piano Pro. L'app gratuita nel browser invia un segnale anonimo di avvio, ma il documento resta sul computer. Un'eccezione: la modalità remota facoltativa dell'Analisi approfondita invia il testo delle pagine a un servizio scelto dall'utente, ed è spenta finché qualcuno non la accende.

Domande frequenti

Perché non usare una libreria esistente?

Spesso è la scelta giusta. Se il materiale è testo pulito su un server che Lei controlla, Presidio o una libreria simile fanno il lavoro con competenza. Noi dovevamo produrre su un portatile un PDF che esce dallo studio, spesso da una scansione. Lì la libreria copriva solo una piccola parte del lavoro.

Che cosa non dà una libreria?

Non dà ciò che sta prima e dopo il testo:

  • la mappa dalle posizioni ai rettangoli sulla pagina;
  • la lettura delle scansioni e la copertura dei pixel;
  • la sostituzione nei punti nascosti del PDF;
  • i filtri che scartano titoli, ruoli e parole comuni;
  • i codici reversibili per cartella e il Registro codici.

La differenza sta nel modello o nel filtraggio?

Soprattutto nel filtraggio. Il modello è intercambiabile, e la qualità percepita dal revisore dipende da quante segnalazioni inutili deve togliere. Nessun motore locale, il nostro compreso, individua ogni dato personale: per questo un file protetto passa dalla Revisione prima del download.

I documenti escono dal computer?

Nella configurazione predefinita, no: rilevazione, lettura delle scansioni e oscuramento avvengono sulla macchina. Il testo delle pagine esce solo con la modalità remota dell'Analisi approfondita, spenta finché non la si attiva.

Un fine settimana o un anno

Chi ha già collegato una libreria si chiede se il resto richieda un fine settimana o un anno. Se basta un elenco di posizioni, un fine settimana è una stima ragionevole. Se alla fine c'è un documento che un collega firmerà, il lavoro si sposta su ciò che la libreria non vede. A noi è servito un anno.

Senza progetti open source come Presidio molti, noi compresi, sarebbero partiti da più lontano. Quell'anno è il prezzo di una domanda diversa: che cosa una persona può consegnare con tranquillità a un destinatario.

Ti è stato utile? Faccelo sapere.

Condividi