Diagrama de temas
-
Procesamiento del Lenguaje Natural
Ing. Ciberseguridad
Guía de la asignatura
Guía de la asignaturaManual del estudiante
Manual del estudianteHorario
HorarioLineamientos
Lineamientos
-
Preparación del texto para análisis
-
Introducción
Esta clase va desde la comprensión del texto no estructurado (Semana 1) hacia la transformación procedimental del lenguaje natural en una forma computable. En ciberseguridad, los correos, tickets y logs narrativos contienen ruido (firmas, HTML, URLs, cadenas reenviadas) y variaciones lingüísticas que, si no se gestionan, degradan la calidad del análisis y generan errores aguas abajo (por ejemplo, patrones falsos o vocabularios inflados). Por ello, esta semana consolida un flujo de trabajo básico de PLN aplicado: tokenización, normalización y limpieza, como precondición para cualquier extracción de patrones o entrenamiento de modelos.
En paralelo, la semana introduce el análisis exploratorio del texto para identificar distribuciones léxicas, frecuencias y regularidades lingüísticas vinculadas a amenazas, y presenta el principio de representación del lenguaje: la idea de que el texto debe mapearse a representaciones (p. ej., listas de tokens, n-gramas, vectores) que preserven señal útil para tareas posteriores. Este puente entre limpieza y exploración permite comenzar a conectar patrones lingüísticos con ataques, dejando listo el dataset del Reto 1 para etapas subsiguientes (etiquetado y clasificación en Reto 2).
Tokenización
La tokenización es el primer paso en cualquier pipeline de PLN. Tokenizar es descomponer datos no estructurados y texto en lenguaje natural en fragmentos de información que pueden considerarse elementos discretos. Las ocurrencias de tokens en un documento pueden usarse directamente como un vector que representa dicho documento.
Lematización
Etimológicamente, la lematización indica el proceso de determinar la forma de una palabra que se constituye en el lema. En PLN, la lematización es una técnica de preprocesamiento de texto que reduce las formas flexionadas de las palabras en un conjunto de datos de texto a una palabra raíz común o forma de diccionario (o lema).
-
2.1. Tokenización y normalización.2.2. Eliminación de ruido: firmas, HTML, URLs.
La y la normalización son importantes en ciberseguridad porque: reducen ruido, disminuyen dimensionalidad, mejoran el análisis exploratorio, preparan el corpus para representación vectorial (Tema 2.5).
2.1.1. La tokenización consiste en dividir el texto en fragmentos manejables (tokens), generalmente palabras.
Esto permite que el sistema deje de “ver” oraciones completas y comience a operar sobre listas de unidades lingüísticas. Hay varios tipos de tokenización:
- Tokenización básica por espacios: Divide por espacios. Es simple pero no siempre precisa.
- Tokenización basada en expresiones regulares: Permite eliminar puntuación y separar correctamente palabras.
- Tokenización avanzada (bibliotecas NLP): Herramientas como spaCy o NLTK consideran reglas lingüísticas más complejas.
2.1.2. La normalización busca reducir variaciones innecesarias que no aportan significado. Incluye:
- Conversión a minúsculas
- Eliminación de caracteres especiales
- Eliminación o reemplazo de URLs
- Eliminación de espacios múltiples.
2.1.3. Ejemplo con Python
Figura 1
Ilustración señala el código Python paso a paso.

Código Python para tokenización y normalización (Creación del autor: Rafael Melgarejo) Ilustración señala el código Python paso a paso
Es recomendable mantener el token “[URL]” para conservar la información estructural, evitar sobreajuste del texto, proteger privacidad y reducir la dimensionalidad. Los Grandes Modelos de Lenguaje realizan tokenización para procesar el texto (prompt) que introduce el usuario.
Aprende más
Para conocer más sobre (La tokenización en LLM), se recomienda el video “¿Qué son los TOKENS? ¡Accede aquí!
2.3. Manejo de stopwords y lematización.En ciberseguridad, gran parte del texto recibido por un SOC no aporta significado semántico relevante para detectar amenazas.
2.2.1. Los principales tipos de amenazas y su localización en contenido son:
- Estructural: HTML, encabezados, respuestas encadenadas
- Administrativo: Firmas corporativas, avisos legales
- Técnico redundante: logs repetidos, timestamps duplicados
Este contenido introduce variabilidad artificial en el corpus y dificulta el aprendizaje automático. El objetivo no es borrar información, sino eliminar redundancia no lingüística.
2.2.2. Principio clave en ciberseguridad
No todo lo repetitivo es ruido (Jurafsky,2023). Una URL, un dominio externo, palabras urgentes NO constituyen ruido. El ruido es información que no cambia la intención comunicativa. Una limpieza excesiva destruye patrones discursivos del ataque, por eso no es recomendable: eliminar mayúsculas urgentes, borrar imperativos, eliminar enlaces.
2.2.3. Ejemplo de eliminación de ruido con Python
- Supongamos el siguiente texto:
- Problemas detectados:
- Eliminación de ruido paso a paso (código Python)
Figura 2
Texto para análisis de Ruido

Nota. Texto para análisis de Ruido (creación de autor Rafael Melgarejo) Tabla
Fragmento Tipo de ruido Saludos cordiales firma mensaje confidencial disclaimer formato email estructura repetitiva Nota. Ejemplos de fragmentos comunes que suelen considerarse ruido textual durante el preprocesamiento de textos en análisis de lenguaje natural. Saludos cordialesTipo de ruido:
firmamensaje confidencialTipo de ruido:
disclaimerformato emailTipo de ruido:
estructura repetitivaFigura 3
Ejemplo Python eliminación de ruido

Ejemplo Python eliminación de ruido (creación de autor Rafael Melgarejo) Ejemplo Python eliminación de ruido
2.4. Distribución léxica y frecuencias.Después de tokenizar, normalizar y eliminar ruido, el texto aún contiene palabras que no aportan información semántica relevante para detectar amezanas. Por ejemplo en: “confirme su cuenta inmediatamente para evitar suspensión”, hay palabras que aparecen usualmente: “su” y “para”. Estas palabras aumentan el tamaño del vocabulario sin mejorar la detección. Entonces es necesario eliminar los stopwords y realizar una reducción lingüística.
2.3.1. Stopwords
Las stopwords son palabras funcionales muy frecuentes cuyo valor discriminativo es bajo, en español por ejemplo: el, la, los, las, de, en, para, su, sus, y, o. Sin embargo, en ciberseguridad no deben eliminarse todas las stopwords (e.g. “su cuenta”, “su contraseña”) porque pueden indicar personalización del ataque (Eisenstein,2019). Usualmente se usan listas de stopwords adaptadas al dominio.
2.3.2. Implementación en Python de stopwords.
NLTK es un kit de herramientas de Python que trabajan con datos de lenguaje natural. Proporciona interfaces para más de 50 corpus y recursos léxicos como WordNet, además de un conjunto de bibliotecas de procesamiento de texto para clasificación, tokenización, , etiquetado, análisis sintáctico y razonamiento semántico, contenedores para bibliotecas de PLN. Posee corpus de varios idiomas.
En las siguientes líneas de código se observa la importación de stopwords desde un corpus de español. Luego, coteja con los stopwords los tokens del texto original para eliminarlos si coinciden.
Figura 4
Ejemplo Python stopwords

Nota. Ejemplo Python stopwords (creación de autor Rafael Melgarejo) 2.3.3. Lematización
La lematización (o lemmatization en inglés) es un proceso lingüístico y computacional que consiste en reducir una palabra en su forma flexionada (es decir, conjugada, en plural, en femenino, con género, tiempo verbal, etc.) a su forma base o canónica, llamada lema. El lema es la forma que aparece en un diccionario, normalmente el infinitivo en verbos, el singular masculino en adjetivos/sustantivos, etc.. Prácticas comunes incluyen transformar los verbos conjugados a su forma regular. Ejemplo: de “confirmó” a “confirmar”, de “verificando” a “verificar”.
La lematización se usa en PLN para:
- Simplificar textos antes de análisis (búsquedas, clasificación de textos, chatbots, análisis de sentimientos, etc.).
- Que el ordenador trate como la misma palabra todas sus variantes (mejora la precisión en motores de búsqueda, recomendadores, etc.).
- Reducir el vocabulario y el ruido en modelos de machine learning.
2.3.4. Lematización en Python con spaCy.
spaCy es una biblioteca para el procesamiento avanzado del lenguaje natural en Python y Cython. Incluye pipelines preentrenados. Admite la tokenización y el entrenamiento en +70 idiomas. Tiene modelos de velocidad y redes neuronales de vanguardia para etiquetado, análisis sintáctico, reconocimiento de entidades con nombre, clasificación de texto y más, aprendizaje multitarea con transformadores preentrenados como BERT, así como un sistema de entrenamiento listo para producción y un empaquetado de modelos, implementación y gestión de flujos de trabajo sencillos. spaCy es un software comercial de código abierto, publicado bajo la licencia MIT.
Para usar spaCy con Python es necesario instalarlo primero, y para manejar vocabulario, sintaxis, entidades en español es común utilizar el modelo de procesamiento “es_core_news_sm”. La ilustración 5 muestra alternativas de instalación de modelos. Advertencia: si utiliza el código en ambiente de Google Colab añada el signo de admiración de la siguiente manera: “!pip install -U spacy”.
Figura 5
Instalación de spaCy y modelo de procesamiento

Instalación de spaCy y modelo de procesamiento (creación de autor Rafael Melgarejo) Instalación de spaCy y modelo de procesamiento
La Ilustración 6 es código para lematizar palabras / frases con spaCy y el modelo pequeño “es_core_news_sm”. Se incluye un texto demostrativo.
Figura 6
Lematización de un texto con spyCy

Lematización de un texto con spyCy (creación de autor Rafael Melgarejo) Lematización de un texto con spyCy
El resultado de la ejecución del código se presenta a continuación( Token, Lema y la categoría gramatical de los elementos del texto:
Tabla
Token Lema POS Los el DET niños niño NOUN corrían correr VERB rápidamente rápidamente ADV por por ADP el el DET parque parque NOUN mientras mientras SCONJ jugaban jugar VERB y y CCONJ reían reir VERB . . PUNCT Nota. Ejemplo de análisis lingüístico en procesamiento de lenguaje natural que muestra la relación entre token, lema y categoría gramatical (POS). LosLema: el
POS: DETniñosLema: niño
POS: NOUNcorríanLema: correr
POS: VERBrápidamenteLema: rápidamente
POS: ADVporLema: por
POS: ADPelLema: el
POS: DETparqueLema: parque
POS: NOUNmientrasLema: mientras
POS: SCONJjugabanLema: jugar
POS: VERByLema: y
POS: CCONJreíanLema: reir
POS: VERB.Lema: .
POS: PUNCTCuando el texto tiene verbos irregulares y formas muy flexionadas hay que tomar en cuenta las formas del lenguaje. En inglés el resultado de la lematización puede no sorprender al usuario final, pero en español es variado. El código de Ilustración 7 toma varias frases y las lematiza.
Figura 7
Lematización verbos irregulares

Lematización verbos irregulares (creación de autor Rafael Melgarejo) Lematización verbos irregulares
El resultado resulta curioso para quien no está acostumbrado:
Original: Fui al médico porque me dolía mucho la cabeza.
Lemas: ir al médico porque yo doler mucho el cabeza .
Original: Estuvimos estudiando toda la noche y nos quedamos dormidos.
Lemas: estuvir estudiar todo el noche y yo quedar dormido .
Original: Las mejores casas están siendo construidas ahora mismo.
Lemas: el mejor casa estar ser construir ahora mismo .
Original: ¡Corre, corrió, corriendo, correremos!
Como se puede observar, con el código proporcionado, el lema de “correremos” es “correremo”, que no es del todo correcto. spaCy utiliza el modo “rule”, y para corregir se lo trata explícitamente. En Ilustración 8 está el código inicial y en la parte inferior el resultado.
Figura 8
Lematización explícita

Lematización explícita (creación de autor Rafael Melgarejo) Lematización explícita
Aprende más
Para conocer más Se recomienda el video tutorial (“NLP - 3 – Lematización”), para revisar casos prácticos mediante Jupyter. El video está en ¡Accede aquí!
Con los pasos realizados hasta aquí, el texto ya no es solo lenguaje, son datos analizables, es decir se ha construido el pipeline de PLN:
TEXTO CRUDO➔Tokenización➔Normalización➔Eliminación de ruido ➔ Stopwords➔Lematización➔CORPUS LIMPIO.
2.5. Principio de representación del lenguaje.Con el objetivo de detectar regularidades discursivas, la distribución léxica describe: qué palabras aparecen, cuántas veces aparecen, y cómo se distribuyen en el corpus. En ciberseguridad, un corpus de phishing (por ejemplo), suele mostrar: verbos imperativos frecuentes, referencias a cuentas o accesos, marcadores de urgencia. Mientras que un corpus legítimo presenta: descripciones técnicas, mensajes de error, y lenguaje colaborativo.
2.4.1. Ley de Zipf
En lenguaje natural pocas palabras aparecen muchas veces, y muchas palabras aparecen pocas veces, esto es distribución de Zipf. En otras palabras, el vocabulario crece, pero solo un subconjunto concentra la información útil.
2.4.2. Implementación de distribución léxica y frecuencia en Python
La Ilustración 9 presenta el código Python para lematizar el texto, calcular las frecuencias usando “collections” y las visualiza con “matplotlib”.
Figura 9
Cálculo y Visualización de frecuencias con Python

Cálculo y Visualización de frecuencias con Python (creación de autor Rafael Melgarejo) Cálculo y Visualización de frecuencias con Python
2.6. Relación entre patrones lingüísticos y ataques.Representación del lenguaje es la manera de convertir el lenguaje humano en números sin perder significado. Las computadoras no entienden palabras, así un modelo de parendizaje automático solamente puede operar con: números, vectores y matrices. En consecuencia, cada documento se transforma en un vector numérico que describe su contenido lingüístico. Un texto, por ejemplo “confirme su cuenta inmediatamente” se convierte en: “[0,1,0,3,0,2…]. Este vector representa: las palabras que aparecen, con qué frecuencia, y su importancia dentro del texto. A continuación dos modelos de representación del lenguaje: Bag of Words, N-grams, y TF-IDF (Jurafsky,2023) .
2.5.1. BoW: Bag of Words
BoW permite detectar patrones como presencia de palabras críticas, vocabulario típico de phishing, y diferencias entre textos legítimos y maliciosos. BoW ignora el orden lenguaje, solo registra presencia y frecuencia de palabras clave. Aunque BoW trata igual palabras muy comunes y palabras importantes; ejemplo: cuenta (muy frecuente)y urgente (más discriminativa). Aunque BoW es simple, interpretable e ideal para enseñanza inicial, no entiende significado ni contexto.
En Python es útil la librería “sklearn”, una herramienta predictiva con Machine Learning para el análisis de datos, especialmente textos, a los cuales transforma en un vector con las veces que aparece cada palabra de un documento.
2.5.2. N-grams (extension de BoW)
Mientras BoW ignora orden, n-grams recupera fragmentos lingüísticos. Esto es importante en ciberseguridad, porque los ataques vienen en combinaciones, no en palabran aisladas. En PLN es posible construir los n-gramas sobre la base de distintos tipos de elementos como por ejemplo fonemas, sílabas, letras, palabras.
2.5.3. TF-IDF (Term Frequency-Inverse Document Frequency)
Es una medida estadística que evalúa la importancia de una palabra dentro de un documento en relación con una colección (corpus). Combina la frecuencia del término (TF) con su rareza (IDF) para resaltar palabras clave significativas, reduciendo el peso de palabras comunes (ej. "el", "que"). La idea central es que no todas las palabras pesan igual, TF-IDF aumenta el peso de las palabras frecuentes en un documento y a su vez raras en el corpus.
En Python con sklearn el vector resultante representa importancia semántica, más que conteo.
Un patrón lingüístico es una regularidad observable en el lenguaje que aparece repetidamente en textos maliciosos. Por ejemplo, en este conjunto de señales “urgente + verificar + cuenta + [URL]” rara vez aparece en comunicaciones técnicas legítimas.
2.6.1. Dimensión discursiva del ataque
Los ataques de ingeniería social operan en tres niveles, como consta a continuación:
Tabla
Nivel Manifestación Cognitivo activar miedo, obediencia o urgencia Discursivo uso estratégico del lenguaje Computacional patrones detectables por PLN Nota. Relación entre los niveles cognitivo, discursivo y computacional en el análisis de intención dentro de textos analizados mediante procesamiento de lenguaje natural (PLN). CognitivoManifestación:
activar miedo, obediencia o urgenciaDiscursivoManifestación:
uso estratégico del lenguajeComputacionalManifestación:
patrones detectables por PLNEl modelo aprende el tercer nivel a partir de los dos primeros (cognitivo y discursivo).
2.6.2. Ejemplos comparativos
- En el texto: “URGENTE: confirme su cuenta inmediatamente para evitar suspensión”, los patrones detectables son:
- Imperativo ➔ confirme
- Urgencia ➔ URGENTE, inmediatamente
- Amenaza ➔ suspensión
- Acción ➔ [URL]
- En el texto: “No puedo acceder a la VPN desde ayer. Aparece error de autenticación”, los patrones detectables son:
- Descripción técnica
- Narrativa explicativa
- Ausencia de coerción.
Como se puede concluir la diferencia central está en la intención comunicativa.
2.6.3. Patrones básicos
El objetivo de un sistema de PLN en ciberseguridad es detectar patrones discursivos asociados a ataques, no es detectar hackers. La ciberseguridad también es análisis del lenguaje. Los patrones que se identifican usualmente son:
- Léxicos: palabras específicas como: urgente, verificar, credenciales.
- Sintácticos: estructuras comunes como: verbos imperativos, o frases cortas de acción.
- Semánticos: la intención implícita como : presión temporal, suplantación institucional, manipulación emocional.
Las principales formas en que se relacionan están en Tabla 1.
Tabla 1
Patrones lingüísticos en distintos tipos de ataques y su detección mediante PLN
Tipo de ataque Patrones lingüísticos típicos que delatan al atacante Cómo los detecta el PLN Phishing / Spear-phishing Urgencia (“actúa ya”, “cuenta suspendida”), errores gramaticales, tono manipulador, palabras clave emocionales, inconsistencias sintácticas Análisis de sentimiento, n-gramas, estilometría, embeddings (BERT) BEC (Business Email Compromise) Imitación del estilo del jefe (longitud de frases, vocabulario, uso de mayúsculas, puntuación) Estilometría (estudio cuantitativo del estilo de escritura) Ingeniería social en chats Lenguaje persuasivo, preguntas excesivas, cambios bruscos de tono Clasificación de texto + detección de anomalías Notas de ransomware Frases típicas (“tus archivos están encriptados”), amenazas en mal inglés Reconocimiento de entidades + topic modeling Amenazas generadas por IA (2025–2026) Texto “demasiado perfecto”, falta de huellas humanas (repetición sutil de patrones, distribución de palabras función) Modelos estilométricos específicos para distinguir humano vs LLM Nota. Relación entre tipos de ataques de ingeniería social y los patrones lingüísticos que pueden ser detectados mediante técnicas de procesamiento de lenguaje natural (PLN). Phishing / Spear-phishingPatrones lingüísticos:
Urgencia (“actúa ya”, “cuenta suspendida”), errores gramaticales, tono manipulador, palabras clave emocionales, inconsistencias sintácticas
Detección PLN:
Análisis de sentimiento, n-gramas, estilometría, embeddings (BERT)BEC (Business Email Compromise)Patrones lingüísticos:
Imitación del estilo del jefe (longitud de frases, vocabulario, uso de mayúsculas, puntuación)
Detección PLN:
Estilometría (estudio cuantitativo del estilo de escritura)Ingeniería social en chatsPatrones lingüísticos:
Lenguaje persuasivo, preguntas excesivas, cambios bruscos de tono
Detección PLN:
Clasificación de texto + detección de anomalíasNotas de ransomwarePatrones lingüísticos:
Frases típicas (“tus archivos están encriptados”), amenazas en mal inglés
Detección PLN:
Reconocimiento de entidades + topic modelingAmenazas generadas por IA (2025–2026)Patrones lingüísticos:
Texto “demasiado perfecto”, falta de huellas humanas (repetición sutil de patrones, distribución de palabras función)
Detección PLN:
Modelos estilométricos específicos para distinguir humano vs LLMEl código en Ilustración 14 extrae features (características) lingüísticas útiles para detectar phishing. Usa “textstat” para métricas de legibilidad y el modelo mediano de procesamiento de lenguaje “es_core_news_md” para mayor precisión.
Figura 11
Extracción de features lingüísticas

Extracción de features lingüísticas (contenido de autor Rafael Extracción de features lingüísticas
El resultado es el siguiente:
- Score urgencia: 4
- Longitud media oración: 12.5
- Legibilidad (Flesch): 41.9 (bajo = sospechoso)
- Palabras más usadas: [('estimado', 1), ('cliente', 1), ('suspender', 1), ('inmediatamente', 1), ('hacer', 1), ('clic', 1), ('verificar', 1), ('dato', 1), ('forma', 1), ('urgente', 1)]
- True
2.6.3. Vectorización
Los patrones en el modelo ya no son frases, sino vectores de la forma: [urgente=1, verificar=1, cuenta=1, error=0, vpn=0]. El lenguaje deja de ser texto y pasa a ser geometría matemática. En este caso, el aprendizaje automático descubre: combinaciones frecuentes, correlaciones lingüísticas, y señales predictivas.
Profundiza más
Este recurso te ayudará a enfatizar sobre (la teoría revisada se ha preparado el notebook de Google Colab “w2_PLN_Profundizacion.ipynb” con todos los pasos. Súba el notebook a ambiente Colab y ejecútelo, contiene la resolución en código de todo el contenido. Se recomienda revisar las diferentes secciones del código.) ¡Accede aquí!
-
Recursos
-
-
Actividades
-