Pular para o conteúdo principal
InicioTutoriaisPython

Tutorial de análise de sentimento do NLTK para iniciantes

Tutorial de análise de sentimentos do Python NLTK (kit de ferramentas de linguagem natural). Aprenda a criar e desenvolver análises de sentimentos usando Python. Siga etapas específicas para extrair e analisar texto para processamento de linguagem natural.
abr. de 2024  · 13 min leer

Na era digital atual, a análise de texto e a mineração de texto tornaram-se partes essenciais de vários setores. A análise de texto refere-se ao processo de análise e extração de percepções significativas de dados de texto não estruturados. Um dos subcampos mais importantes da análise de texto é a análise de sentimento, que envolve a determinação do tom emocional do texto.

A análise de sentimentos tem inúmeras aplicações práticas, desde o monitoramento da marca até a análise de feedback do cliente. Python é uma linguagem de programação popular usada para análise e mineração de texto, e a biblioteca Natural Language Toolkit (NLTK) é uma das bibliotecas mais usadas para processamento de linguagem natural em Python.

Este tutorial fornecerá um guia passo a passo para realizar a análise de sentimentos usando a biblioteca NLTK em Python. Ao final deste tutorial, você terá uma sólida compreensão de como realizar a análise de sentimentos usando o NLTK em Python, juntamente com um exemplo completo que pode ser usado como ponto de partida para seus próprios projetos. Então, vamos começar!

Biblioteca do kit de ferramentas de linguagem natural (NLTK)

O Natural Language Toolkit (NLTK) é uma biblioteca popular de código aberto para processamento de linguagem natural (NLP) em Python. Ele oferece uma interface fácil de usar para uma ampla variedade de tarefas, incluindo tokenização, stemização, lematização, análise de análise e análise de sentimentos. 

O NLTK é amplamente utilizado por pesquisadores, desenvolvedores e cientistas de dados em todo o mundo para desenvolver aplicativos de NLP e analisar dados de texto.

Uma das principais vantagens de usar o NLTK é sua ampla coleção de corpora, que inclui dados de texto de várias fontes, como livros, artigos de notícias e plataformas de mídia social. Esses corpora fornecem uma rica fonte de dados para treinar e testar modelos de PNL.

O que é análise de sentimento

A análise de sentimento é uma técnica usada para determinar o tom emocional ou o sentimento expresso em um texto. Ela envolve a análise das palavras e frases usadas no texto para identificar o sentimento subjacente, seja ele positivo, negativo ou neutro. 

A análise de sentimento tem uma ampla gama de aplicações, incluindo monitoramento de mídia social, análise de feedback do cliente e pesquisa de mercado.

Um dos principais desafios da análise de sentimentos é a complexidade inerente da linguagem humana. Os dados de texto geralmente contêm sarcasmo, ironia e outras formas de linguagem figurativa que podem ser difíceis de interpretar usando métodos tradicionais. 

No entanto, os recentes avanços no processamento de linguagem natural (PLN) e no aprendizado de máquina tornaram possível realizar a análise de sentimentos em grandes volumes de dados de texto com um alto grau de precisão. 

Três metodologias para análise de sentimentos

Há várias maneiras de realizar a análise de sentimentos em dados de texto, com diferentes graus de complexidade e precisão. Os métodos mais comuns incluem uma abordagem baseada em léxico, uma abordagem baseada em aprendizado de máquina (ML) e uma abordagem de aprendizado profundo baseado em transformador pré-treinado. Vamos dar uma olhada em cada um deles com mais detalhes:

Análise baseada em léxico

Esse tipo de análise, como o analisador de sentimentos NLTK Vader, envolve o uso de um conjunto de regras predefinidas e heurísticas para determinar o sentimento de um texto. Essas regras geralmente se baseiam em características léxicas e sintáticas do texto, como a presença de palavras e frases positivas ou negativas. 

Embora a análise baseada em léxico possa ser relativamente simples de implementar e interpretar, ela pode não ser tão precisa quanto as abordagens baseadas em ML ou transformadas, especialmente ao lidar com dados de texto complexos ou ambíguos.

Aprendizado de máquina (ML) 

Essa abordagem envolve o treinamento de um modelo para identificar o sentimento de um trecho de texto com base em um conjunto de dados de treinamento rotulados. Esses modelos podem ser treinados usando uma ampla gama de algoritmos de ML, incluindo árvores de decisão, máquinas de vetores de suporte (SVMs) e redes neurais. 

As abordagens baseadas em ML podem ser mais precisas do que a análise baseada em regras, especialmente ao lidar com dados de texto complexos, mas exigem uma quantidade maior de dados de treinamento rotulados e podem ser mais caras do ponto de vista computacional.

Aprendizagem profunda baseada em transformador pré-treinada

Uma abordagem baseada em aprendizagem profunda, como visto no BERT e no GPT-4, envolve o uso de modelos pré-treinados treinados em grandes quantidades de dados de texto. Esses modelos usam redes neurais complexas para codificar o contexto e o significado do texto, o que lhes permite alcançar a precisão mais avançada em uma ampla gama de tarefas de PLN, incluindo a análise de sentimentos. No entanto, esses modelos exigem recursos computacionais significativos e podem não ser práticos para todos os casos de uso.

  • A análise baseada em léxico é uma abordagem simples para a análise de sentimentos, mas pode não ser tão precisa quanto métodos mais complexos. 
  • As abordagens baseadas em aprendizado de máquina podem ser mais precisas, mas exigem dados de treinamento rotulados e podem ser mais caras do ponto de vista computacional. 
  • As abordagens de aprendizagem profunda baseadas em transformadores pré-treinados podem atingir a precisão de última geração, mas exigem recursos computacionais significativos e podem não ser práticas para todos os casos de uso. 

A escolha da abordagem dependerá das necessidades e restrições específicas do projeto em questão.

Instalação do NLTK e configuração do ambiente Python

Para usar a biblioteca NLTK, você deve ter um ambiente Python em seu computador. A maneira mais fácil de instalar o Python é fazer o download e instalar a distribuição Anaconda. Essa distribuição vem com o ambiente básico do Python 3 e outros recursos, incluindo o Jupyter Notebook. Você também não precisa instalar a biblioteca NLTK, pois ela vem pré-instalada com o NLTK e muitas outras bibliotecas úteis. 

Se você optar por instalar o Python sem nenhuma distribuição, poderá fazer o download e instalar o Python diretamente do site python.org. Nesse caso, você terá que instalar o NLTK quando o ambiente Python estiver pronto.

Para instalar a biblioteca NLTK, abra o terminal de comando e digite:

pip install nltk

Vale a pena observar que o NLTK também exige o download de alguns dados adicionais para que possa ser usado com eficácia. Esses dados incluem modelos pré-treinados, corpora e outros recursos que o NLTK usa para executar várias tarefas de NLP. Para baixar esses dados, execute o seguinte comando no terminal ou em seu script Python:

import nltk

nltk.download('all')

Pré-processamento de texto

O pré-processamento de texto é uma etapa crucial na execução da análise de sentimentos, pois ajuda a limpar e normalizar os dados de texto, facilitando a análise. A etapa de pré-processamento envolve uma série de técnicas que ajudam a transformar dados de texto bruto em um formato que pode ser usado para análise. Algumas técnicas comuns de pré-processamento de texto incluem tokenização, remoção de palavras de parada, stemming e lematização.

etapas de pré-processamento de texto em sequência

Fonte da imagem

Tokenização

A tokenização é uma etapa de pré-processamento de texto na análise de sentimentos que envolve a divisão do texto em palavras individuais ou tokens. Essa é uma etapa essencial na análise de dados de texto, pois ajuda a separar palavras individuais do texto bruto, facilitando a análise e a compreensão. A tokenização é normalmente executada usando a função `word_tokenize` integrada do NLTK, que pode dividir o texto em palavras individuais e sinais de pontuação.

Palavras de parada

A remoção de palavras de parada é uma etapa crucial de pré-processamento de texto na análise de sentimentos que envolve a remoção de palavras comuns e irrelevantes que provavelmente não transmitem muito sentimento. Palavras de parada são palavras muito comuns em um idioma e que não têm muito significado, como "e", "o", "de" e "isso". Essas palavras podem causar ruído e distorcer a análise se não forem removidas.

Ao remover as palavras de parada, as palavras restantes no texto têm maior probabilidade de indicar o sentimento que está sendo expresso. Isso pode ajudar a melhorar a precisão da análise de sentimentos. O NLTK fornece uma lista integrada de palavras de parada para vários idiomas, que pode ser usada para filtrar essas palavras dos dados de texto.

Formulação de hastes e lematização

Stemming e lemmatization são técnicas usadas para reduzir as palavras às suas formas de raiz. O stemming envolve a remoção dos sufixos das palavras, como "ing" ou "ed", para reduzi-las à sua forma básica. Por exemplo, a palavra "jumping" seria derivada de "jump" (pular). 

A lematização, no entanto, envolve a redução de palavras à sua forma básica com base em sua classe gramatical. Por exemplo, a palavra "jumped" seria lematizada para "jump", mas a palavra "jumping" seria lematizada para "jumping", pois é um particípio presente.

Para saber mais sobre stemming e lematização, confira nosso tutorial Stemming and Lemmatization in Python.

Modelo Bag of Words (BoW)

O modelo de saco de palavras é uma técnica usada no processamento de linguagem natural (NLP) para representar dados de texto como um conjunto de recursos numéricos. Nesse modelo, cada documento ou trecho de texto é representado como um "saco" de palavras, com cada palavra no texto representada por um recurso ou dimensão separada no vetor resultante. O valor de cada recurso é determinado pelo número de vezes que a palavra correspondente aparece no texto.

O modelo de saco de palavras é útil em NLP porque nos permite analisar dados de texto usando algoritmos de aprendizado de máquina, que normalmente exigem entrada numérica. Ao representar os dados de texto como recursos numéricos, podemos treinar modelos de aprendizado de máquina para classificar o texto ou analisar sentimentos. 

O exemplo na próxima seção usará o modelo NLTK Vader para análise de sentimentos no conjunto de dados de clientes da Amazon. Neste exemplo específico, não precisamos executar essa etapa porque a API NLTK Vader aceita texto como entrada em vez de vetores numéricos, mas se você estivesse criando um modelo de aprendizado de máquina supervisionado para prever sentimentos (supondo que você tenha dados rotulados), teria que transformar o texto processado em um modelo de saco de palavras antes de treinar o modelo de aprendizado de máquina. 

Exemplo de saco de palavras

Fonte da imagem

Exemplo de análise de sentimento de ponta a ponta em Python

Para realizar a análise de sentimentos usando o NLTK em Python, os dados de texto devem primeiro ser pré-processados usando técnicas como tokenização, remoção de palavras de parada e stemming ou lematização. Depois que o texto tiver sido pré-processado, nós o passaremos para o analisador de sentimentos Vader para analisar o sentimento do texto (positivo ou negativo).

Etapa 1 - Importar bibliotecas e carregar o conjunto de dados

Primeiro, importaremos as bibliotecas necessárias para análise de texto e análise de sentimentos, como pandas para manipulação de dados, nltk para processamento de linguagem natural e SentimentIntensityAnalyzer para análise de sentimentos.

Em seguida, faremos o download de todo o corpus do NLTK (uma coleção de dados linguísticos) usando nltk.download().

Depois que o ambiente estiver configurado, carregaremos um conjunto de dados de avaliações da Amazon usando o site pd.read_csv(). Isso criará um objeto DataFrame no Python que poderá ser usado para analisar os dados. Vamos exibir o conteúdo do DataFrame usando df.

# import libraries
import pandas as pd

import nltk

from nltk.sentiment.vader import SentimentIntensityAnalyzer

from nltk.corpus import stopwords

from nltk.tokenize import word_tokenize

from nltk.stem import WordNetLemmatizer


# download nltk corpus (first time only)
import nltk

nltk.download('all')




# Load the amazon review dataset

df = pd.read_csv('https://raw.githubusercontent.com/pycaret/pycaret/master/datasets/amazon.csv')

df

Carregar conjunto de dados

Etapa 2 - Pré-processar o texto

Vamos criar uma função preprocess_text na qual primeiro tokenizamos os documentos usando a função word_tokenize do NLTK, depois removemos as palavras de etapa usando o módulo stepwords do NLTK e, por fim, lematizamos o filtered_tokens usando o WordNetLemmatizer do NLTK.

# create preprocess_text function
def preprocess_text(text):

    # Tokenize the text

    tokens = word_tokenize(text.lower())




    # Remove stop words

    filtered_tokens = [token for token in tokens if token not in stopwords.words('english')]




    # Lemmatize the tokens

    lemmatizer = WordNetLemmatizer()

    lemmatized_tokens = [lemmatizer.lemmatize(token) for token in filtered_tokens]




    # Join the tokens back into a string

    processed_text = ' '.join(lemmatized_tokens)

    return processed_text

# apply the function df

df['reviewText'] = df['reviewText'].apply(preprocess_text)
df

Pré-processamento de dados

Observe as alterações na coluna "review text" como resultado da função preprocess_text que aplicamos na etapa acima.

Etapa 3 - Analisador de sentimentos NLTK

Primeiro, inicializaremos um objeto Sentiment Intensity Analyzer da biblioteca nltk.sentiment.vader.

Em seguida, definiremos uma função chamada get_sentiment que recebe uma string de texto como entrada. A função chama o método polarity_scores do objeto analisador para obter um dicionário de pontuações de sentimento para o texto, que inclui uma pontuação para sentimento positivo, negativo e neutro. 

A função verificará se a pontuação positiva é maior que 0 e retornará uma pontuação de sentimento de 1 se for, e de 0 caso contrário. Isso significa que qualquer texto com uma pontuação positiva será classificado como tendo um sentimento positivo, e qualquer texto com uma pontuação não positiva será classificado como tendo um sentimento negativo.

Por fim, aplicaremos a função get_sentiment à coluna reviewText do DataFrame df usando o método apply. Isso cria uma nova coluna chamada sentimento no DataFrame, que armazena a pontuação de sentimento de cada avaliação. Em seguida, exibiremos o DataFrame atualizado usando df.

# initialize NLTK sentiment analyzer

analyzer = SentimentIntensityAnalyzer()


# create get_sentiment function

def get_sentiment(text):

    scores = analyzer.polarity_scores(text)

    sentiment = 1 if scores['pos'] > 0 else 0

    return sentiment




# apply get_sentiment function

df['sentiment'] = df['reviewText'].apply(get_sentiment)

df

análise de sentimentos

O analisador de sentimentos NLTK retorna uma pontuação entre -1 e +1. Usamos um limite de corte de 0 na função get_sentiment acima. Qualquer valor acima de 0 é classificado como 1 (ou seja, positivo). Como temos rótulos reais, podemos avaliar o desempenho desse método criando uma matriz de confusão. 

from sklearn.metrics import confusion_matrix

print(confusion_matrix(df['Positive'], df['sentiment']))

Saída:

[[ 1131  3636]

 [  576 14657]]

Também podemos verificar o relatório de classificação:

from sklearn.metrics import classification_report

print(classification_report(df['Positive'], df['sentiment']))

Relatório de classificação

Como você pode ver, a precisão geral desse modelo de análise de sentimentos baseado em regras é de 79%. Como esses dados são rotulados, você também pode tentar criar um modelo de ML para avaliar se uma abordagem baseada em ML resultará em melhor precisão.

Confira o notebook completo no espaço de trabalho do Datacamp.

Conclusão

O NLTK é uma biblioteca avançada e flexível para realizar análise de sentimentos e outras tarefas de processamento de linguagem natural em Python. Usando o NLTK, podemos pré-processar dados de texto, convertê-los em um modelo de saco de palavras e realizar a análise de sentimentos usando o analisador de sentimentos do Vader. 

Neste tutorial, exploramos os conceitos básicos da análise de sentimentos do NLTK, incluindo o pré-processamento de dados de texto, a criação de um modelo de saco de palavras e a realização da análise de sentimentos usando o NLTK Vader. Também discutimos as vantagens e limitações da análise de sentimentos do NLTK e fornecemos sugestões para leitura e exploração adicionais.

Em geral, o NLTK é uma ferramenta avançada e amplamente usada para realizar análise de sentimentos e outras tarefas de processamento de linguagem natural em Python. Ao dominar as técnicas e ferramentas apresentadas neste tutorial, você poderá obter insights valiosos sobre o sentimento dos dados de texto e usá-los para tomar decisões orientadas por dados em uma ampla gama de aplicativos.

Se você quiser saber como aplicar o PLN a dados do mundo real, incluindo palestras TED, artigos e resenhas de filmes, usando bibliotecas e estruturas Python, incluindo NLTK, scikit-learn, spaCy e SpeechRecognition, confira os recursos abaixo:

Ele fornece uma base sólida para o processamento e a análise de dados de texto usando Python. Não importa se você é iniciante em PNL ou se deseja expandir suas habilidades, este curso o equipará com as ferramentas e o conhecimento para converter dados não estruturados em insights valiosos.

Temas

Cursos de Python

Course

Introduction to Data Science in Python

4 hr
456.6K
Dive into data science using Python and learn how to effectively analyze and visualize your data. No coding experience or skills needed.
See DetailsRight Arrow
Start Course
Veja MaisRight Arrow
Relacionado

blog

O que é processamento de linguagem natural (NLP)? Um guia abrangente para iniciantes

Explore o mundo transformador do Processamento de Linguagem Natural (PLN) com o guia abrangente do DataCamp para iniciantes. Mergulhe nos principais componentes, técnicas, aplicativos e desafios da PNL.
Matt Crabtree's photo

Matt Crabtree

11 min

tutorial

Stemming e lematização em Python

Este tutorial aborda o stemming e a lematização de um ponto de vista prático usando o pacote Python Natural Language ToolKit (NLTK).
Kurtis Pykes 's photo

Kurtis Pykes

12 min

tutorial

Entendendo a classificação de textos em Python

Descubra o que é a classificação de texto, como ela funciona e os casos de uso bem-sucedidos. Explore exemplos de ponta a ponta de como criar um pipeline de pré-processamento de texto seguido de um modelo de classificação de texto em Python.
Moez Ali 's photo

Moez Ali

12 min

tutorial

21 ferramentas essenciais do Python

Aprenda sobre as ferramentas Python essenciais para o desenvolvimento de software, raspagem e desenvolvimento da Web, análise e visualização de dados e aprendizado de máquina.
Abid Ali Awan's photo

Abid Ali Awan

6 min

tutorial

Tutorial de manipulação de dados categóricos de aprendizado de máquina com Python

Aprenda os truques comuns para lidar com dados categóricos e pré-processá-los para criar modelos de aprendizado de máquina!
Moez Ali's photo

Moez Ali

28 min

tutorial

Como criar aplicativos LLM com o tutorial LangChain

Explore o potencial inexplorado dos modelos de linguagem grandes com o LangChain, uma estrutura Python de código aberto para criar aplicativos avançados de IA.
Moez Ali's photo

Moez Ali

12 min

See MoreSee More