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.

  • ???? Derivação: O PorterStemmer remove sufixos para chegar a uma raiz que pode não ser uma palavra real.
  • 📚 Lemmatização: O WordNetLemmatizer retorna a forma base do dicionário, chamada lema.
  • ⚖️ Diferença: A lematização é mais rápida, enquanto a redução a radicais é mais lenta, porém mais precisa e contextualizada.
  • 🔤 Normalização: Ambas as abordagens reduzem a densidade de palavras para que as máquinas tratem as variantes como uma única característica.
  • 🏷️ Etiquetas POS: A inclusão de uma etiqueta gramatical torna o lematizador muito mais preciso.
  • 🤖 Benefícios da IA: Textos normalizados e mais limpos produzem recursos e modelos de aprendizado de máquina mais robustos.

Lematização e Lematização em Python NLTK

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.

Perguntas Frequentes

O stemmer Porter é a classe PorterStemmer do NLTK. Ele aplica a remoção de sufixos.ping As regras do algoritmo de Martin Porter de 1980 reduzem as palavras em inglês à sua raiz, de modo que “waiting”, “waited” e “waits” se tornam “wait”.

Use a lematização quando a velocidade e a simplicidade forem mais importantes do que a legibilidade, como em indexação de mecanismos de busca, análise de sentimentos em larga escala ou redução de recursos. Escolha a lematização quando a saída precisar ser uma palavra válida e legível por humanos.

A normalização de texto converte diferentes formas de uma palavra em uma representação comum. A lematização e a redução da densidade de palavras são duas técnicas de normalização que reduzem a densidade de palavras, de modo que um modelo trate variantes como "estudo" e "estudos" como uma única característica.

O NLTK fornece o PorterStemmer (e outros stemmers como o Snowball) para stemming e o WordNetLemmatizer para lematização. O lematizador utiliza o dicionário WordNet para retornar a forma base correta de cada palavra.

Elas removem variações redundantes de palavras, permitindo que um modelo de aprendizado de máquina veja características mais limpas e de menor dimensionalidade. Menos tokens duplicados significam menos ambiguidade durante o treinamento e previsões mais precisas em textos não vistos.

Os modelos modernos de IA inferem o contexto automaticamente, mas o WordNetLemmatizer do NLTK precisa de uma etiqueta gramatical para desambiguar. Fornecer essa etiqueta permite que ele escolha o lema correto, por exemplo, transformando "learning" em "learn" quando etiquetado como verbo.

Uma palavra pode ser um substantivo ou um verbo com diferentes lemas. Sem uma etiqueta gramatical, o WordNetLemmatizer assume que se trata de um substantivo. Ao passar a etiqueta correta, como verbo ou adjetivo, obtém-se a forma base adequada.

Não. A lematização remove apenas os sufixos, então "studies" se torna "studi" e "cries" se torna "cri", que não são palavras válidas. A lematização, por outro lado, sempre retorna uma palavra válida do dicionário, como "study".

Resuma esta postagem com: