Lematización en Python

| Última modificación: 12 de abril de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

¿Sabes que es lematizacion o, más específicamente, que es la lematizacion en Python?

La lematización en Python es una técnica de normalización de textos que busca reducir las palabras a su raíz (lema). Es muy utilizada para reducir la cardinalidad del vocabulario asociado para diferentes formas flexionadas con un único token (‘entreno’, ‘entrenarás’, ‘entrenaría’ → ‘entrenar’). También se usan mucho en motores de búsqueda.

Veamos un poco más acerca de la lematización en Python y cómo podemos usarla en nuestros procesos de NLP.

Lematización en Python

¿Qué es un lema?

En lingüística, un lema o ítem lexical es una unidad semántica autónoma que constituye el léxico de un idioma. En el vocabulario habitual, una entrada es cada una de las palabras que se definen en un diccionario. Según María Victoria Escandell Vidal en su libro Apuntes de Semántica léxica, los criterios básicos de selección de los lemas son: para los géneros, se usaría el masculino singular (gato); para las formas verbales, el infinitivo (caminar).

Ejemplo de lematización en Python

Lo primero que haremos será importar el módulo:

// lematización
import os

Luego cogemos los lemas del fichero que hemos descargado previamente:

#Lematización en Python
data_path = ' ./data'
lemmas_dict_file = 'lemmatization-es.txt'
#Lematización en Python
def get_lemmas_dict ():
       lemmas_dict = {}
       with open (os.path.join (data_path, lemmas_dict_file), 'r') as f:
               for line in f:
                     (key, val) = line.split ()
                     lemmas_dict [str (val)] = key
       return lemmas_dict
#Lematización en Python
lemmas_dict = get_lemmas_dict ()

Ahora traeremos del fichero todos los lemas que existen:

#Lematización en Python
lemmas_dict
Lematización en Python

Lematización en Python de palabras

Veamos cómo funcionaría la lematización con diferentes palabras:

#Lematización en Python
lemmas_dict.get ('comieron')

‘comer’

#Lematización en Python
lemmas_dict.get ('mama')

‘mamar’

Aquí empiezan las cosas más ambiguas, ya que muchas veces simplificamos tantas veces que confundimos lo que queremos simplificar. Por ejemplo en este caso, no sabemos si la palabra “mama” es de “madre” o de “mamar” (no hemos usado tildes). En el caso de que se refiriera a madre, nos quedaríamos con “mamar” y estaría mal. De ahí el cuidado que hay que tener a la hora de lematizar.

lemmas_dict.get ('cinco')

‘cincar’

Tenemos otro problema, ya que no solo pueden existir equivocaciones en el contexto, sino que además se puede lematizar incorrectamente. Este es el caso de “cinco”, puesto que se hacía referencia al número y no al verbo.

Lematización en Python de frases

Ahora lo que haremos es lematizar la frase entera:

#Lematización en Python
sentence_lemmatized = '  '.join ([lemmas_dict.get (word, word) for word in sentence.split ()])

print (f' Token Lemma')
for word in sentence.split ():
      print (f' {word} {lemmas_dict.get (word, word)}')

Al lado de la palabra nos aparece su respectivo lema: pienso → pensar, la → lo…

Observemos que existen algunas ambigüedades en los resultados de la lematización:

  • de → dar: en este caso “de” no hace referencia al verbo dar (dé), sino a la preposición “de”, sin tilde.

De aquí podemos sacar como conclusión que la mayoría de ambigüedades se dan por la ausencia de tildes en las palabras, por lo que cabría resaltar la importancia de las mismas para que los errores y fenómenos semánticos disminuyan.

Ahora haremos un counter de las 5 palabras más comunes dentro del texto y cuántas veces se repiten:

#Lematización en Python
from collections import Counter

freq_text = 'Palabras con ningún significado o que aportan muy poca' + \
'información. suelen ser palabras muy comunes como, por ejemplo,' + \
'preposiciones. En NLP se suele trabajar con vocabularios enormes' + \
'(en Don Quijote de la Mancha aparecen en torno a 23.000 palabras distintas)' + \
'por lo que interesa filtrar aquellas que menos información aporten.' + \
'Debate: ¿qué significa que aporten información?'

word_freqs = Counter (freq_text.lower ().split ())
word_freqs.most_common (5)

[(‘que’, 4), (‘palabras’, 3), (‘con’, 2), (‘ – ‘, 2), (‘a’, 2)]

¿Para qué simplificar?

Simplificar se convierte en un acto de gran importancia, porque muchas veces las palabras más útiles van en proporción a lo que se repiten a lo largo del texto. De este modo, si tenemos, por ejemplo, un verbo en sus diferentes formas verbales, va a parecer que son diferentes palabras si se repite mucho.

¿Quieres seguir avanzando?

Ahora que has aprendido qué es la lematización en Python, podemos seguir aprendiendo y haciendo avances en el propósito de triunfar en el mundillo. Para poder acceder a las opciones laborales del Big Data, unas de las áreas mejor pagadas y más demandadas del mercado laboral actual, tenemos para ti el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp. Con esta formación intensiva e íntegra lograrás obtener los conocimientos teóricos y prácticos necesarios para alcanzar tus metas IT en pocos meses. ¡No esperes más para impulsar tu carrera y solicita ya más información!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado