Oculta nombres, correos y teléfonos antes de pegar texto en una herramienta de IA
Elimina o sustituye los datos personales evidentes antes de enviar texto a un asistente de chat con IA y revisa tanto el texto enmascarado como el informe de detección para encontrar lo que se haya escapado. Este tutorial usa un ejemplo sintético pequeño y no modifica el archivo original.
Contenido revisado 2026.09.21Incluye archivos de ejemplo
Ver el índice
La traducción se ha realizado con IA. Comprueba el código, las unidades y los valores junto con el original. La revisión por hablantes nativos de cada idioma aún no se ha completado. English
Para quién esPara personas que quieren hacer una comprobación práctica antes de enviar a una IA textos de trabajo que puedan contener nombres, correos electrónicos o teléfonos.
Preparación
Python 3.12
Un editor de texto y un asistente de chat con IA
01Empieza con un mensaje sintético pequeño
Este ejemplo es completamente sintético. Los nombres, correos electrónicos, números de teléfono, datos de empresa y contenido del mensaje son inventados para el tutorial. El objetivo es practicar cómo retirar datos personales evidentes antes de que el texto salga de tu entorno local.
Guarda el siguiente texto como message.txt. Contiene dos nombres, dos direcciones de correo, dos números de teléfono y una referencia deliberadamente ambigua que una regla de enmascarado simple no 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.
02Pide a la IA un plan de enmascarado, no el texto sensible
Puedes preguntar a un asistente de IA cómo diseñar reglas de enmascarado sin enviarle el documento sensible real. Describe las categorías y usa ejemplos inventados.
Una respuesta útil debe distinguir entre identificadores estructurados y lenguaje no estructurado. Los correos electrónicos y teléfonos suelen tener patrones reconocibles. Los nombres humanos son más difíciles: palabras comunes pueden ser nombres, pueden aparecer iniciales o distintos sistemas de escritura, y una misma persona puede mencionarse de varias formas.
03Convierte la respuesta de la IA en reglas explícitas de enmascarado
Para este ejemplo sintético, usa una pequeña lista aprobada para los nombres y expresiones regulares para correos y teléfonos. Este enfoque es intencionadamente más limitado que un detector general de datos personales.
Tipo de dato
Regla
Marcador
Nombre completo
Sustituir solo los nombres exactos aprobados Alice Kim y Bob Lee
[NAME_1], [NAME_2]
Correo
Detectar patrones comunes con parte local, @ y dominio
[EMAIL_1], [EMAIL_2]
Teléfono
Detectar los dos formatos de teléfono presentes en este ejemplo
[PHONE_1], [PHONE_2]
Otro texto
Dejarlo sin cambios para revisión manual
Sin sustitución automática
Los marcadores coherentes permiten mantener comprensibles las referencias repetidas sin conservar el identificador original. El script de abajo asigna el mismo marcador a las apariciones repetidas del mismo valor detectado.
04Aplica las reglas a una copia local
El siguiente script de Python lee message.txt, aplica las reglas aprobadas y escribe los resultados en una nueva carpeta outputs. También crea un informe replacements.csv con cada valor original detectado y su marcador. Se detiene si outputs ya existe y nunca sobrescribe 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()
Coloca mask_personal_data.py junto a message.txt y ejecuta python mask_personal_data.py. Para este ejemplo exacto, el resultado esperado es que se oculten 2 nombres únicos, 2 correos únicos y 2 teléfonos únicos.
05Comprueba las sustituciones frente al original
Calcula las sustituciones esperadas antes de confiar en el resultado. El script debería registrar seis valores únicos detectados.
Tipo
Original
Sustitución
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]
Alice Kim aparece dos veces en el texto original, pero debe usar [NAME_1] en ambas. El informe contiene valores únicos detectados, no una fila por cada aparición.
06Revisa lo que las reglas automáticas no detectaron
La sustitución automática es solo la primera pasada. Abre outputs/message_masked.txt y lee todo el resultado antes de pegarlo en ningún sitio. En este ejemplo, el último párrafo todavía contiene A. Kim. El script no puede saber a partir de su lista aprobada que esa referencia podría corresponder a Alice Kim.
Busca @ en el archivo enmascarado y confirma que no quede ninguna dirección de correo.
Busca 010- y 02- y confirma que hayan desaparecido los dos formatos de teléfono esperados.
Busca Alice Kim y Bob Lee y confirma que los nombres completos aprobados ya no aparezcan.
Lee cada línea manualmente para detectar iniciales, apodos, firmas, direcciones, identificadores de empleado, números de cuenta, identificadores específicos del proyecto u otro contexto identificable.
Observa que A. Kim permanece. Decide manualmente si identifica a una persona en el documento real y enmárcalo si es necesario.
Compara replacements.csv con el texto original y confirma que cada sustitución corresponda al texto previsto.
07Errores comunes y límites
No pegues el texto sensible original en una herramienta de IA solo para preguntarle qué debería ocultarse.
No supongas que una expresión regular puede identificar de forma fiable cualquier nombre de persona.
No dependas de un único patrón de teléfono si la fuente puede incluir espacios, prefijos internacionales, extensiones, paréntesis u otros formatos.
No elimines el informe de correspondencias hasta terminar de revisar el texto enmascarado, pero protégelo porque contiene los identificadores originales.
No sobrescribas el archivo fuente. Mantén el original separado de la copia enmascarada.
No supongas que ocultar tres categorías elimina información empresarial confidencial, credenciales, datos financieros, información de salud u otros contenidos sensibles.
En flujos de trabajo reales, define qué debe eliminarse según el documento, la política aplicable y el objetivo de la tarea con IA. Cuando sea posible, proporciona solo el mínimo texto necesario para la tarea en lugar de enmascarar un documento grande y enviarlo completo.
Registro de ejecución y verificación
2026-09-21 · hand-checked example · Python 3.12
Revisé manualmente el texto sintético original y las sustituciones esperadas.
El conjunto esperado contiene 2 nombres completos únicos, 2 correos electrónicos únicos y 2 teléfonos únicos.
Alice Kim aparece dos veces, pero debe mapearse de forma consistente a [NAME_1].
La referencia abreviada A. Kim se espera que permanezca sin ocultar y muestra un falso negativo.
El script lee message.txt y solo escribe outputs/message_masked.txt y outputs/replacements.csv.
El script se detiene si outputs ya existe en lugar de sustituir una revisión anterior.
Límites de la verificación
No ejecuté el código Python; el ejemplo pequeño y los resultados esperados se comprobaron manualmente.
La detección de nombres completos usa una lista explícita de dos nombres y no es un sistema general de reconocimiento de entidades.
La expresión regular de correo cubre formas comunes de direcciones, pero no pretende implementar toda la sintaxis válida de correo electrónico.
La expresión regular de teléfono cubre solo los dos formatos usados en este ejemplo sintético.
Enmascarar identificadores evidentes no garantiza anonimización ni cumplimiento de una ley de privacidad o política organizativa concreta.
Las explicaciones y los ejemplos son de elaboración propia. Puedes consultar los comportamientos y conceptos relacionados en las siguientes fuentes oficiales.
Convierte “automatiza esto” en una descripción de tarea ejecutable. Adjunta una muestra sintética sin datos sensibles y un resultado esperado comprobado manualmente para completar una solicitud de script que totalice registros de trabajo por equipo.
Comprueba una función de agregación con cuatro filas que puedes calcular manualmente y 12 unit tests. Verifica no solo valores normales, sino también entrada vacía, cero, decimales y entrada no válida.
Divide un resumen plausible en hechos, cálculos e interpretaciones. Recalcula proporciones y promedios a partir de datos mensuales sintéticos y reescribe las frases con fuentes faltantes o causas exageradas para convertirlas en afirmaciones comprobables.
Trata una expresión regular generada por IA como un borrador, no como una regla terminada. Crea una pequeña tabla de pruebas sintéticas, compara las coincidencias esperadas con las reales, corrige el patrón y guarda un informe de revisión antes de usarlo con datos reales.