O que é Stemming?
Stemming é uma espécie de normalização para palavras. A normalização é uma técnica em que um conjunto de palavras em uma frase é convertido em uma sequência para encurtar sua pesquisa. As palavras que têm o mesmo significado, mas têm alguma variação de acordo com o contexto ou frase, são normalizadas.
Em outra palavra, existe uma palavra raiz, mas existem muitas variações das mesmas palavras. Por exemplo, a palavra raiz é "comer" e suas variações são "come, eating, eaten and like so". Da mesma forma, com a ajuda de Stemming, 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, atividade de cavalgar no passado. Um humano pode entender facilmente que os dois significados são os mesmos. 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 falha em prever. Portanto, é necessário diferenciar o significado de cada palavra para preparar o conjunto de dados para o aprendizado de máquina. E aqui o radical é usado para categorizar o mesmo tipo de dados obtendo sua palavra raiz.
Vamos implementar isso com um programa Python. O NLTK tem um algoritmo chamado "PorterStemmer". Este algoritmo aceita a lista de palavras tokenizadas e converte-as em palavras raiz.
Programa para entender o Stemming
from nltk.stem import PorterStemmere_words= ["wait", "waiting", "waited", "waits"]ps =PorterStemmer()for w in e_words:rootWord=ps.stem(w)print(rootWord)
Produto :
waitwaitwaitwait
Explicação do código:
- Existe um módulo de tronco em 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 de haste, 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". Por fim, 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 derivação é considerada uma etapa de pré-processamento importante 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 PorterStemmerfrom nltk.tokenize import sent_tokenize, word_tokenizesentence="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)
Resultado:
helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite
Explicação do código
- O pacote PorterStemer é importado da haste do módulo
- Pacotes para tokenização de frases e palavras são importados
- Uma frase é escrita e deve ser simbolizada na próxima etapa.
- A tokenização de palavras é 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 de código 5
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 ambigüidade no treinamento e na previsão do aprendizado de máquina. Para criar um modelo de sucesso, é vital filtrar essas palavras e converter 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 remover dados redundantes, também conhecido como normalização.
O que é Lemmatização?
Lemmatização é o processo algorítmico de encontrar o lema de uma palavra dependendo de seu significado. A lematização geralmente se refere à análise morfológica de palavras, que visa remover terminações flexionais. Ajuda a retornar a forma básica ou de dicionário de uma palavra, que é conhecida como lema. O método de Lemmatização NLTK é baseado na função de metamorfose integrada da 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 os dois. A lematização é preferível à anterior por causa da razão abaixo.
Por que a lematização é melhor do que o stemming?
O algoritmo de derivação 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 básica de todas as suas formas flexionais. É necessário um conhecimento linguístico aprofundado para criar dicionários e procurar a forma adequada da palavra. Stemming é uma operação geral, enquanto a lematização é uma operação inteligente em que a forma apropriada será consultada no dicionário. Portanto, a lematização ajuda a formar melhores recursos de aprendizado de máquina.
Código para distinguir entre lematização e derivação
Código de derivação
import nltkfrom nltk.stem.porter import PorterStemmerporter_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)))
Resultado:
Stemming for studies is studiStemming for studying is studiStemming for cries is criStemming for cry is cri
Código de lematização
import nltkfrom nltk.stem import WordNetLemmatizerwordnet_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)))
Resultado:
Lemma for studies is studyLemma for studying is studyingLemma for cries is cryLemma for cry is cry
Discussão de saída:
Se você estiver procurando por estudos e estudos, a saída é a mesma (studi), mas o lematizador fornece lemas diferentes para ambos os tokens de estudo para estudos e de estudo para estudar. Portanto, quando precisamos fazer um conjunto de recursos para treinar a máquina, seria ótimo se a lematização fosse preferida.
Caso de uso do Lemmatizer:
O Lemmatizer minimiza a ambiguidade do texto. Palavras de exemplo como bicicleta ou bicicletas são convertidas na palavra básica bicicleta. Basicamente, ele converterá todas as palavras com o mesmo significado, mas representações diferentes, em sua forma básica. Ele reduz a densidade de palavras no texto fornecido e ajuda a preparar os recursos precisos para a máquina de treinamento. Quanto mais limpos os dados, mais inteligente e preciso será o seu modelo de aprendizado de máquina. O Lemmatizer também economiza memória, bem como custo computacional.
Exemplo em tempo real mostrando o uso de Wordnet Lemmatization e POS Tagging em Python
from nltk.corpus import wordnet as wnfrom nltk.stem.wordnet import WordNetLemmatizerfrom nltk import word_tokenize, pos_tagfrom collections import defaultdicttag_map = defaultdict(lambda : wn.NOUN)tag_map['J'] = wn.ADJtag_map['V'] = wn.VERBtag_map['R'] = wn.ADVtext = "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
- Em primeiro lugar, o leitor de corpus wordnet é importado.
- WordNetLemmatizer é importado do wordnet
- O token de palavra, bem como a tag de classes gramaticais são importados do nltk
- Dicionário padrão é importado de 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 mais tarde no loop.
- O texto é escrito e tokenizado.
- O objeto lemma_function é criado e será usado dentro do loop
- O loop é executado e o lemmatize terá dois argumentos, um é token e o outro é um mapeamento de pos_tag com valor wordnet.
Resultado:
guru99 => guru99is => betotally => totallynew => newkind => kindof => oflearning => learnexperience => experience. => .
A lemmatização tem uma relação estreita com o dicionário wordnet, por isso é essencial estudar este tópico, por isso o mantemos como o próximo tópico