0% found this document useful (0 votes)
267 views

Sentiment Analysis Python

This document defines a TwitterClient class to analyze sentiment from tweets. The class authenticates with Twitter credentials, cleans tweets by removing links and special characters, classifies sentiment as positive, negative or neutral using TextBlob, and retrieves tweets by query and count. The main function calls the class to get tweets about "Donald Trump", categorizes them by sentiment, and prints sentiment percentages and sample tweets.

Uploaded by

Smart Boyz
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
267 views

Sentiment Analysis Python

This document defines a TwitterClient class to analyze sentiment from tweets. The class authenticates with Twitter credentials, cleans tweets by removing links and special characters, classifies sentiment as positive, negative or neutral using TextBlob, and retrieves tweets by query and count. The main function calls the class to get tweets about "Donald Trump", categorizes them by sentiment, and prints sentiment percentages and sample tweets.

Uploaded by

Smart Boyz
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 3

import re

import tweepy
from tweepy import OAuthHandler
from textblob import TextBlob

class TwitterClient(object):
'''
Generic Twitter Class for sentiment analysis.
'''
def __init__(self):
'''
Class constructor or initialization method.
'''
# keys and tokens from the Twitter Dev Console
consumer_key = 'UGltbTQESNIVtf8pOIrJWCpG7'
consumer_secret = '57RdUCtKEFYaDx4CFCsghZ1hat9FhYZ1RdL7YebYQltRzSfyXi'
access_token = '850196913404035072-TtDkG3unFCq6CkPcYz92uk5TWBaN38w'
access_token_secret = 'vw36X0r3t4iaLjBxb4uDCzORV18uY09DHEJiUTZ4Nxqeb'

# attempt authentication
try:
# create OAuthHandler object
self.auth = OAuthHandler(consumer_key, consumer_secret)
# set access token and secret
self.auth.set_access_token(access_token, access_token_secret)
# create tweepy API object to fetch tweets
self.api = tweepy.API(self.auth)
except:
print("Error: Authentication Failed")

def clean_tweet(self, tweet):


'''
Utility function to clean tweet text by removing links, special
characters
using simple regex statements.
'''
return ' '.join(re.sub("(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])
|(\w+:\/\/\S+)", " ",
tweet).split())

def get_tweet_sentiment(self, tweet):


'''
Utility function to classify sentiment of passed tweet
using textblob's sentiment method
'''
# create TextBlob object of passed tweet text
analysis = TextBlob(self.clean_tweet(tweet))
# set sentiment
if analysis.sentiment.polarity > 0:
return 'positive'
elif analysis.sentiment.polarity == 0:
return 'neutral'
else:
return 'negative'

def get_tweets(self, query, count = 10):


'''
Main function to fetch tweets and parse them.
'''
# empty list to store parsed tweets
tweets = []

try:
# call twitter api to fetch tweets
fetched_tweets = self.api.search(q = query, count = count)

# parsing tweets one by one


for tweet in fetched_tweets:
# empty dictionary to store required params of a tweet
parsed_tweet = {}

# saving text of tweet


parsed_tweet['text'] = tweet.text
# saving sentiment of tweet
parsed_tweet['sentiment'] =
self.get_tweet_sentiment(tweet.text)

# appending parsed tweet to tweets list


if tweet.retweet_count > 0:
# if tweet has retweets, ensure that it is appended
only once
if parsed_tweet not in tweets:
tweets.append(parsed_tweet)
else:
tweets.append(parsed_tweet)

# return parsed tweets


return tweets

except tweepy.TweepError as e:
# print error (if any)
print("Error : " + str(e))

def main():
# creating object of TwitterClient Class
api = TwitterClient()
# calling function to get tweets
tweets = api.get_tweets(query = 'Donald Trump', count = 200)

# picking positive tweets from tweets


ptweets = [tweet for tweet in tweets if tweet['sentiment'] == 'positive']
# percentage of positive tweets
print("Positive tweets percentage: {}
%".format(100*len(ptweets)/len(tweets)))
# picking negative tweets from tweets
ntweets = [tweet for tweet in tweets if tweet['sentiment'] == 'negative']
# percentage of negative tweets
print("Negative tweets percentage: {}
%".format(100*len(ntweets)/len(tweets)))
# percentage of neutral tweets
print("Neutral tweets percentage: {} % \
".format(100*len(tweets - ntweets - ptweets)/len(tweets)))

# printing first 5 positive tweets


print("\n\nPositive tweets:")
for tweet in ptweets[:10]:
print(tweet['text'])
# printing first 5 negative tweets
print("\n\nNegative tweets:")
for tweet in ntweets[:10]:
print(tweet['text'])

if __name__ == "__main__":
# calling main function
main()

You might also like