Lematização e Lematização em Python NLTK com exemplos
⚡ Resumo Inteligente
Stemming e lematização são técnicas de normalização de texto em Python NLTK, que reduz as variações de palavras a uma base comum, onde a remoção do radical elimina os sufixos rapidamente, sem contexto, e a lematização retorna uma palavra verdadeira do dicionário, usando o significado.

O que é stemming e lematização Python NLTK?
Stemming e Lematização in Python NLTK são técnicas de normalização de texto para Processamento de Linguagem Natural. Essas técnicas são amplamente utilizadas para pré-processamento de texto. A diferença entre stemming e lematização é que o stemming é mais rápido porque elimina palavras sem conhecer o contexto, enquanto a lematização é mais lenta porque conhece o contexto das palavras antes do processamento.
O que é stemização?
Stemming é um método de normalização de palavras em Processamento de Linguagem NaturalÉ uma técnica na qual um conjunto de palavras em uma frase é convertido em uma sequência para encurtar a busca. Nesse método, as palavras que têm o mesmo significado, mas algumas variações de acordo com o contexto ou a frase, são normalizadas. Em outras palavras, existe uma palavra raiz, mas existem muitas variações da mesma palavra. Por exemplo, a palavra raiz é "comer" e suas variações são "come", "comendo", "comido", e assim por diante. Da mesma forma, com a ajuda do Stemming em Python, podemos encontrar a palavra raiz de qualquer variação.
Por exemplo:
He was riding. He was taking the ride.
Nas duas frases acima, o significado é o mesmo, ou seja, uma atividade de equitação no passado. Um ser humano pode facilmente entender que ambos os significados são iguais. Mas para as máquinas, as duas frases são diferentes. Assim, torna-se difícil convertê-las em uma mesma linha de dados. Se não fornecermos o mesmo conjunto de dados, a máquina falhará na previsão. Portanto, é necessário diferenciar o significado de cada palavra para preparar o conjunto de dados para o aprendizado de máquina. Aqui, o stemming é usado para categorizar dados do mesmo tipo, obtendo sua raiz.
Vamos implementar isso com um Python programa. O NLTK possui um algoritmo chamado Porter StemmerEste algoritmo aceita uma lista de palavras tokenizadas e as transforma em palavras-raiz.
Programa para compreender o 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)
Saída:
wait wait wait wait
Code Explicação:
- Existe um módulo stem no NLTK que é importado. Se você importar o módulo completo, o programa ficará pesado, pois contém milhares de linhas de código. Portanto, do módulo stem completo, importamos apenas o “PorterStemmer”.
- Preparamos uma lista fictícia de dados de variação da mesma palavra.
- É criado um objeto que pertence à classe nltk.stem.porter.PorterStemmer.
- Passamos os itens para o PorterStemmer um por um usando um loop "for". Finalmente, obtivemos a raiz de cada palavra mencionada na lista.
Conforme exposto acima, o stemming é uma etapa importante de pré-processamento, pois remove redundâncias e variações da mesma palavra. Como resultado, os dados são filtrados, o que auxilia em um melhor treinamento da máquina. Agora, inserimos uma frase completa e verificamos sua saída.
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)
Saída:
hello
guru99
,
you
have
build
a
veri
good
site
and
I
love
visit
your
site
Code Explicação:
- O pacote PorterStemmer é importado do módulo stem.
- Pacotes para tokenização de frases, assim como de palavras, são importados.
- Uma frase é escrita e deve ser tokenizada na próxima etapa.
- Um objeto para PorterStemmer é criado aqui.
- É executado um loop e a lematização de cada palavra é realizada usando o objeto criado na linha de código 5.
Em resumo, o stemming é um módulo de pré-processamento de dados. A língua inglesa possui muitas variações de uma mesma palavra, o que gera ambiguidade no treinamento e na previsão de aprendizado de máquina. Para construir um modelo eficaz, é fundamental filtrar essas palavras e organizá-las em uma mesma sequência de dados usando o stemming. Isso também é conhecido como normalização.
O que é Lematização?
Lemmatização Em NLTK, a lematização é o processo algorítmico de encontrar o lema de uma palavra com base em seu significado e contexto. A lematização geralmente se refere à análise morfológica das palavras, que visa remover as terminações flexionais. Ela ajuda a retornar a forma base ou de dicionário de uma palavra, conhecida como lema. O método de lematização do NLTK é baseado na função morph integrada do WordNet. O pré-processamento de texto inclui tanto a lematização quanto a stemming. Muitas pessoas confundem os dois termos. Algumas os tratam como sinônimos, mas existe uma diferença entre lematização e stemming. A lematização é preferida em relação ao stemming pelo motivo descrito abaixo.
Por que a Lematização é melhor do que o Stemming?
O algoritmo de stemming funciona removendo o sufixo da palavra. Em um sentido mais amplo, ele remove o início ou o fim da palavra. Por outro lado, a lematização é uma operação mais poderosa, que leva em consideração a análise morfológica das palavras. Ela retorna o lema, que é a forma base de todas as suas flexões. É necessário um conhecimento linguístico aprofundado para criar dicionários e buscar a forma correta da palavra. O stemming é uma operação geral, enquanto a lematização é uma operação inteligente que busca a forma correta no dicionário. Portanto, a lematização ajuda a formar palavras mais concisas e eficazes. aprendizado de máquina características.
Code Para distinguir entre lematização e stemming.
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)))
Saída:
Stemming for studies is studi Stemming for studying is studi Stemming for cries is cri Stemming for cry is cri
Lemmatização 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)))
Saída:
Lemma for studies is study Lemma for studying is studying Lemma for cries is cry Lemma for cry is cry
Discussão do Resultado
Se você analisar a lematização de "studies" e "studing", a saída é a mesma ("studi"), mas o lematizador do NLTK fornece um lema diferente para cada token: "study" para "studies" e "studing" para "studing". Portanto, quando precisamos criar um conjunto de recursos para treinar uma máquina, seria ótimo se a lematização fosse priorizada.
Caso de uso do lematizador
O Lematizador minimiza a ambiguidade do texto. Palavras como "bicicleta" ou "bicicletas" são convertidas para a palavra base "bicicleta". Ele converte todas as palavras com o mesmo significado, mas com representações diferentes, para sua forma base, reduzindo a densidade de palavras e ajudando na legibilidade.ping Prepare características precisas para o treinamento de uma máquina. Quanto mais limpos os dados, mais preciso será o seu modelo de aprendizado de máquina. O Lemmatizador do NLTK também economiza memória e custos computacionais.
Exemplo em tempo real mostrando o uso da lematização do WordNet e da etiquetagem POS em 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)
Saída:
guru99 => guru99 is => be totally => totally new => new kind => kind of => of learning => learn experience => experience . => .
Code Explicação:
- O leitor de corpus WordNet foi importado, e o WordNetLemmatizer foi importado do WordNet.
- A tokenização de palavras e as etiquetas de classes gramaticais são importadas do NLTK, e o dicionário padrão é importado das coleções.
- É criado um dicionário onde a primeira letra de pos_tag é a chave, mapeada para o valor do dicionário WordNet.
- O texto é escrito e tokenizado, e o objeto lemma_function é criado para uso dentro do loop.
- O loop é executado e a função `lemmatize` recebe dois argumentos: o token e um mapa.ping de pos_tag com o valor wordnet.
Python A lematização tem uma relação estreita com a Dicionário WordNetPortanto, é essencial estudar esse tópico em seguida.
