Anonimizador de Documentos
Visão Geral
Ferramenta para anonimização de documentos (.pdf, .docx, .txt), projetada para processar e redigir informações sensíveis e dados pessoais. A ferramenta trata a anonimização de documentos do Sistema Eletrônico de Informações (SEI) corretamente, identificando e mascarando padrões específicos da plataforma. O script opera através de uma interface gráfica nativa (Tkinter) e de uma classe estruturada (DocumentAnonimizer) para uso programático.
🚀 Executável Prontamente Disponível (Sem Código)
Para usuários que não desejam utilizar linhas de comando ou códigos Python, o programa possui um executável com interface gráfica nativa, intuitivo e fácil de usar. Basta baixar e executar localmente no computador.
🔗 Clique aqui para baixar o Executor Confiável (v1.0.0)
Recursos de Anonimização
O sistema identifica e mascara os seguintes elementos no texto e na estrutura dos arquivos:
- Documentos SEI: Oculta números de 7 dígitos e Códigos de Autenticação (CRC). Em arquivos PDF, aplica tarjas sobre QR Codes e Barras Laterais de Autenticação do sistema.
- CPF: Formato de saída
***.XXX.XXX-** - RG e Data de Expedição
- E-mails e Telefones
- Links: Remoção de hiperlinks da estrutura do arquivo (PDF) ou substituição no texto (
.docx,.txt). - Nomes Próprios: Identificação por Processamento de Linguagem Natural (NLP) via
spaCye expressões regulares de resgate.
Requisitos e Dependências
O projeto requer Python 3.x e as seguintes bibliotecas:
PyMuPDF(fitz): Para leitura e manipulação das camadas do PDF.python-docx: Para processamento de arquivos Microsoft Word.spacy: Para o motor de NLP.- Modelo NLP do spaCy:
pt_core_news_lg.
Instalação
pip install PyMuPDF python-docx spacy
python -m spacy download pt_core_news_lg
Uso Programático (Classe DocumentAnonimizer)
A classe DocumentAnonimizer é a interface principal para integrar a anonimização em fluxos de dados ou automações. Deve ser utilizada via gerenciador de contexto (with) para gerenciar o estado da execução.
Estrutura de Opções
O comportamento da classe é definido por um dicionário passado no momento da instanciação. O padrão, caso omitido, é:
opcoes_padrao = {
"cpf": True,
"rg": True,
"email_tel": True,
"doc_sei": True,
"qr_code": True,
"links": True,
"nomes": False,
"modo_nomes": "iniciais" # Alternativa: "total" para [NOME]
}
Exemplo 1: Processamento de Arquivo Único
Demonstração de configuração para mascarar apenas CPFs e Nomes em um arquivo de texto.
from anonimizer import DocumentAnonimizer
config = {
"cpf": True,
"nomes": True,
"modo_nomes": "total", # Substitui nomes identificados por [NOME]
"email_tel": False,
"rg": False,
"doc_sei": False,
"qr_code": False,
"links": False
}
with DocumentAnonimizer(opcoes=config) as anonimizador:
# Se o caminho de saída for omitido, gera o arquivo com sufixo '_anonimizado.docx'
caminho_saida = anonimizador.processar_arquivo("C:/caminho/para/documento.docx")
print(f"Documento tratado salvo em: {caminho_saida}")
Exemplo 2: Processamento em Lote (Automação de Diretórios)
Demonstração de varredura em um diretório definindo um caminho de saída customizado.
import os
from anonimizer import DocumentAnonimizer
pasta_origem = "dados/originais"
pasta_destino = "dados/anonimizados"
extensoes_suportadas = ('.pdf', '.docx', '.txt')
os.makedirs(pasta_destino, exist_ok=True)
# Utiliza as opções padrão
with DocumentAnonimizer() as anonimizador:
for arquivo in os.listdir(pasta_origem):
if arquivo.lower().endswith(extensoes_suportadas):
caminho_in = os.path.join(pasta_origem, arquivo)
caminho_out = os.path.join(pasta_destino, f"tratado_{arquivo}")
try:
anonimizador.processar_arquivo(caminho_in, caminho_out)
print(f"Sucesso: {arquivo}")
except Exception as e:
print(f"Falha ao processar {arquivo}: {e}")
Referência de Métodos
__init__(self, opcoes: Dict[str, bool] = None): Inicializa a classe. Atribui o dicionário de opções.processar_arquivo(self, caminho_entrada: str, caminho_saida: str = None) -> str: Roteia a execução com base na extensão do arquivo (.pdf,.docx,.txt). Aplica as marcações de redação nas coordenadas identificadas (PDF) ou substitui as cadeias de caracteres diretamente no texto (DOCX/TXT). Retorna o caminho do arquivo gerado.extrair_nomes_nlp(self, texto: str) -> Set[str]: Executa o modelopt_core_news_lgsobre a string fornecida. Filtra entidadesPERconsiderando uma lista restritiva interna (termos_protegidos). Retorna um conjunto (set) de strings com os nomes validados.
Interface Gráfica
Para a execução visual interativa, execute o arquivo de forma direta:
python anonimizer.py
Considerações para Implementações Futuras e Automação
- Gestão de Memória: O modelo
pt_core_news_lgconsome recursos na inicialização. Em fluxos que instanciam o script iterativamente, mantenha o escopo de importação em nível global para evitar recarregamento repetido do modelo. - Tratamento de Exceções em Lote: Arquivos corrompidos ou mal formatados podem gerar erros de leitura. Mantenha os blocos
try...exceptnas iterações de pasta para garantir que um arquivo danificado não interrompa a esteira de processos (conforme Exemplo 2). - Expansão de Whitelist: Se aplicado em outros setores, modifique a variável
termos_protegidosdentro do métodoextrair_nomes_nlppara incluir siglas departamentais específicas, mitigando a detecção de falsos positivos pelo modelo de reconhecimento de entidades nomeadas (NER).
Release files for sei-anonimizer 1.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sei_anonimizer-1.0.2.tar.gz | 17.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sei_anonimizer-1.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 32.4 kB
Release files / sei_anonimizer-1.0.2.tar.gz
| Download URL | sei_anonimizer-1.0.2.tar.gz |
|---|---|
| Size | 17.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cb0b383a07edada1073591f2900da45d0491ad9bd74a5b4d314d2b7b1cde63ad
|
|
BLAKE2b-256 checksum How to use checksums |
14698eadaa204b3b7d55e414f1247b9cf223314a5348d22127a175c115c248a9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.5rc1
|
Release files / sei_anonimizer-1.0.2-py3-none-any.whl
| Download URL | sei_anonimizer-1.0.2-py3-none-any.whl |
|---|---|
| Size | 15.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9e84a28b40495cb1a23a89036575920a80847449e53f978e89a135c3e889f69c
|
|
BLAKE2b-256 checksum How to use checksums |
74195cd06d8d531cdb856f65c026ce81b4d4c6dbe6e6c213616246c5735e1c36
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.5rc1
|