Construímos nosso próprio motor porque uma biblioteca de detecção responde a outra pergunta. Ela informa em que posições do texto um padrão apareceu. Quem usa o promptShield quer saber o que esconder na página que está na tela. Quase todo o trabalho entre uma coisa e outra consiste em decidir o que não marcar.
O que uma biblioteca devolve
O Presidio faz bem o que se propõe a fazer. Ele recebe um texto, aplica reconhecedores e devolve ocorrências com tipo, pontuação e posições de início e fim. Para limpar colunas de um banco de dados antes de um relatório, é isso que se quer. Várias partes do nosso motor começaram pela leitura do código de bibliotecas assim.
O problema aparece quando essa lista vira um produto que alguém abre de manhã com um PDF de 40 páginas. A pessoa não pergunta em que caracteres um padrão foi encontrado. Ela quer saber o que esconder e se pode mandar o arquivo para fora do escritório.
Decidir o que não marcar
Imagine um contrato social registrado na Junta Comercial e escaneado às pressas. A primeira página traz três sócios com nome, CPF, endereço e cargo, como “Diretor Presidente”. Um estagiário sabe em dez segundos o que precisa sumir dali.
Um modelo treinado em notícias lê “Diretor Presidente” logo depois de um nome próprio. Muitas vezes, ele estende a marcação do nome até o cargo ou marca o cargo sozinho. Em cada página, isso gera marcações em palavras que não identificam ninguém.
Depois da quinta marcação inútil, o revisor para de ler com atenção, e na sexta passa o CPF que importava. Por isso temos uma lista de 195 cargos e funções, em vários idiomas, que barra um “CEO” ou um “Directeur” isolado. Ela foi montada caso a caso e muda bastante a revisão.
Camadas que precisam ser fundidas
A camada de padrões acha CPF, CNPJ, CEP e dados bancários com mais confiança que qualquer modelo. Esses valores têm forma: o CPF tem 11 dígitos, o CNPJ tem 14 e o CEP tem 8. O modelo de entidades cuida de nomes, empresas e endereços. A camada de LLM, quando ligada, fica com os casos ambíguos.
As camadas se sobrepõem e se contradizem, e os resultados são fundidos sem marcar duas vezes a mesma entidade. Depois, um nome encontrado com segurança na página 1 é procurado nas outras. Assim, a página 4, onde o modelo leu mal a frase, não sai com o nome à vista. Só no fim entra o filtro de ruído.
Uma página não é só texto
O usuário não oculta “os caracteres 312 a 327”. Ele quer um retângulo preto sobre o nome, na página certa, mesmo quando o nome quebra de linha. Para isso é preciso saber onde cada palavra está desenhada, e uma biblioteca de texto não sabe.
Um escaneamento é uma imagem, sem texto, e o carimbo do cartório faz parte dela. O pipeline renderiza a página a 300 dpi e roda o Tesseract com o idioma do documento mais o inglês. Ele localiza os dados pessoais como regiões da imagem, cobre esses pixels e reconstrói por baixo uma camada de texto pesquisável.
Há um limite: são oito pacotes de idioma (en, fr, de, es, it, nl, pt, pl). Um escaneamento lido com o pacote errado sai mal lido, sem nenhum erro na tela. Por isso a escolha do idioma pesa mais num escaneamento do que num PDF nativo.
Ocultar significa remover o conteúdo
Um retângulo preto sobre o texto engana os olhos, mas qualquer leitor de PDF ainda copia o texto. Ocultar de verdade é remover o conteúdo. Um PDF também guarda texto fora da página: o texto alternativo de PDFs com tags (ActualText e Alt), os metadados XMP, os dicionários PieceInfo, os destinos internos e a aparência salva dos campos de formulário.
Na exportação, o promptShield troca o dado também nesses lugares: pelo código, se você codificou, ou por um marcador neutro, se ocultou. A miniatura gerada antes da ocultação é descartada, porque não dá para substituir texto dentro de uma imagem. Esses resíduos costumam aparecer só quando um cliente abre o arquivo num leitor diferente.
Os números da comparação e quando foram medidos
Publicamos uma comparação direta entre o promptShield e o Presidio sobre o mesmo conjunto de documentos. Na execução publicada, o Presidio na instalação padrão marcou 666 trechos, e o promptShield, 252. A comparação não foi repetida com a versão atual do nosso motor, que mudou desde então.
Leia esses totais como uma medição datada, e não como um placar atualizado. Marcar mais trechos também não é uma virtude em si: parte da diferença pode ser ruído que uma ferramenta filtra e a outra não.
Onde nós mesmos erramos
O erro mais caro que já publicamos sobre nosso motor não veio de biblioteca nenhuma. Em sete idiomas, afirmamos que um valor recebe um código idêntico em toda a biblioteca de documentos. Isso é falso: o código é definido por pasta, e pastas diferentes não se enxergam.
Só um código fixado à mão pelo usuário vale em qualquer pasta. A regra faz sentido: cada pasta pode corresponder a um processo. A frase errada ficou no ar até alguém compará-la com o código-fonte.
O aplicativo gratuito no navegador gera códigos pelo mesmo método do desktop, com uma chave própria. Por isso, o código de uma demonstração tem o formato real do produto. Já o selo “100% offline” vale só para o desktop: a versão no navegador envia um sinal anônimo de abertura.
Nas duas versões, o documento não sai da sua máquina. O modo isolado do desktop, sem verificação de licença e sem envio de relatórios de falha, é exclusivo do plano Pro.
O que isso muda para quem responde pela LGPD
Se seu pipeline manda o texto para uma API de terceiros, esse terceiro atua como operador (art. 5º, VII). O tratamento precisa de uma base legal do art. 7º, e o art. 6º, X cobra do controlador a prova de que as medidas funcionam.
Para advogados, o art. 34, VII da Lei nº 8.906/1994 e o art. 154 do Código Penal tratam do sigilo. Nenhum contrato com fornecedor transfere esse dever. Explicamos de onde ele vem. Avaliar seu caso concreto cabe a você e a quem assessora você.
Perguntas de quem está decidindo
Por que não usar uma biblioteca existente?
Para muita gente, essa é a escolha certa. Se seus dados são texto em colunas e o resultado vai para outro sistema, o Presidio resolve bem e tem uma comunidade por trás. Nós entregamos uma página que alguém revisa e envia, com a ocultação no lugar certo e sem resíduos no arquivo.
O que falta a uma biblioteca?
Tudo o que vem depois das posições de caractere: geometria, OCR para páginas que são imagem, fusão de camadas e propagação entre páginas. Falta também filtrar o ruído e exportar sem deixar o dado em metadados, formulários e miniaturas. É outro escopo, e a biblioteca cumpre bem o dela.
A diferença está no modelo ou na filtragem?
Pela nossa experiência, sobretudo na filtragem, embora ter um modelo próprio nos tenha permitido encolhê-lo para rodar no navegador. No dia a dia, o revisor sente o ruído: cargos marcados como pessoa, números de página confundidos com números de documento, marcações duplicadas. Nenhuma camada detecta todos os identificadores, e por isso o produto pede revisão antes do download.
Quanto trabalho dá montar isso a partir de uma biblioteca?
Um protótipo que funciona num PDF nativo cabe num fim de semana. Escaneamentos em sete idiomas, ocultação que vale em qualquer leitor de PDF e uma filtragem que poupa o revisor levam muito mais tempo. A maior parte desse tempo vai para casos que nenhum conjunto de testes inicial contém.
A pergunta que o usuário fez
O estagiário acerta em dez segundos porque responde à pergunta de quem tem a página na frente. Uma biblioteca acerta outra coisa, com rigor, e isso tem valor. Nosso trabalho foi sobretudo aprender a não marcar o que não precisa ser marcado. Ainda erramos, e por isso pedimos revisão antes do download.