Lematização e Lematização em Python NLTK com exemplos
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 stemming é mais rápido, pois corta palavras sem conhecer o contexto, enquanto a lematização é mais lenta, pois 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 de uma frase é convertido em uma sequência para encurtar sua pesquisa. Neste método, são normalizadas as palavras que têm o mesmo significado, mas apresentam algumas variações de acordo com o contexto ou frase.
Em outras palavras, existe uma palavra raiz, mas existem muitas variações das mesmas palavras. Por exemplo, a raiz da palavra é “comer” e suas variações são “come, come, comido e assim por diante”. Da mesma forma, com a ajuda de Stemming em Python, podemos encontrar a palavra raiz de quaisquer variações.
Por exemplo
He was riding. He was taking the ride.
Nas duas frases acima, o significado é o mesmo, ou seja, atividade de equitação no passado. Um ser humano pode compreender facilmente que ambos os significados são iguais. Mas para máquinas, ambas as frases são diferentes. Assim, tornou-se difícil convertê-lo na mesma linha de dados. Caso não forneçamos o mesmo conjunto de dados, a máquina não consegue prever. Portanto é necessário diferenciar o significado de cada palavra para preparar o conjunto de dados para aprendizado de máquina. E aqui a lematização é usada para categorizar o mesmo tipo de dados, obtendo sua palavra raiz.
Vamos implementar isso com um Python program.NLTK possui um algoritmo denominado “PorterStemmer”. Este algoritmo aceita a lista de palavras tokenizadas e a transforma na palavra raiz.
Programa para entender 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
Explicação do código:
- Existe um módulo tronco no NLTk que é importado. Se você importar o módulo completo, o programa ficará pesado, pois contém milhares de linhas de códigos. Portanto, de todo o módulo stem, importamos apenas “PorterStemmer”.
- Preparamos uma lista fictícia de dados de variação da mesma palavra.
- É criado um objeto que pertence à classe nltk.stem.porter.PorterStemmer.
- Além disso, passamos para PorterStemmer um por um usando o loop “for”. Finalmente, obtivemos a palavra raiz de saída de cada palavra mencionada na lista.
A partir da explicação acima, também pode-se concluir que a lematização é considerada uma importante etapa de pré-processamento porque removeu redundância nos dados e variações na mesma palavra. Como resultado, os dados são filtrados, o que ajudará no melhor treinamento da máquina.
Agora passamos uma frase completa e verificamos seu comportamento como saída.
Programa:
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
Explicação do código:
- O pacote PorterStemer é importado do módulo stem
- Pacotes para tokenização de frases e palavras são importados
- Uma frase é escrita e deve ser tokenizada na próxima etapa.
- A tokenização de palavras resultante da lematização é implementada nesta etapa.
- Um objeto para PorterStemmer é criado aqui.
- O loop é executado e a lematização de cada palavra é feita usando o objeto criado na linha 5 do código
Conclusão:
Stemming é um módulo de pré-processamento de dados. A língua inglesa tem muitas variações de uma única palavra. Essas variações criam ambiguidade no treinamento e na previsão do aprendizado de máquina. Para criar um modelo bem-sucedido, é vital filtrar essas palavras e convertê-las para o mesmo tipo de dados sequenciados usando lematização. Além disso, esta é uma técnica importante para obter dados de linha de um conjunto de frases e remoção de dados redundantes, também conhecida como normalização.
O que é Lematização?
Lemmatização em NLTK é o processo algorítmico de encontrar o lema de uma palavra dependendo de seu significado e contexto. A lematização geralmente se refere à análise morfológica das palavras, que visa remover terminações flexionais. Ajuda a retornar a forma base ou de dicionário de uma palavra conhecida como lema.
O método de lematização NLTK é baseado na função de metamorfose integrada do WorldNet. O pré-processamento de texto inclui lematização e lematização. Muitas pessoas acham os dois termos confusos. Alguns os tratam como iguais, mas há uma diferença entre lematização e lematização. A lematização é preferida à primeira devido ao motivo abaixo.
Por que a Lematização é melhor do que o Stemming?
O algoritmo stemming funciona cortando o sufixo da palavra. Em um sentido mais amplo, corta o início ou o fim da palavra.
Pelo contrário, a Lematização é uma operação mais poderosa e leva em consideração a análise morfológica das palavras. Ele retorna o lema que é a forma base de todas as suas formas flexionais. É necessário conhecimento linguístico aprofundado para criar dicionários e procurar a forma adequada da palavra. A lematização é uma operação geral, enquanto a lematização é uma operação inteligente onde a forma adequada será procurada no dicionário. Conseqüentemente, a lematização ajuda a formar melhores aprendizado de máquina características.
Código para distinguir entre Lematização e Lematização
Código de derivação:
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
Código de lematização:
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ê procurar por estudos e estudos, a saída é a mesma (studi), mas o lematizador NLTK fornece um lema diferente para ambos os tokens, estudo para estudos e estudo para estudo. Portanto, quando precisarmos criar um conjunto de recursos para treinar a máquina, seria ótimo se a lematização fosse preferida.
Caso de uso do lematizador
Lemmatizer minimiza a ambiguidade do texto. Palavras de exemplo como bicicleta ou bicicletas são convertidas na palavra base bicicleta. Basicamente, ele converterá todas as palavras com o mesmo significado, mas com representações diferentes, para sua forma base. Reduz a densidade de palavras em um determinado texto e ajuda na preparação de recursos precisos para o treinamento da máquina. Quanto mais limpos os dados, mais inteligente e preciso será o seu modelo de aprendizado de máquina. O NLTK Lemmatizer também economiza memória e também custos computacionais.
Exemplo em tempo real mostrando o uso da lematização Wordnet e marcação 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)
Explicação do código
- Primeiramente, o leitor de corpus wordnet é importado.
- WordNetLemmatizer é importado do wordnet.
- A tokenização de palavras, bem como as tags de classes gramaticais, são importadas do nltk.
- O Dicionário Padrão é importado das coleções.
- O dicionário é criado onde pos_tag (primeira letra) são os valores-chave cujos valores são mapeados com o valor do dicionário wordnet. Pegamos a única primeira letra, pois a usaremos posteriormente no loop.
- O texto é escrito e tokenizado.
- É criado o objeto lemma_function que será usado dentro do loop.
- O loop é executado e a lematização levará dois argumentos, um é token e o outro é um mapeamento de pos_tag com valor wordnet.
saída:
guru99 => guru99 is => be totally => totally new => new kind => kind of => of learning => learn experience => experience . => .
Python A lematização tem uma estreita relação com dicionário wordnet, por isso é fundamental estudar este tema, por isso mantemos este como próximo tópico.