Oculte nomes, e-mails e telefones antes de colar texto em uma ferramenta de IA
Remova ou substitua dados pessoais evidentes antes de enviar texto a um assistente de chat com IA e revise tanto o texto mascarado quanto o relatório de detecção para encontrar o que foi deixado para trás. Este tutorial usa um pequeno exemplo sintético e mantém o arquivo original inalterado.
Conteúdo verificado 2026.09.21Inclui código de exemplo
Ver o sumário
A tradução foi feita com IA. Confira o código, as unidades e os valores junto com o original. A revisão por falantes nativos de cada idioma ainda não foi concluída. English
Para quem éPara quem quer fazer uma verificação prática antes de enviar a uma IA textos de trabalho que possam conter nomes, endereços de e-mail ou números de telefone.
Preparação
Python 3.12
Um editor de texto e um assistente de chat com IA
01Comece com uma pequena mensagem sintética
Este exemplo é totalmente sintético. Os nomes, endereços de e-mail, números de telefone, informações de empresa e o conteúdo da mensagem foram inventados para o tutorial. O objetivo é praticar a remoção de dados pessoais evidentes antes de o texto sair do seu ambiente local.
Salve o texto a seguir como message.txt. Ele contém dois nomes, dois endereços de e-mail, dois números de telefone e uma referência deliberadamente ambígua que uma regra simples de mascaramento não detectará.
text
Project review notes
Alice Kim asked us to send the revised table to alice.kim@example.com.
If the file is delayed, call Alice at 010-1234-5678.
Bob Lee will review the second draft. His email is bob.lee@example.com and his office number is 02-345-6789.
The final approval should also be checked with A. Kim before Friday.
02Peça à IA um plano de mascaramento, não o texto sensível
Você pode perguntar a um assistente de IA como projetar regras de mascaramento sem enviar o documento sensível real. Descreva as categorias e use exemplos inventados.
Uma resposta útil deve distinguir identificadores estruturados de linguagem não estruturada. Endereços de e-mail e números de telefone costumam apresentar padrões reconhecíveis. Nomes de pessoas são mais difíceis: palavras comuns podem ser nomes, podem aparecer iniciais ou diferentes sistemas de escrita, e a mesma pessoa pode ser mencionada de várias formas.
03Transforme a resposta da IA em regras explícitas de mascaramento
Para este exemplo sintético, use uma pequena lista aprovada para nomes e expressões regulares para e-mails e telefones. Essa abordagem é intencionalmente mais restrita do que um detector geral de dados pessoais.
Tipo de dado
Regra
Marcador
Nome completo
Substituir apenas os nomes exatos aprovados Alice Kim e Bob Lee
[NAME_1], [NAME_2]
E-mail
Detectar padrões comuns com parte local, @ e domínio
[EMAIL_1], [EMAIL_2]
Telefone
Detectar os dois formatos de telefone presentes neste exemplo
[PHONE_1], [PHONE_2]
Outro texto
Manter inalterado para revisão manual
Sem substituição automática
Marcadores consistentes ajudam a manter compreensíveis as referências repetidas sem preservar o identificador original. O script abaixo atribui o mesmo marcador às ocorrências repetidas do mesmo valor detectado.
04Aplique as regras a uma cópia local
O script Python a seguir lê message.txt, aplica as regras aprovadas e grava os resultados em uma nova pasta outputs. Ele também cria um relatório replacements.csv com cada valor original detectado e seu marcador. O script para se outputs já existir e nunca sobrescreve message.txt.
python
import csv
import re
import sys
from pathlib import Path
INPUT = Path("message.txt")
OUTPUT_DIR = Path("outputs")
MASKED_FILE = OUTPUT_DIR / "message_masked.txt"
REPORT_FILE = OUTPUT_DIR / "replacements.csv"
KNOWN_NAMES = ["Alice Kim", "Bob Lee"]
EMAIL_RE = re.compile(
r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b"
)
PHONE_RE = re.compile(
r"(?<!\d)(?:010-\d{4}-\d{4}|02-\d{3}-\d{4})(?!\d)"
)
def make_replacer(kind, mapping, rows):
def replace(match):
original = match.group(0)
if original not in mapping:
placeholder = f"[{kind}_{len(mapping) + 1}]"
mapping[original] = placeholder
rows.append(
{
"type": kind,
"original": original,
"replacement": placeholder,
}
)
return mapping[original]
return replace
def mask_known_names(text, mapping, rows):
for name in KNOWN_NAMES:
if name not in text:
continue
if name not in mapping:
placeholder = f"[NAME_{len(mapping) + 1}]"
mapping[name] = placeholder
rows.append(
{
"type": "NAME",
"original": name,
"replacement": placeholder,
}
)
text = text.replace(name, mapping[name])
return text
def main():
if not INPUT.is_file():
sys.exit(f"Input file not found: {INPUT}")
if OUTPUT_DIR.exists():
sys.exit(f"Stop: {OUTPUT_DIR} already exists. Review or rename it first.")
original = INPUT.read_text(encoding="utf-8")
rows = []
name_map = {}
email_map = {}
phone_map = {}
masked = mask_known_names(original, name_map, rows)
masked = EMAIL_RE.sub(make_replacer("EMAIL", email_map, rows), masked)
masked = PHONE_RE.sub(make_replacer("PHONE", phone_map, rows), masked)
OUTPUT_DIR.mkdir()
MASKED_FILE.write_text(masked, encoding="utf-8")
with REPORT_FILE.open("x", encoding="utf-8", newline="") as target:
writer = csv.DictWriter(
target,
fieldnames=["type", "original", "replacement"],
)
writer.writeheader()
writer.writerows(rows)
print(f"Unique names masked: {len(name_map)}")
print(f"Unique emails masked: {len(email_map)}")
print(f"Unique phones masked: {len(phone_map)}")
print(f"Masked copy: {MASKED_FILE}")
print(f"Replacement report: {REPORT_FILE}")
if __name__ == "__main__":
main()
Coloque mask_personal_data.py ao lado de message.txt e execute python mask_personal_data.py. Para este exemplo exato, o resultado esperado é o mascaramento de 2 nomes únicos, 2 e-mails únicos e 2 telefones únicos.
05Compare as substituições com o texto original
Calcule manualmente as substituições esperadas antes de confiar no resultado. O script deve registrar seis valores únicos detectados.
Tipo
Original
Substituição
NAME
Alice Kim
[NAME_1]
NAME
Bob Lee
[NAME_2]
EMAIL
alice.kim@example.com
[EMAIL_1]
EMAIL
bob.lee@example.com
[EMAIL_2]
PHONE
010-1234-5678
[PHONE_1]
PHONE
02-345-6789
[PHONE_2]
O nome completo exato Alice Kim aparece uma vez no texto de origem e é substituído por [NAME_1]. A referência posterior mais curta Alice não corresponde exatamente à lista aprovada de nomes completos, portanto permanece sem mascaramento e deve ser identificada durante a revisão manual. O relatório contém valores únicos detectados, em vez de uma linha para cada ocorrência.
06Revise o que as regras automáticas não detectaram
A substituição automática é apenas a primeira etapa. Abra outputs/message_masked.txt e leia todo o resultado antes de colá-lo em qualquer lugar. Neste exemplo, o último parágrafo ainda contém A. Kim. O script não consegue saber, com base apenas na lista aprovada, que essa referência pode corresponder a Alice Kim.
Pesquise por @ no arquivo mascarado e confirme que nenhum endereço de e-mail permanece.
Pesquise por 010- e 02- e confirme que os dois formatos de telefone esperados desapareceram.
Pesquise por Alice Kim e Bob Lee e confirme que os nomes completos aprovados não aparecem mais.
Leia cada linha manualmente procurando iniciais, apelidos, assinaturas, endereços, identificadores de funcionário, números de conta, identificadores específicos do projeto ou outros contextos identificáveis.
Observe que A. Kim permanece. Decida manualmente se isso identifica uma pessoa no documento real e masque a referência se necessário.
Compare replacements.csv com o texto original e confirme que cada substituição corresponde ao trecho pretendido.
07Erros comuns e limites
Não cole o texto sensível original em uma ferramenta de IA apenas para perguntar o que deve ser mascarado.
Não suponha que uma expressão regular consegue identificar com segurança qualquer nome de pessoa.
Não dependa de um único padrão de telefone se a fonte puder conter espaços, códigos internacionais, ramais, parênteses ou outros formatos.
Não exclua o relatório de correspondências antes de terminar a revisão do texto mascarado, mas proteja esse relatório porque ele contém os identificadores originais.
Não sobrescreva o arquivo de origem. Mantenha o original separado da cópia mascarada.
Não suponha que mascarar três categorias remova informações empresariais confidenciais, credenciais, dados financeiros, informações de saúde ou outros conteúdos sensíveis.
Em fluxos de trabalho reais, defina o que deve ser removido com base no documento, na política aplicável e no objetivo da tarefa com IA. Quando possível, forneça apenas o mínimo de texto necessário para a tarefa em vez de mascarar um documento grande e enviá-lo por completo.
Registro de execução e verificação
ChatGPT Python tool · Python 3.x · standard library only
A primeira execução foi concluída com sucesso.
O console informou que 2 nomes únicos, 2 emails únicos e 2 números de telefone únicos foram mascarados.
replacements.csv continha exatamente 6 linhas: Alice Kim -> [NAME_1], Bob Lee -> [NAME_2], duas substituições de email e duas substituições de telefone.
outputs/message_masked.txt substituiu os dois nomes completos aprovados, os dois emails e os dois números de telefone.
A referência abreviada 'Alice' permaneceu sem mascaramento porque o código substitui apenas o nome aprovado exato 'Alice Kim'.
A referência deliberadamente abreviada 'A. Kim' também permaneceu sem mascaramento, como esperado.
message.txt não foi modificado.
Uma segunda execução foi interrompida porque outputs já existia, confirmando o comportamento de não sobrescrita.
Verificação local em 2026-09-21 com Python 3.12.14: o exemplo corrigido passou, assim como a preservação dos originais e a proteção contra sobrescrita.
Limites da verificação
A lógica de full-name é intencionalmente uma allowlist de correspondência exata com apenas dois nomes e não é um detector geral de dados pessoais.
O ambiente Python emitiu um aviso não relacionado de aquecimento do ambiente de planilhas; isso não afetou a execução do script nem os arquivos gerados.
Fontes de referência
As explicações e os exemplos são de elaboração própria. Os comportamentos e conceitos relacionados podem ser consultados nas fontes oficiais abaixo.
Transforme “automatize isso” em uma descrição de tarefa executável. Anexe uma amostra sintética sem dados sensíveis e um resultado esperado verificado manualmente para completar uma solicitação de script que totaliza registros de trabalho por equipe.
Verifique uma função de agregação com quatro linhas que você pode calcular manualmente e 12 unit tests. Verifique não apenas valores normais, mas também entrada vazia, zero, decimais e entrada inválida.
Compare um relatório de IA com os dados de origem, recalcule totais e percentuais e use um prompt para identificar afirmações sem respaldo e causas exageradas antes da entrega.
Trate uma regex gerada por IA como um rascunho, não como uma regra final. Monte uma pequena tabela de testes sintéticos, compare os resultados esperados com as correspondências reais, revise o padrão e salve um relatório de revisão antes de usá-lo em dados reais.