Skip to main content

Ferramenta para anonimização de documentos com foco no SEI.

Project description

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 spaCy e 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 modelo pt_core_news_lg sobre a string fornecida. Filtra entidades PER considerando 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

  1. Gestão de Memória: O modelo pt_core_news_lg consome 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.
  2. Tratamento de Exceções em Lote: Arquivos corrompidos ou mal formatados podem gerar erros de leitura. Mantenha os blocos try...except nas iterações de pasta para garantir que um arquivo danificado não interrompa a esteira de processos (conforme Exemplo 2).
  3. Expansão de Whitelist: Se aplicado em outros setores, modifique a variável termos_protegidos dentro do método extrair_nomes_nlp para incluir siglas departamentais específicas, mitigando a detecção de falsos positivos pelo modelo de reconhecimento de entidades nomeadas (NER).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sei_anonimizer-1.0.2.tar.gz (17.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sei_anonimizer-1.0.2-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

File details

Details for the file sei_anonimizer-1.0.2.tar.gz.

File metadata

  • Download URL: sei_anonimizer-1.0.2.tar.gz
  • Upload date:
  • Size: 17.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5rc1

File hashes

Hashes for sei_anonimizer-1.0.2.tar.gz
Algorithm Hash digest
SHA256 cb0b383a07edada1073591f2900da45d0491ad9bd74a5b4d314d2b7b1cde63ad
MD5 edd4c6d4914b25499bab8a43f65166e6
BLAKE2b-256 14698eadaa204b3b7d55e414f1247b9cf223314a5348d22127a175c115c248a9

See more details on using hashes here.

File details

Details for the file sei_anonimizer-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: sei_anonimizer-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 15.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5rc1

File hashes

Hashes for sei_anonimizer-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 9e84a28b40495cb1a23a89036575920a80847449e53f978e89a135c3e889f69c
MD5 23e9eff80861e37c8569600c99815482
BLAKE2b-256 74195cd06d8d531cdb856f65c026ce81b4d4c6dbe6e6c213616246c5735e1c36

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page