complaintBox / app.py
lakshmi324's picture
Update app.py
ce86bc2
raw
history blame
3.73 kB
import tweepy
import time
import pandas as pd
from transformers import pipeline
import matplotlib.pyplot as plt
import gradio as gr
import os
def twitter_auth(consumerkey,consumersecret):
consumer_key = consumerkey
consumer_secret = consumersecret
auth = tweepy.AppAuthHandler(consumer_key,consumer_secret)
api = tweepy.API(auth,wait_on_rate_limit= True)
return api
"""## Helper function for handling ratelimit and pagination"""
def limit_handled(cursor):
"""
Function takes the cursor and returns tweets
"""
while True:
try:
yield cursor.next()
except tweepy.errors.TweepyException:
print('reached rate limit, sleeping for > 15 mins')
time.sleep(15*61)
except StopIteration:
break
def tweets_collector(query,count):
consumerkey = os.environ.get('consumerkey')
consumersecret = os.environ.get('consumersecret')
api = twitter_auth(consumerkey,consumersecret)
query = query +' -filter:retweets'
search = limit_handled(tweepy.Cursor(api.search_tweets,q = query,tweet_mode = 'extended',lang ='en',result_type ='recent').items(count))
sentiment_analysis = pipeline(model = "finiteautomata/bertweet-base-sentiment-analysis")
tweets = []
for tweet in search:
try:
content = tweet.full_text
sentiment = sentiment_analysis(content)
tweets.append({'tweet' : content ,'sentiment': sentiment[0]['label']})
except:
pass
return tweets
"""## Run sentiment Analysis"""
#tweets = tweets_collector(query,count)
#df = pd.DataFrame(tweets)
import pandas as pd
pd.set_option('max_colwidth',None)
pd.set_option('display.width',3000)
#import matplotlib.pyplot as plt
#sentiment_counts = df.groupby(['sentiment']).size()
#fig = plt.figure(figsize = (6,6),dpi = 100)
#ax = plt.subplot(111)
#sentiment_counts.plot.pie(ax = ax,autopct = '%1.f%%',startangle = 270,fontsize = 12,label = "")
def complaint_analysis(query,count):
tweets = tweets_collector(query,count)
df = pd.DataFrame(tweets)
from wordcloud import WordCloud
from wordcloud import STOPWORDS
sentiment_counts = df.groupby(['sentiment']).size()
fig = plt.figure(figsize = (6,6),dpi = 100)
ax = plt.subplot(111)
sentiment_counts.plot.pie(ax = ax,autopct = '%1.f%%',startangle = 270,fontsize = 12,label = "")
plt.savefig('Overall_satisfaction.png')
positive_tweets = df['tweet'][df['sentiment'] == 'POS']
stop_words = ["https","co","RT","ola_supports","ola_cabs","customer"] + list(STOPWORDS)
positive_wordcloud = WordCloud(max_font_size=50,max_words = 30,background_color="white",stopwords=stop_words).generate(str(positive_tweets))
plt.figure()
plt.title("Positive Tweets - Wordcloud")
plt.imshow(positive_wordcloud,interpolation="bilinear")
plt.axis("off")
#plt.show()
plt.savefig('positive_tweet.png')
negative_tweets = df['tweet'][df['sentiment'] == 'NEG']
stop_words = ["https","co","RT","ola_supports","ola_cabs","customer"] + list(STOPWORDS)
negative_wordcloud = WordCloud(max_font_size=50,max_words = 30,background_color="white",stopwords=stop_words).generate(str(negative_tweets))
plt.figure()
plt.title("Negative Tweets - Wordcloud")
plt.imshow(negative_wordcloud,interpolation="bilinear")
plt.axis("off")
#plt.show()
plt.savefig('negative_tweet.png')
return ['Overall_satisfaction.png','positive_tweet.png','negative_tweet.png']
gr.Interface(fn=complaint_analysis,
inputs=[
gr.inputs.Textbox(
placeholder="Tweet handle please", label="Company support Twitter Handle", lines=5), gr.Slider(100, 1000) ],
outputs= [gr.outputs.Image(type="pil"),gr.outputs.Image(type="pil"),gr.outputs.Image(type="pil")],
examples=[]).launch(debug= True)