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
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
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)
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.