Stemming y lematización con Python NLTK

¿Qué es Stemming?

La derivación es una especie de normalización de las palabras. La normalización es una técnica en la que un conjunto de palabras en una oración se convierte en una secuencia para acortar su búsqueda. Se normalizan las palabras que tienen el mismo significado pero que tienen alguna variación según el contexto o la oración.

En otra palabra, hay una palabra 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 me gusta". De la misma forma, con la ayuda de Stemming, 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 el pasado. Un humano puede entender fácilmente que ambos significados son iguales. Pero para las máquinas, ambas oraciones 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 tanto, 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 usa para categorizar el mismo tipo de datos obteniendo su palabra raíz.

Implementemos esto con un programa Python. 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 PorterStemmere_words= ["wait", "waiting", "waited", "waits"]ps =PorterStemmer()for w in e_words:rootWord=ps.stem(w)print(rootWord)

Salida :

waitwaitwaitwait

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, lo 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 previo al procesamiento importante porque eliminó la redundancia en los datos y las variaciones en la misma palabra. Como resultado, los datos se filtran, lo que ayudará 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 PorterStemmerfrom nltk.tokenize import sent_tokenize, word_tokenizesentence="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)

Producción:

helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite

Explicación del código

  • El paquete PorterStemer se importa de la raíz del módulo
  • Se importan paquetes para la tokenización de frases y palabras
  • Se escribe una oración que se tokenizará en el siguiente paso.
  • La tokenización de Word se implementa en este paso.
  • 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 esas palabras y convertirlas en el mismo tipo de datos secuenciados mediante la derivación. Además, esta es una técnica importante para obtener datos de fila de un conjunto de oraciones y la eliminación de datos redundantes, también conocida como normalización.

¿Qué es la lematización?

La lematización es el proceso algorítmico de encontrar el lema de una palabra en función de su significado. La lematización generalmente se refiere 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, lo que se conoce 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 los dos términos confusos. Algunos los tratan de la misma manera, pero hay una diferencia entre ambos. Se prefiere la lematización sobre la primera debido a la siguiente razón.

¿Por qué la lematización es mejor que la derivació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 requiere un conocimiento lingüístico profundo 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 funciones de aprendizaje automático.

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

Código de origen

import nltkfrom nltk.stem.porter import PorterStemmerporter_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)))

Producción:

Stemming for studies is studiStemming for studying is studiStemming for cries is criStemming for cry is cri

Código de lematización

import nltkfrom nltk.stem import WordNetLemmatizerwordnet_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)))

Producción:

Lemma for studies is studyLemma for studying is studyingLemma for cries is cryLemma for cry is cry

Discusión de la salida:

Si busca derivar para estudiar y estudiar, la salida es la misma (studi) pero lemmatizer proporciona un lema diferente tanto para los tokens de estudio para estudiar como para estudiar para estudiar. Entonces, cuando necesitamos crear un conjunto de características para entrenar la máquina, sería genial si se prefiriera la lematización.

Caso de uso de lematizador:

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 básica. 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. Lemmatizer también ahorra memoria y costos computacionales.

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

from nltk.corpus import wordnet as wnfrom nltk.stem.wordnet import WordNetLemmatizerfrom nltk import word_tokenize, pos_tagfrom collections import defaultdicttag_map = defaultdict(lambda : wn.NOUN)tag_map['J'] = wn.ADJtag_map['V'] = wn.VERBtag_map['R'] = wn.ADVtext = "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 desde wordnet
  • La tokenización de palabras y las partes de la etiqueta de voz se importan de nltk
  • El diccionario predeterminado se importa de colecciones
  • El diccionario se crea donde pos_tag (primera letra) son los valores clave cuyos valores se asignan con el valor del diccionario de wordnet. Hemos tomado la única primera letra ya que la usaremos más adelante en el ciclo.
  • El texto se escribe y se tokeniza.
  • Se crea el objeto lemma_function que se utilizará dentro del bucle
  • Loop se ejecuta y lemmatize tomará dos argumentos, uno es token y el otro es un mapeo de pos_tag con el valor de wordnet.

Producción:

guru99 => guru99is => betotally => totallynew => newkind => kindof => oflearning => learnexperience => experience. => .

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

Articulos interesantes...