Derivação e lematização
O que é Stemming?
Stemming é uma técnica usada para extrair a forma básica das palavras removendo afixos delas. É como cortar os galhos de uma árvore até o caule. Por exemplo, a raiz das palavraseating, eats, eaten é eat.
Os motores de busca usam derivação para indexar as palavras. É por isso que, em vez de armazenar todas as formas de uma palavra, um mecanismo de pesquisa pode armazenar apenas as raízes. Dessa forma, a derivação reduz o tamanho do índice e aumenta a precisão da recuperação.
Vários algoritmos de Stemming
Em NLTK, stemmerI, que tem stem(), interface tem todos os lematizadores que iremos cobrir a seguir. Vamos entender isso com o seguinte diagrama
Algoritmo de lematização de Porter
É um dos algoritmos de lematização mais comuns que é basicamente projetado para remover e substituir sufixos conhecidos de palavras em inglês.
Aula PorterStemmer
NLTK tem PorterStemmercom a ajuda da qual podemos facilmente implementar algoritmos de Porter Stemmer para a palavra que queremos derivar. Esta classe conhece várias formas de palavras regulares e sufixos com a ajuda dos quais pode transformar a palavra de entrada em um radical final. O radical resultante geralmente é uma palavra mais curta com o mesmo significado de raiz. Vamos ver um exemplo -
Primeiro, precisamos importar o kit de ferramentas de linguagem natural (nltk).
import nltk
Agora, importe o PorterStemmer classe para implementar o algoritmo Porter Stemmer.
from nltk.stem import PorterStemmer
Em seguida, crie uma instância da classe Porter Stemmer da seguinte maneira -
word_stemmer = PorterStemmer()
Agora, insira a palavra que você deseja radicalizar.
word_stemmer.stem('writing')
Resultado
'write'
word_stemmer.stem('eating')
Resultado
'eat'
Exemplo de implementação completo
import nltk
from nltk.stem import PorterStemmer
word_stemmer = PorterStemmer()
word_stemmer.stem('writing')
Resultado
'write'
Algoritmo de lematização de Lancaster
Ele foi desenvolvido na Lancaster University e é outro algoritmo de derivação muito comum.
Classe LancasterStemmer
NLTK tem LancasterStemmerclasse com a ajuda da qual podemos implementar facilmente algoritmos Lancaster Stemmer para a palavra que queremos derivar. Vamos ver um exemplo -
Primeiro, precisamos importar o kit de ferramentas de linguagem natural (nltk).
import nltk
Agora, importe o LancasterStemmer classe para implementar o algoritmo Lancaster Stemmer
from nltk.stem import LancasterStemmer
Em seguida, crie uma instância de LancasterStemmer classe como segue -
Lanc_stemmer = LancasterStemmer()
Agora, insira a palavra que você deseja radicalizar.
Lanc_stemmer.stem('eats')
Resultado
'eat'
Exemplo de implementação completo
import nltk
from nltk.stem import LancatserStemmer
Lanc_stemmer = LancasterStemmer()
Lanc_stemmer.stem('eats')
Resultado
'eat'
Algoritmo de lematização de expressão regular
Com a ajuda deste algoritmo de lematização, podemos construir nosso próprio lematizador.
Classe RegexpStemmer
NLTK tem RegexpStemmerclasse com a ajuda da qual podemos implementar facilmente algoritmos de Stemmer de Expressão Regular. Basicamente, ele pega uma única expressão regular e remove qualquer prefixo ou sufixo que corresponda à expressão. Vamos ver um exemplo -
Primeiro, precisamos importar o kit de ferramentas de linguagem natural (nltk).
import nltk
Agora, importe o RegexpStemmer classe para implementar o algoritmo Regular Expression Stemmer.
from nltk.stem import RegexpStemmer
Em seguida, crie uma instância de RegexpStemmer classe e fornece o sufixo ou prefixo que você deseja remover da palavra da seguinte maneira -
Reg_stemmer = RegexpStemmer(‘ing’)
Agora, insira a palavra que você deseja radicalizar.
Reg_stemmer.stem('eating')
Resultado
'eat'
Reg_stemmer.stem('ingeat')
Resultado
'eat'
Reg_stemmer.stem('eats')
Resultado
'eat'
Exemplo de implementação completo
import nltk
from nltk.stem import RegexpStemmer
Reg_stemmer = RegexpStemmer()
Reg_stemmer.stem('ingeat')
Resultado
'eat'
Algoritmo de stemming bola de neve
É outro algoritmo de derivação muito útil.
Aula SnowballStemmer
NLTK tem SnowballStemmerclasse com a ajuda da qual podemos facilmente implementar algoritmos Snowball Stemmer. Ele suporta 15 idiomas diferentes do inglês. Para usar essa classe fumegante, precisamos criar uma instância com o nome da linguagem que estamos usando e, em seguida, chamar o método stem (). Vamos ver um exemplo -
Primeiro, precisamos importar o kit de ferramentas de linguagem natural (nltk).
import nltk
Agora, importe o SnowballStemmer classe para implementar o algoritmo Snowball Stemmer
from nltk.stem import SnowballStemmer
Vamos ver os idiomas que ele suporta -
SnowballStemmer.languages
Resultado
(
'arabic',
'danish',
'dutch',
'english',
'finnish',
'french',
'german',
'hungarian',
'italian',
'norwegian',
'porter',
'portuguese',
'romanian',
'russian',
'spanish',
'swedish'
)
Em seguida, crie uma instância da classe SnowballStemmer com o idioma que deseja usar. Aqui, estamos criando o lematizador para o idioma 'francês'.
French_stemmer = SnowballStemmer(‘french’)
Agora, chame o método stem () e insira a palavra que você deseja transformar.
French_stemmer.stem (‘Bonjoura’)
Resultado
'bonjour'
Exemplo de implementação completo
import nltk
from nltk.stem import SnowballStemmer
French_stemmer = SnowballStemmer(‘french’)
French_stemmer.stem (‘Bonjoura’)
Resultado
'bonjour'
O que é Lemmatização?
A técnica de lematização é como uma derivação. A saída que obteremos após a lematização é chamada de 'lema', que é uma palavra raiz em vez de radical, a saída da lematização. Após a lematização, estaremos obtendo uma palavra válida que significa a mesma coisa.
NLTK fornece WordNetLemmatizer classe que é um invólucro fino em torno do wordnetcorpus. Esta classe usamorphy() função para o WordNet CorpusReaderclasse para encontrar um lema. Vamos entender isso com um exemplo -
Exemplo
Primeiro, precisamos importar o kit de ferramentas de linguagem natural (nltk).
import nltk
Agora, importe o WordNetLemmatizer aula para implementar a técnica de lematização.
from nltk.stem import WordNetLemmatizer
Em seguida, crie uma instância de WordNetLemmatizer classe.
lemmatizer = WordNetLemmatizer()
Agora, chame o método lemmatize () e insira a palavra da qual deseja encontrar o lema.
lemmatizer.lemmatize('eating')
Resultado
'eating'
lemmatizer.lemmatize('books')
Resultado
'book'
Exemplo de implementação completo
import nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize('books')
Resultado
'book'
Diferença entre Stemming e Lemmatization
Vamos entender a diferença entre Stemming e Lemmatization com a ajuda do seguinte exemplo -
import nltk
from nltk.stem import PorterStemmer
word_stemmer = PorterStemmer()
word_stemmer.stem('believes')
Resultado
believ
import nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize(' believes ')
Resultado
believ
A saída de ambos os programas indica a principal diferença entre lematização e lematização. PorterStemmerclasse corta os 'es' da palavra. Por outro lado,WordNetLemmatizerclasse encontra uma palavra válida. Em palavras simples, a técnica de lematização analisa apenas a forma da palavra, enquanto a técnica de lematização analisa o significado da palavra. Isso significa que depois de aplicar a lematização, sempre obteremos uma palavra válida.