Este artigo cobre a análise de sentimento de qualquer tópico, analisando os tweets obtidos do Twitter usando Python.

análise de sentimentos

O que é análise de sentimento?
Análise de sentimento é o processo de determinar 'computacionalmente' se um texto é positivo, negativo ou neutro. Também é conhecido como mineração de opinião , derivando a opinião ou atitude de um palestrante.

Por que análise de sentimento?

  • Negócios: Na área de marketing, as empresas usam-no para desenvolver suas estratégias, para entender os sentimentos dos clientes em relação aos produtos ou marcas, como as pessoas respondem às suas campanhas ou lançamentos de produtos e por que os consumidores não compram alguns
    produtos.
  • Política: No campo político, é usado para acompanhar a visão política, para detectar consistência e inconsistência entre as declarações e ações no nível de governo. Também pode ser usado para prever os resultados das eleições!
  • Ações públicas: a análise de sentimento também é usada para monitorar e analisar fenômenos sociais, para detectar situações potencialmente perigosas e determinar o clima geral da blogosfera.

Instalação:



  • Tweepy: tweepy é o cliente python da API oficial do Twitter .
    Instale-o usando o seguinte comando pip:
    pip install tweepy
  • TextBlob: textblob é a biblioteca python para processamento de dados textuais.
    Instale-o usando o seguinte comando pip:
    pip install textblob

    Além disso, precisamos instalar alguns corpora NLTK usando o seguinte comando:

    python -m textblob.download_corpora

    (Corpora nada mais é do que um grande e estruturado conjunto de textos.)

Autenticação:
para buscar tweets por meio da API do Twitter, é necessário registrar um aplicativo por meio de sua conta do Twitter. Siga estas etapas para o mesmo:

  • Abra este link e clique no botão: 'Criar novo aplicativo'
  • Preencha os detalhes do aplicativo. Você pode deixar o campo do URL de retorno em branco.
  • Assim que o aplicativo for criado, você será redirecionado para a página do aplicativo.
  • Abra a guia 'Chaves e tokens de acesso'.
  • Copie 'Chave do consumidor', 'Segredo do consumidor', 'Token de acesso' e 'Segredo do token de acesso'.

Implementação:

import re 
import tweepy 
from tweepy import OAuthHandler 
from textblob import TextBlob 
  
class TwitterClient(object): 
    
    
    
    def __init__(self): 
      
      
        consumer_key = 'XXXXXXXXXXXXXXXXXXXXXXXX'
        consumer_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'
        access_token = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'
        access_token_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXX'
        try: 
              self.auth = OAuthHandler(consumer_key, consumer_secret) 
              self.auth.set_access_token(access_token, access_token_secret) 
              self.api = tweepy.API(self.auth) 
        except: 
            print("Error: Authentication Failed") 
  
    def clean_tweet(self, tweet): 
      
      
        return ' '.join(re.sub("(@[A-Za-z0-9]+)|([^0-9A-Za-z \t]) 
                                    |(\w+:\/\/\S+)", " ", tweet).split()) 
  
    def get_tweet_sentiment(self, tweet): 
      
      
      analysis = TextBlob(self.clean_tweet(tweet)) 
      if analysis.sentiment.polarity > 0: 
            return 'positive'
        elif analysis.sentiment.polarity == 0: 
            return 'neutral'
        else: 
            return 'negative'
  
    def get_tweets(self, query, count = 10): 
      
      
        tweets = [] 
try: 
              fetched_tweets = self.api.search(q = query, count = count) 
      for tweet in fetched_tweets: 
                      parsed_tweet = {} 
              parsed_tweet['text'] = tweet.text 
                      parsed_tweet['sentiment'] = self.get_tweet_sentiment(tweet.text) 
              if tweet.retweet_count > 0: 
                              if parsed_tweet not in tweets: 
                        tweets.append(parsed_tweet) 
                else: 
                    tweets.append(parsed_tweet) 
      return tweets 
except tweepy.TweepError as e: 
              print("Error : " + str(e)) 
  
def main(): 
    
    api = TwitterClient() 
    
    tweets = api.get_tweets(query = 'Donald Trump', count = 200) 
  
    
    ptweets = [tweet for tweet in tweets if tweet['sentiment'] == 'positive'] 
    
    print("Positive tweets percentage: {} %".format(100*len(ptweets)/len(tweets))) 
    
    ntweets = [tweet for tweet in tweets if tweet['sentiment'] == 'negative'] 
    
    print("Negative tweets percentage: {} %".format(100*len(ntweets)/len(tweets))) 
    
    print("Neutral tweets percentage: {} % \ 
        ".format(100*(len(tweets) -(len( ntweets )+len( ptweets)))/len(tweets))) 
  
    
    print("\n\nPositive tweets:") 
    for tweet in ptweets[:10]: 
        print(tweet['text']) 
  
    
    print("\n\nNegative tweets:") 
    for tweet in ntweets[:10]: 
        print(tweet['text']) 
  
if __name__ == "__main__": 
    
    main() 

Esta é a aparência de um exemplo de saída quando o programa acima é executado:

Porcentagem de tweets positivos: 22%
Porcentagem de tweets negativos: 15%
Tuítes positivos:
RT @JohnGGalt: Incrível - depois de anos atacando Donald Trump, a mídia administrou
para transformar #InaugurationDay em tudo sobre eles mesmos.
# MakeAme…
RT @ vooda1: CNN recusa transmitir conferência de imprensa da Casa Branca Ao vivo SIM!
OBRIGADO @CNN POR NÃO LEGITIMI ...
RT @Muheeb_Shawwa: O discurso de Donald J. Trump soou estranhamente familiar ...
POTUS planeja novo acordo para o Reino Unido, já que Theresa May será a primeira líder estrangeira a encontrar novos
presidente desde a inauguração
. @ realdonaldtrump #Syria #México #Russia e agora #Afeganistão.
Outra carta #DearDonaldTrump que vale a pena ler @AJEnglish
Tweets negativos:
RT @Slate: Administração de Donald Trump: “Governo dos piores homens.”
RT @RVAwonk: Trump, Sean Spicer, et al. mentir por uma razão.
Suas mentiras não são apenas mentiras. Suas mentiras são propaganda autoritária.
RT @KomptonMusic: Eu: eu odeio milho
Donald Trump: Eu também odeio milho
Eu: https://t.co/GPgy8R8HB5
É ridículo que as pessoas fiquem mais irritadas com isso do que com o sexismo de Donald Trump.
RT @tony_broach: Chris Wallace no noticiário da Fox agora falando besteira
sobre a coletiva de imprensa de Donald Trump, parece que ele não consegue enfrentar a verdade nem ...
RT @fravel: com falsas alegações, Donald Trump ataca a mídia na multidão
Aziz Ansari acabou de bater forte em Donald Trump em um épico monólogo ao vivo de sábado à noite

Seguimos estas 3 etapas principais em nosso programa:

  • Autorizar o cliente API do Twitter.
  • Faça uma solicitação GET à API do Twitter para buscar tweets para uma consulta específica.
  • Analise os tweets. Classifique cada tweet como positivo, negativo ou neutro.

Agora, vamos tentar entender o trecho de código acima:



  • Em primeiro lugar, criamos uma classe TwitterClient . Esta classe contém todos os métodos para interagir com a API do Twitter e analisar tweets. Usamos a função __init__ para lidar com a autenticação do cliente API.
  • Na função get_tweets , usamos:
    fetched_tweets = self.api.search (q = query, count = count)

    para chamar a API do Twitter para buscar tweets.

  • Em get_tweet_sentiment , usamos o módulo textblob.
    análise = TextBlob (self.clean_tweet (tweet))

    TextBlob é na verdade uma biblioteca de alto nível construída sobre a biblioteca NLTK . Primeiro chamamos o método clean_tweet para remover links, caracteres especiais, etc. do tweet usando algum regex simples.
    Então, conforme passamos o tweet para criar um objeto TextBlob , o seguinte processamento é feito sobre o texto pela biblioteca textblob:

    • Tokenize o tweet, ou seja, divida as palavras do corpo do texto.
    • Remova as palavras irrelevantes dos tokens (palavras irrelevantes são as palavras comumente usadas que são irrelevantes na análise de texto como eu, sou, você, é, etc.)
    • Faça a marcação POS (parte do discurso) dos tokens e selecione apenas recursos / tokens significativos, como adjetivos, advérbios, etc.
    • Passe os tokens para um classificador de sentimento, que classifica o sentimento do tweet como positivo, negativo ou neutro, atribuindo a ele uma polaridade entre -1,0 e 1,0.

    Veja como o classificador de sentimento é criado:

    • TextBlob usa um conjunto de dados de avaliações de filmes em que as avaliações já foram rotuladas como positivas ou negativas.
    • As características positivas e negativas são extraídas de cada revisão positiva e negativa, respectivamente.
    • Os dados de treinamento agora consistem em características positivas e negativas rotuladas. Esses dados são treinados em um classificador Naive Bayes .

    Em seguida, usamos o método sentiment.polarity da classe TextBlob para obter a polaridade do tweet entre -1 e 1.
    Em seguida, classificamos a polaridade como:

    se análise.sentiment.polaridade> 0:
           retornar 'positivo'
    elif analysis.sentiment.polarity == 0:
           retornar 'neutro'
    outro:
           retornar 'negativo'
  • Finalmente, os tweets analisados ​​são retornados. Então, podemos fazer vários tipos de análises estatísticas nos tweets. Por exemplo, no programa acima, tentamos encontrar a porcentagem de tweets positivos, negativos e neutros sobre uma consulta.

Referências:

Este artigo foi contribuído por Nikhil Kumar . Se você gosta de GeeksforGeeks e gostaria de contribuir, você também pode escrever um artigo usando contrib.geeksforgeeks.org ou enviar seu artigo para contrib@geeksforgeeks.org. Veja o seu artigo que aparece na página principal do GeeksforGeeks e ajude outros Geeks.

Escreva comentários se encontrar algo incorreto ou se quiser compartilhar mais informações sobre o tópico discutido acima.

geeks-digest-img