Uso de IA en el trabajo

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.

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 datoReglaMarcador
Nombre completoSustituir solo los nombres exactos aprobados Alice Kim y Bob Lee[NAME_1], [NAME_2]
CorreoDetectar patrones comunes con parte local, @ y dominio[EMAIL_1], [EMAIL_2]
TeléfonoDetectar los dos formatos de teléfono presentes en este ejemplo[PHONE_1], [PHONE_2]
Otro textoDejarlo sin cambios para revisión manualSin 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.

TipoOriginalSustitución
NAMEAlice Kim[NAME_1]
NAMEBob Lee[NAME_2]
EMAILalice.kim@example.com[EMAIL_1]
EMAILbob.lee@example.com[EMAIL_2]
PHONE010-1234-5678[PHONE_1]
PHONE02-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.

  1. Busca @ en el archivo enmascarado y confirma que no quede ninguna dirección de correo.
  2. Busca 010- y 02- y confirma que hayan desaparecido los dos formatos de teléfono esperados.
  3. Busca Alice Kim y Bob Lee y confirma que los nombres completos aprobados ya no aparezcan.
  4. 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.
  5. Observa que A. Kim permanece. Decide manualmente si identifica a una persona en el documento real y enmárcalo si es necesario.
  6. 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.

Criterios de redacción y verificación de todo el sitio

Fuentes de referencia

Las explicaciones y los ejemplos son de elaboración propia. Puedes consultar los comportamientos y conceptos relacionados en las siguientes fuentes oficiales.