-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSentimentAnalyzer.py
73 lines (61 loc) · 2.29 KB
/
SentimentAnalyzer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#-----------------------------------------------------------------------------
# Get Sentiment of Tweets
# This code gets the tweets from SQS queue and performs a sentiment analysis
# using MonkeyLearn API. Once the sentiment is calculated, a notification is
# sent to the subscribers using AWS SNS.
#-----------------------------------------------------------------------------
import json
import time
import boto3
from monkeylearn import MonkeyLearn
from configparser import ConfigParser
#Read keys from config file
secret = ConfigParser()
secret.read("config.ini")
#AWS Authentication and Initialization - SQS
sqs = boto3.resource(
'sqs',
aws_access_key_id = secret['AWS']['access_key'],
aws_secret_access_key = secret['AWS']['access_key_secret'],
)
queue = sqs.get_queue_by_name(QueueName='TweetQueue')
#AWS Authentication and Initialization - SNS
sns = boto3.resource(
'sns',
aws_access_key_id = secret['AWS']['access_key'],
aws_secret_access_key = secret['AWS']['access_key_secret'],
)
topic = sns.Topic('SNS TOPIC ARN')
#MonkeyLearn Authentication
ml = MonkeyLearn(secret['MONKEYLEARN']['access_key'])
#Get sentiment of tweet text using MonkeyLearn Service
def getSentiment(tweetText):
sentences = [ tweetText ]
sentimentResult = ml.classifiers.classify(secret['MONKEYLEARN']['module_id'], sentences, sandbox=True).result
for result in sentimentResult:
sentiment = result[0]['label']
return sentiment
def main():
print("Sentiment Analysis Begin!!")
while True:
messages = queue.receive_messages()
if len(messages) == 0:
print("Currently no tweets in queue. Taking a nap!")
time.sleep(10)
else:
print("Publishing %d messages from queue" %len(messages))
for message in messages:
tweet = json.loads(message.body)
text = tweet["text"]
sentiment = getSentiment(text)
tweet["sentiment"] = sentiment
#Call SNS Publish
response = topic.publish(
Message=json.dumps(tweet),
MessageAttributes={
}
)
#Delete message from queue once processed.
message.delete()
if __name__ == '__main__':
main()