Derivado y lematización
¿Qué es Stemming?
Stemming es una técnica que se utiliza para extraer la forma básica de las palabras eliminando afijos de ellas. Es como cortar las ramas de un árbol hasta el tallo. Por ejemplo, la raíz de las palabraseating, eats, eaten es eat.
Los motores de búsqueda utilizan lematización para indexar las palabras. Por eso, en lugar de almacenar todas las formas de una palabra, un motor de búsqueda solo puede almacenar las raíces. De esta forma, la derivación reduce el tamaño del índice y aumenta la precisión de la recuperación.
Varios algoritmos de derivación
En NLTK, stemmerI, cual tiene stem()método, la interfaz tiene todos los lematizadores que vamos a cubrir a continuación. Entendamos con el siguiente diagrama
Algoritmo de derivación de Porter
Es uno de los algoritmos de lematización más comunes que está diseñado básicamente para eliminar y reemplazar sufijos conocidos de palabras en inglés.
Clase PorterStemmer
NLTK tiene PorterStemmerclass con la ayuda de la cual podemos implementar fácilmente algoritmos de Porter Stemmer para la palabra que queremos derivar. Esta clase conoce varias formas de palabras regulares y sufijos con la ayuda de los cuales puede transformar la palabra de entrada en una raíz final. La raíz resultante suele ser una palabra más corta que tiene el mismo significado de raíz. Veamos un ejemplo:
Primero, necesitamos importar el kit de herramientas de lenguaje natural (nltk).
import nltk
Ahora, importe el PorterStemmer class para implementar el algoritmo Porter Stemmer.
from nltk.stem import PorterStemmer
A continuación, cree una instancia de la clase Porter Stemmer de la siguiente manera:
word_stemmer = PorterStemmer()
Ahora, ingrese la palabra que desea derivar.
word_stemmer.stem('writing')
Salida
'write'
word_stemmer.stem('eating')
Salida
'eat'
Ejemplo de implementación completo
import nltk
from nltk.stem import PorterStemmer
word_stemmer = PorterStemmer()
word_stemmer.stem('writing')
Salida
'write'
Algoritmo de derivación de Lancaster
Fue desarrollado en la Universidad de Lancaster y es otro algoritmo de derivación muy común.
LancasterStemmer clase
NLTK tiene LancasterStemmerclass con la ayuda de la cual podemos implementar fácilmente algoritmos de Lancaster Stemmer para la palabra que queremos derivar. Veamos un ejemplo:
Primero, necesitamos importar el kit de herramientas de lenguaje natural (nltk).
import nltk
Ahora, importe el LancasterStemmer clase para implementar el algoritmo Lancaster Stemmer
from nltk.stem import LancasterStemmer
A continuación, cree una instancia de LancasterStemmer clase de la siguiente manera:
Lanc_stemmer = LancasterStemmer()
Ahora, ingrese la palabra que desea derivar.
Lanc_stemmer.stem('eats')
Salida
'eat'
Ejemplo de implementación completo
import nltk
from nltk.stem import LancatserStemmer
Lanc_stemmer = LancasterStemmer()
Lanc_stemmer.stem('eats')
Salida
'eat'
Algoritmo de derivación de expresiones regulares
Con la ayuda de este algoritmo de derivación, podemos construir nuestra propia derivación.
Clase RegexpStemmer
NLTK tiene RegexpStemmerclass con la ayuda de la cual podemos implementar fácilmente algoritmos Stemmer de expresiones regulares. Básicamente, toma una sola expresión regular y elimina cualquier prefijo o sufijo que coincida con la expresión. Veamos un ejemplo:
Primero, necesitamos importar el kit de herramientas de lenguaje natural (nltk).
import nltk
Ahora, importe el RegexpStemmer class para implementar el algoritmo de Stemmer de expresiones regulares.
from nltk.stem import RegexpStemmer
A continuación, cree una instancia de RegexpStemmer class y proporciona el sufijo o prefijo que desea eliminar de la palabra de la siguiente manera:
Reg_stemmer = RegexpStemmer(‘ing’)
Ahora, ingrese la palabra que desea derivar.
Reg_stemmer.stem('eating')
Salida
'eat'
Reg_stemmer.stem('ingeat')
Salida
'eat'
Reg_stemmer.stem('eats')
Salida
'eat'
Ejemplo de implementación completo
import nltk
from nltk.stem import RegexpStemmer
Reg_stemmer = RegexpStemmer()
Reg_stemmer.stem('ingeat')
Salida
'eat'
Algoritmo de derivación de bola de nieve
Es otro algoritmo de derivación muy útil.
Clase SnowballStemmer
NLTK tiene SnowballStemmerclass con la ayuda de la cual podemos implementar fácilmente los algoritmos Snowball Stemmer. Admite 15 idiomas distintos del inglés. Para usar esta clase de vaporización, necesitamos crear una instancia con el nombre del idioma que estamos usando y luego llamar al método stem (). Veamos un ejemplo:
Primero, necesitamos importar el kit de herramientas de lenguaje natural (nltk).
import nltk
Ahora, importe el SnowballStemmer clase para implementar el algoritmo Snowball Stemmer
from nltk.stem import SnowballStemmer
Veamos los idiomas que admite:
SnowballStemmer.languages
Salida
(
'arabic',
'danish',
'dutch',
'english',
'finnish',
'french',
'german',
'hungarian',
'italian',
'norwegian',
'porter',
'portuguese',
'romanian',
'russian',
'spanish',
'swedish'
)
A continuación, cree una instancia de la clase SnowballStemmer con el idioma que desea utilizar. Aquí, estamos creando el lematizador para el idioma "francés".
French_stemmer = SnowballStemmer(‘french’)
Ahora, llame al método stem () e ingrese la palabra que desea derivar.
French_stemmer.stem (‘Bonjoura’)
Salida
'bonjour'
Ejemplo de implementación completo
import nltk
from nltk.stem import SnowballStemmer
French_stemmer = SnowballStemmer(‘french’)
French_stemmer.stem (‘Bonjoura’)
Salida
'bonjour'
¿Qué es la lematización?
La técnica de lematización es como la derivación. La salida que obtendremos después de la lematización se llama 'lema', que es una palabra raíz en lugar de raíz raíz, la salida de la raíz. Después de la lematización, obtendremos una palabra válida que significa lo mismo.
NLTK proporciona WordNetLemmatizer clase que es un envoltorio delgado alrededor del wordnetcuerpo. Esta clase usamorphy() función a la WordNet CorpusReaderclass para encontrar un lema. Entendamos con un ejemplo:
Ejemplo
Primero, necesitamos importar el kit de herramientas de lenguaje natural (nltk).
import nltk
Ahora, importe el WordNetLemmatizer class para implementar la técnica de lematización.
from nltk.stem import WordNetLemmatizer
A continuación, cree una instancia de WordNetLemmatizer clase.
lemmatizer = WordNetLemmatizer()
Ahora, llame al método lemmatize () e ingrese la palabra de la que desea encontrar el lema.
lemmatizer.lemmatize('eating')
Salida
'eating'
lemmatizer.lemmatize('books')
Salida
'book'
Ejemplo de implementación completo
import nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize('books')
Salida
'book'
Diferencia entre derivación y lematización
Entendamos la diferencia entre Stemming y Lemmatization con la ayuda del siguiente ejemplo:
import nltk
from nltk.stem import PorterStemmer
word_stemmer = PorterStemmer()
word_stemmer.stem('believes')
Salida
believ
import nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize(' believes ')
Salida
believ
El resultado de ambos programas indica la principal diferencia entre derivación y lematización. PorterStemmerla clase corta las 'es' de la palabra. Por otra parte,WordNetLemmatizerla clase encuentra una palabra válida. En palabras simples, la técnica de derivación solo mira la forma de la palabra mientras que la técnica de lematización mira el significado de la palabra. Significa que después de aplicar la lematización, siempre obtendremos una palabra válida.