def run_sentiment_analysis(df): """ Adds score, magnitude and discrete_sentiment to df using the Google Could Sentiment API Note that the function can sometimes run into rate-limit restrictions, which is why the calls are wrapped in a while loop, to ensure that the API is called for all rows. """ sentiment_score = {} sentiment_magnitude = {} for i, row in df.iterrows(): while True: try: text = row.title + " " + row.question_content score, magnitude = gc_sentiment(text, type='HTML') sentiment_score[row.question_id] = score sentiment_magnitude[row.question_id] = magnitude except (Forbidden, TooManyRequests) as e: print(e) print('Waiting 100 seconds due to rate-limit constraint') time.sleep(100) continue break df[u'score'] = df['question_id'].map(sentiment_score) df[u'magnitude'] = df['question_id'].map(sentiment_magnitude) df[u'discrete_sentiment'] = df.apply(lambda x: \ discretize_sentiment(x['score'],x['magnitude']), axis=1) return (df)
def test_low_magnitude_positive_score(self): score = 1 magnitude = 0.1 result = discretize_sentiment(score, magnitude, score_cutoff=0.2, magnitude_cutoff=0.5) self.assertEqual(result, 'neutral')
def test_high_magnitude_positive_score(self): score = 1 magnitude = 1 result = discretize_sentiment(score, magnitude, score_cutoff=0.2, magnitude_cutoff=0.5) self.assertEqual(result, 'positive')