Derivación y lematización en Python NLTK con ejemplos

¿Qué es la lematización y la lematización? Python ¿NTK?

Stemming y Lematización in Python NLTK son técnicas de normalización de texto para el procesamiento del lenguaje natural. Estas técnicas se utilizan ampliamente para el preprocesamiento de texto. La diferencia entre la lematización y la lematización es que la lematización es más rápida, ya que corta las palabras sin conocer el contexto, mientras que la lematización es más lenta, ya que conoce el contexto de las palabras antes de procesarlas.

¿Qué es la derivación?

Stemming es un método de normalización de palabras en Procesamiento natural del lenguaje. Es una técnica en la que un conjunto de palabras de una oración se convierte en una secuencia para acortar su búsqueda. En este método se normalizan las palabras que tienen el mismo significado pero que tienen algunas variaciones según el contexto u oración.

En otras palabras, hay una raíz, pero hay muchas variaciones de las mismas palabras. Por ejemplo, la raíz de la palabra es "comer" y sus variaciones son "come, come, come y así". De la misma manera, con la ayuda de Stemming in Python, podemos encontrar la raíz de cualquier variación.

Por ejemplo:

He was riding.	
He was taking the ride.

En las dos oraciones anteriores, el significado es el mismo, es decir, actividad de montar en bicicleta en el pasado. Un humano puede comprender fácilmente que ambos significados son iguales. Pero para las máquinas, ambas frases son diferentes. Por lo tanto, resultó difícil convertirlo en la misma fila de datos. En caso de que no proporcionemos el mismo conjunto de datos, la máquina no podrá predecir. Por eso es necesario diferenciar el significado de cada palabra para preparar el conjunto de datos para el aprendizaje automático. Y aquí la derivación se utiliza para categorizar el mismo tipo de datos obteniendo su palabra raíz.

Implementemos esto con un Python program.NLTK tiene un algoritmo llamado "PorterStemmer". Este algoritmo acepta la lista de palabras tokenizadas y las deriva en la palabra raíz.

Programa para entender Stemming

from nltk.stem import PorterStemmer
e_words= ["wait", "waiting", "waited", "waits"]
ps =PorterStemmer()
for w in e_words:
    rootWord=ps.stem(w)
    print(rootWord)

Salida:

wait	
wait	
wait	
wait 

Programa para comprender la raíz

Explicación del código:

  • Hay un módulo de raíz en NLTk que se importa. Si importa el módulo completo, el programa se vuelve pesado ya que contiene miles de líneas de códigos. Entonces, de todo el módulo de raíz, solo importamos "PorterStemmer".
  • Preparamos una lista ficticia de datos de variación de la misma palabra.
  • Se crea un objeto que pertenece a la clase nltk.stem.porter.PorterStemmer.
  • Además, se los pasamos a PorterStemmer uno por uno usando el bucle "for". Finalmente, obtuvimos la palabra raíz de salida de cada palabra mencionada en la lista.

De la explicación anterior, también se puede concluir que la derivación se considera un paso de preprocesamiento importante porque eliminó la redundancia en los datos y las variaciones en la misma palabra. Como resultado, se filtran datos que ayudarán a mejorar el entrenamiento de la máquina.

Ahora pasamos una oración completa y verificamos su comportamiento como salida.

Programa:

from nltk.stem import PorterStemmer
from nltk.tokenize import sent_tokenize, word_tokenize
sentence="Hello Guru99, You have to build a very good site and I love visiting your site."
words = word_tokenize(sentence)
ps = PorterStemmer()
for w in words:
	rootWord=ps.stem(w)
	print(rootWord)

Salida:

hello	
guru99	
,	
you	
have	
build	
a	
veri	
good	
site	
and	
I	
love	
visit	
your	
site	 

Programa para comprender la raíz

Explicación del código:

  • El paquete PorterStemer se importa desde el vástago del módulo
  • Se importan paquetes para tokenización de oraciones y palabras.
  • Se escribe una oración que se tokenizará en el siguiente paso.
  • En este paso se implementa la tokenización de palabras derivada de la lematización.
  • Aquí se crea un objeto para PorterStemmer.
  • Se ejecuta el bucle y la derivación de cada palabra se realiza utilizando el objeto creado en la línea de código 5.

Conclusión:

Stemming es un módulo de preprocesamiento de datos. El idioma inglés tiene muchas variaciones de una sola palabra. Estas variaciones crean ambigüedad en el entrenamiento y la predicción del aprendizaje automático. Para crear un modelo exitoso, es vital filtrar dichas palabras y convertirlas al mismo tipo de datos secuenciados mediante derivación. Además, esta es una técnica importante para obtener datos de filas de un conjunto de oraciones y eliminar datos redundantes, también conocida como normalización.

¿Qué es la lematización?

Lematización en NLTK es el proceso algorítmico de encontrar el lema de una palabra dependiendo de su significado y contexto. La lematización suele referirse al análisis morfológico de las palabras, cuyo objetivo es eliminar las terminaciones flexivas. Ayuda a devolver la forma base o de diccionario de una palabra conocida como lema.

El método de lematización NLTK se basa en la función de transformación incorporada de WorldNet. El preprocesamiento de texto incluye tanto la derivación como la lematización. Mucha gente encuentra ambos términos confusos. Algunos los tratan como lo mismo, pero existe una diferencia entre derivación y lematización. Se prefiere la lematización a la primera por el siguiente motivo.

¿Por qué la lematización es mejor que la lematización?

El algoritmo de derivación funciona cortando el sufijo de la palabra. En un sentido más amplio corta el principio o el final de la palabra.

Por el contrario, la lematización es una operación más poderosa y toma en consideración el análisis morfológico de las palabras. Devuelve el lema que es la forma base de todas sus formas flexivas. Se requieren conocimientos lingüísticos profundos para crear diccionarios y buscar la forma adecuada de la palabra. La derivación es una operación general, mientras que la lematización es una operación inteligente en la que se buscará la forma adecuada en el diccionario. Por lo tanto, la lematización ayuda a formar mejores máquina de aprendizaje características.

Código para distinguir entre lematización y derivación

Código derivado:

import nltk
from nltk.stem.porter import PorterStemmer
porter_stemmer  = PorterStemmer()
text = "studies studying cries cry"
tokenization = nltk.word_tokenize(text)
for w in tokenization:
print("Stemming for {} is {}".format(w,porter_stemmer.stem(w)))  

Salida::

Stemming for studies is studi
Stemming for studying is studi
Stemming for cries is cri
Stemming for cry is cri

Código de lematización:

import nltk
	from nltk.stem import 	WordNetLemmatizer
	wordnet_lemmatizer = WordNetLemmatizer()
	text = "studies studying cries cry"
	tokenization = nltk.word_tokenize(text)
	 for w in tokenization:
		print("Lemma for {} is {}".format(w, wordnet_lemmatizer.lemmatize(w)))  

Salida:

Lemma for studies is study
Lemma for studying is studying
Lemma for cries is cry
Lemma for cry is cry

Discusión sobre la producción

Si busca derivar para estudios y estudiar, el resultado es el mismo (studi), pero el lematizador NLTK proporciona un lema diferente para ambos tokens, estudio para estudios y estudio para estudiar. Entonces, cuando necesitemos crear un conjunto de funciones para entrenar la máquina, sería fantástico si se prefiriera la lematización.

Caso de uso de Lematizer

Lemmatizer minimiza la ambigüedad del texto. Palabras de ejemplo como bicicleta o bicicletas se convierten a la palabra base bicicleta. Básicamente, convertirá todas las palabras que tengan el mismo significado pero una representación diferente a su forma base. Reduce la densidad de palabras en el texto dado y ayuda a preparar las características precisas para la máquina de entrenamiento. Cuanto más limpios sean los datos, más inteligente y preciso será su modelo de aprendizaje automático. NLTK Lemmatizer también ahorrará memoria y costos computacionales.

Ejemplo en tiempo real que muestra el uso de la lematización de Wordnet y el etiquetado POS en Python

from nltk.corpus import wordnet as wn
	from nltk.stem.wordnet import WordNetLemmatizer
	from nltk import word_tokenize, pos_tag
	from collections import defaultdict
	tag_map = defaultdict(lambda : wn.NOUN)
	tag_map['J'] = wn.ADJ
	tag_map['V'] = wn.VERB
	tag_map['R'] = wn.ADV

	text = "guru99 is a totally new kind of learning experience."
	tokens = word_tokenize(text)
	lemma_function = WordNetLemmatizer()
	for token, tag in pos_tag(tokens):
		lemma = lemma_function.lemmatize(token, tag_map[tag[0]])
		print(token, "=>", lemma)

Caso de uso de Lematizer

Explicación del código

  • En primer lugar se importa el lector de corpus wordnet.
  • WordNetLemmatizer se importa de Wordnet.
  • La tokenización de palabras y las etiquetas de partes del discurso se importan desde nltk.
  • El diccionario predeterminado se importa de colecciones.
  • Se crea un diccionario donde pos_tag (primera letra) son los valores clave cuyos valores se asignan con el valor del diccionario de WordNet. Hemos tomado solo la primera letra, ya que la usaremos más adelante en el bucle.
  • El texto se escribe y se tokeniza.
  • Se crea el objeto lemma_function que se utilizará dentro del bucle.
  • Se ejecuta el bucle y lematize tomará dos argumentos, uno es un token y el otro es una asignación de pos_tag con el valor de wordnet.

Salida:

guru99 => guru99				
is => be				
totally => totally				
new => new				
kind => kind				
of => of				
learning => learn				
experience => experience				
. => .				 

Python La lematización tiene una estrecha relación con diccionario wordnet, por lo que es fundamental estudiar este tema, por lo que lo mantenemos como el siguiente tema.