Derivação e lematização com Python NLTK

Índice:

Anonim

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