Mostrando entradas con la etiqueta SpaCy. Mostrar todas las entradas
Mostrando entradas con la etiqueta SpaCy. Mostrar todas las entradas

lunes, 1 de junio de 2026

DATOS. Tratamiento de datos

Datos no estructurados (III)

Simplificación (lematización)

Siguiendo la lógica de las entradas anteriores, lo que implica mantenerse dentro del enfoque BoW, aun podemos (y en buena lógica, debemos) ejecutar un segundo procedimiento de simplificación de la carga léxica, reduciendo el número total de palabras que componen "la bolsa". Este procedimiento también puede ser visto como una segunda forma de normalización en cuanto supone eliminar la variabilidad morfológica de las palabras.

Llamamos lematización a esta tercera fase del tratamiento de los datos textual no estructurados y consiste en reducir las palabras a una única representación de la posible variación de formas que derivan de las reglas morfológicas del lenguaje. La consecuencia esperada es reducir la posible variabilidad morfológica que se pueda dar en el texto con el que estemos trabajando, aunque tiene más sentido (y mayor rendimiento) cuando trabajamos con cierto número de textos.

El texto que tomamos ahora como texto de partida, es el resultante del proceso previo de simplificación léxica:

alumno presenta comportamiento atipico aula observa incremento ansiedad clases matematicas orientador indica caso urgente requiere atencion inmediata informe padres no co operan pautas proximo miercoles realizara evaluacion psicologica nota importante no debe clasificar menor evidencias científicas

El principal efecto de la aplicación a este texto de la tercera fase del proceso es reducir el la dispersión del vocabulario y su consecuencia: la simplificación de las dimensiones de la matriz de palabras. Un ejemplo, palabras como las sigueintes ("presenta", "presentó", "presentan" o "presentación") se registran como términos diferentes en la bolsa de palabras, aumentando su tamaño y el número de dimensiones de la matriz derivada. Para reducir estas variaciones morfológicas a un único elemento único podemos optar por dos técnicas:

  • La lematización, que reduce la palabra a su forma canónica o de diccionario (el infinitivo para los verbos, el masculino singular para sustantivos y adjetivos).
  • El truncamiento (stemming), que consiste en corta los sufijos de la palabra para quedarse con su raíz ("psicolog" representa "psicológica", "psicólogo"...).
Aunque podemos aplicar cualquiera de los dos procedimientos, el usado con más frecuencia (por razones obvias de naturaleza semántica) es la lematización, y la herramienta más empleada para llevarla a cabo es la biblioteca spacy, debido a que nltk es adecuada para el truncamiento, pero requiere adaptaciones de cierta complejidad para realizar lematización en español.


import spacy

# 1. Cargar el modelo en español de SpaCy (descarga previa con: python -m spacy download es_core_news_sm)

nlp = spacy.load("es_core_news_sm")

# 2. Texto original

texto = (
    "alumno presenta comportamiento atipico aula observa incremento ansiedad clases "
    "matematicas orientador indica caso urgente requiere atencion inmediata informe "
    "padres no co operan pautas proximo miercoles realizara evaluacion psicologica "
    "nota importante no debe clasificar menor evidencias científicas"
)

# 3. Procesar el texto con SpaCy

doc = nlp(texto)

# 4. Extraer los lemas (Filtramos preventivamente espacios extra o puntuación, aunque en este texto es innecesario)

palabras_lematizadas = [token.lemma_ for token in doc if not token.is_punct and not token.is_space]

# 5. Mostrar el resultado como una lista y como texto unificado

print("--- Lista de palabras lematizadas ---")
print(palabras_lematizadas)

print("\n--- Texto lematizado ---")
print(" ".join(palabras_lematizadas))


Lo nuevo del procedimiento se concreta en el procesamiento del texto con SpaCy mediante doc = nlp(texto), habiendo sido asignado a nlp el modelo Spacy previamente cargado nlp = spacy.load("es_core_news_sm") y la extracción de los lemas palabras_lematizadas = [token.lemma_ for token in doc], aunque en nuestra instrucción hemos incluído la limpieza preventiva de espacios y signos de puntuación if not token.is_punct and not token.is_space]. Debo recordar que este procedimiento, como se observa en la salida posterior, implica la tokenización del contenido del texto.

El resultado que obtenemos (después de recomponer el texto print(" ".join(palabras_lematizadas)) es el texto siguiente, que puedes comparar con el previo.

alumno presentar comportamiento atipico aula observar incremento ansiedad clase matematica orientador indicar caso urgente requerir atencion inmediato informe padr no co operar pauta proximo miercol realizar evaluacion psicologico nota importante no deber clasificar menor evidencia científico