Análise de sentimento do Twitter usando Python
Este artigo cobre a análise de sentimento de qualquer tópico, analisando os tweets obtidos do Twitter usando Python.
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
:
(
"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:
(
"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'
]
(
"Positive tweets percentage: {} %"
.
format
(
100
*
len
(ptweets)
/
len
(tweets)))
ntweets
=
[tweet
for
tweet
in
tweets
if
tweet[
'sentiment'
]
=
=
'negative'
]
(
"Negative tweets percentage: {} %"
.
format
(
100
*
len
(ntweets)
/
len
(tweets)))
("Neutral tweets percentage: {}
%
\
".
format
(
100
*
(
len
(tweets)
-
(
len
( ntweets )
+
len
( ptweets)))
/
len
(tweets)))
(
"\n\nPositive tweets:"
)
for
tweet
in
ptweets[:
10
]:
(tweet[
'text'
])
(
"\n\nNegative tweets:"
)
for
tweet
in
ntweets[:
10
]:
(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:
- http://www.ijcaonline.org/research/volume125/number3/dandrea-2015-ijca-905866.pdf
- https://textblob.readthedocs.io/en/dev/quickstart.html#sentiment-analysis
- textblob.readthedocs.io/en/dev/_modules/textblob/en/sentiments.html
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.
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva