forked from cjardin/spring_2023_sms_fun
-
Notifications
You must be signed in to change notification settings - Fork 1
/
response_gen.py
115 lines (86 loc) · 3.1 KB
/
response_gen.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import yaml
from flask import request, g
from flask_json import FlaskJSON, JsonError, json_response, as_json
from os.path import exists
from tools.logging import logger
from things.actors import actor
import random
import json
import pickle
import datetime
import re
from pprint import pformat
from tools.nlp import *
import nltk
from nltk.chat.util import Chat
from chat_dictionary import pairs, reflections
CORPUS = {}
PROFANITIES = []
with open('chatbot_corpus.json', 'r') as myfile:
CORPUS = json.loads(myfile.read())
with open('profanities.txt', 'r') as myfile:
PROFANITIES = myfile.read().splitlines()
input_message = ''
def get_response(act, message):
input_message = message
response = 'NOT FOUND'
# remove punctuation
message = re.sub(r'[^\w\s]', '', message)
response = generate(act, message)
return response
def generate(act, message):
response = ''
# Get message sentiment score
polarity_scores = get_polarity_scores(message)
print("Polarity scores: ", polarity_scores)
message_sentiment = get_message_sentiment(message)
pos_tags = get_pos_tags(message)
print(pos_tags)
# Check for profanities. The chat bot will disregard any profane language entirely,
# just like your grandmother.
for word in PROFANITIES:
if word in message:
return random.choice(CORPUS['negative']['profanity'])
chat = Chat(pairs, reflections)
response = chat.respond(message)
if response:
#state = response.partition('#')[2]
#response = response.partition('#')[0]
if "SENTIMENT" in response:
if response == "SENTIMENT to hear that, How can I help you?":
if message_sentiment == SentimentType.POSITIVE:
response = response.replace("SENTIMENT", "Happy")
elif message_sentiment == SentimentType.NEGATIVE:
response = response.replace("SENTIMENT", "I am sorry")
else:
response = response.replace("SENTIMENT to hear that, ", "")
else:
# Determine next path based on message sentiment
if message_sentiment == SentimentType.POSITIVE:
print("The message is positive")
response = positive_response(message)
elif message_sentiment == SentimentType.NEGATIVE:
print("The message is negative")
response = negative_response(message)
else:
print("The message is neutral")
response = neutral_response(message)
if not response:
response = random.choice(CORPUS['confused'])
if "ACTORNUMBER" in response:
response = response.replace("ACTORNUMBER", act.phone)
# Send response to webhook
return response
def negative_response(message):
response = ''
if "you" in message:
response = random.choice(CORPUS['negative']['you'])
return response
def neutral_response(message):
response = ''
#TODO: Respond to a neutral message here
return response
def positive_response(message):
response = ''
#TODO: Respond to a positive message here
return response