complaintBox / app.py
lakshmi324's picture
Update app.py
ce86bc2
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)