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

⚡ Resumen inteligente

La derivación y la lematización son técnicas de normalización de texto en Python NLTK que reduce las variaciones de las palabras a una base común, donde el desarraigo recorta los sufijos rápidamente sin contexto y la lematización devuelve una palabra de diccionario verdadera usando el significado.

  • ???? Derivado: El algoritmo PorterStemmer utiliza sufijos para llegar a una raíz que puede no ser una palabra real.
  • 📚 Lematización: El WordNetLemmatizer devuelve la forma base del diccionario, llamada lema.
  • 🇧🇷 Diferencia: La derivación de raíces es más rápida, la lematización es más lenta pero más precisa y tiene en cuenta el contexto.
  • 🔤 Normalización: Ambos métodos reducen la densidad de palabras, por lo que las máquinas tratan las variantes como una sola característica.
  • 🏷️ Etiquetas POS: Al pasar una etiqueta de categoría gramatical, el lematizador se vuelve mucho más preciso.
  • 🤖 Beneficio de la IA: Un texto normalizado y más limpio produce características y modelos de aprendizaje automático más robustos.

Derivación y lematización en Python NLTK

¿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 derivación y la lematización radica en que la derivación es más rápida porque elimina palabras sin conocer el contexto, mientras que la lematización es más lenta porque 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 lenguajeEs una técnica en la que un conjunto de palabras en una oración se convierten en una secuencia para acortar la búsqueda. En este método, las palabras que tienen el mismo significado pero algunas variaciones según el contexto o la oración se normalizan. En otras palabras, hay una palabra raíz, pero hay muchas variaciones de la misma palabra. Por ejemplo, la palabra raíz es "comer" y sus variaciones son "come, comiendo, comido, etc." De la misma manera, con la ayuda de Stemming en Python, podemos encontrar la palabra 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: una actividad de equitación en el pasado. Un ser humano puede comprender fácilmente que ambos significados son iguales. Sin embargo, para las máquinas, ambas oraciones son diferentes. Por lo tanto, resulta difícil convertirlas en la misma fila de datos. Si no proporcionamos el mismo conjunto de datos, la máquina no podrá predecir. Así pues, es necesario diferenciar el significado de cada palabra para preparar el conjunto de datos para el aprendizaje automático. Aquí se utiliza la lematización para categorizar el mismo tipo de datos mediante la obtención de su palabra raíz.

Implementemos esto con un Python programa. NLTK tiene un algoritmo llamado PorteroStemmerEste algoritmo acepta la lista de palabras tokenizadas y las reduce a palabras raíz.

Programa para comprender la raíz

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

Code Explicación:

  • NLTK incluye un módulo llamado stem que se importa. Si se importa el módulo completo, el programa se vuelve pesado, ya que contiene miles de líneas de código. Por lo tanto, del módulo stem completo, 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.
  • Pasamos los elementos a PorterStemmer uno por uno usando un bucle "for". Finalmente, obtuvimos la palabra raíz de cada palabra mencionada en la lista.

De lo anterior se desprende que la lematización es un paso importante del preprocesamiento, ya que elimina la redundancia y las variaciones dentro de una misma palabra. Como resultado, los datos se filtran, lo que facilita un mejor entrenamiento de la máquina. Ahora introducimos una oración completa y comprobamos su resultado.

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

Code Explicación:

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

En resumen, la lematización es un módulo de preprocesamiento de datos. El idioma inglés tiene muchas variaciones de una misma palabra, lo que genera ambigüedad en el entrenamiento y la predicción del aprendizaje automático. Para construir un modelo exitoso, es fundamental filtrar estas palabras en los mismos datos secuenciados mediante la lematización. Esto también se conoce como normalización.

¿Qué es la lematización?

Lematización En NLTK, la lematización es el proceso algorítmico de encontrar el lema de una palabra según su significado y contexto. Generalmente, se refiere al análisis morfológico de las palabras, cuyo objetivo es eliminar las terminaciones flexivas. Esto ayuda a obtener la forma base o de diccionario de una palabra, conocida como lema. El método de lematización de NLTK se basa en la función morph integrada de WordNet. El preprocesamiento de texto incluye tanto la derivación como la lematización. Muchas personas encuentran confusos estos dos términos. Algunos los tratan como si fueran lo mismo, pero existe una diferencia entre derivación y lematización. La lematización se prefiere a la primera por la razón que se indica a continuación.

¿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 potente y tiene en cuenta el análisis morfológico de las palabras. Devuelve el lema, que es la forma base de todas sus formas flexivas. Se requiere un conocimiento lingüístico profundo para crear diccionarios y buscar la forma correcta de la palabra. La derivación es una operación general, mientras que la lematización es una operación inteligente donde se busca la forma correcta en el diccionario. Por lo tanto, la lematización ayuda a formar mejores palabras. aprendizaje automático características.

Code para distinguir entre lematización y derivación

Stemming Code:

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

Lematización Code:

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 analizamos la derivación de "studies" y "studying", el resultado es el mismo (studi), pero el lematizador de NLTK proporciona un lema diferente para ambos tokens: "study" para "studies" y "studying" para "studying". Por lo tanto, cuando necesitamos crear un conjunto de características para entrenar una máquina, sería ideal que se priorizara la lematización.

Caso de uso de Lematizer

El Lematizador minimiza la ambigüedad del texto. Palabras como bicicleta o bicicletas se convierten a la palabra base bicicleta. Convierte todas las palabras con el mismo significado pero diferente representación a su forma base, reduciendo la densidad de palabras y ayudando aping Prepara características precisas para entrenar una máquina. Cuanto más limpios estén los datos, más preciso será tu modelo de aprendizaje automático. El lematizador NLTK también ahorra memoria y costes 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)

Salida:

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

Code Explicación:

  • Se importa el lector de corpus wordnet, y WordNetLemmatizer se importa desde wordnet.
  • La tokenización de palabras y la etiqueta de partes de la oración se importan de nltk, y el diccionario predeterminado de collections.
  • Se crea un diccionario donde la primera letra de pos_tag es la clave, que se asigna al valor del diccionario wordnet.
  • El texto se escribe y se tokeniza, y se crea el objeto lemma_function para su uso dentro del bucle.
  • El bucle se ejecuta y lematizar toma dos argumentos: el token y un mapa.ping de pos_tag con el valor wordnet.

Python La lematización tiene una estrecha relación con la Diccionario WordNetPor lo tanto, es esencial estudiar ese tema a continuación.

Preguntas Frecuentes

El descomponedor Porter es la clase PorterStemmer de NLTK. Aplica la eliminación de sufijos.ping Las reglas del algoritmo de Martin Porter de 1980 reducen las palabras en inglés a su raíz, por lo que "waiting", "waited" y "waits" se convierten en "wait".

Utilice la derivación cuando la velocidad y la simplicidad sean más importantes que la legibilidad, como en la indexación de búsquedas, el análisis de sentimientos a gran escala o la reducción de características. Elija la lematización cuando el resultado deba ser una palabra válida y legible para humanos.

La normalización de texto convierte las diferentes formas de una palabra en una representación común. La derivación y la lematización son dos técnicas de normalización que reducen la densidad de palabras, de modo que un modelo trata variantes como "estudio" y "estudios" como una sola característica.

NLTK proporciona PorterStemmer (y otros algoritmos de derivación como Snowball) para la derivación de raíces, y WordNetLemmatizer para la lematización. El lematizador se basa en el diccionario WordNet para devolver la forma base correcta de cada palabra.

Eliminan las variaciones de palabras redundantes, de modo que el modelo de aprendizaje automático percibe características más claras y de menor dimensión. Menos tokens duplicados implican menos ambigüedad durante el entrenamiento y predicciones más precisas en textos desconocidos.

Los modelos de IA modernos infieren el contexto automáticamente, pero WordNetLemmatizer de NLTK necesita una etiqueta de categoría gramatical para desambiguar. Proporcionar esa etiqueta le permite seleccionar el lema correcto; por ejemplo, transforma "learning" en "learn" cuando se etiqueta como verbo.

Una palabra puede ser un sustantivo o un verbo con diferentes lemas. Sin una etiqueta de categoría gramatical, WordNetLemmatizer asume que es un sustantivo. Al pasar la etiqueta correcta, como verbo o adjetivo, se obtiene la forma base adecuada.

No. La derivación solo elimina los sufijos, por lo que «estudios» se convierte en «estudi» y «gritos» en «cri», que no son palabras válidas. La lematización, en cambio, siempre devuelve una palabra real del diccionario como «estudio».

Resumir este post con: