-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUserClass.py
More file actions
140 lines (121 loc) · 5.06 KB
/
UserClass.py
File metadata and controls
140 lines (121 loc) · 5.06 KB
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
from functools import reduce
from textblob import TextBlob
import numpy as np
class User(object):
""" classifies the attributes of the user and gets the overall sentiment of the users requests """
def __init__(self, session, timestamp):
self.log_list = [Request(session['chat'][log], log) for log in session['chat']]
self.sessionid = timestamp
self.usertype = session['user_type']
self.questions_asked = session['questions_asked']
self.shops_asked = session['shops_asked']
self.products_asked = session['products_asked']
def get_sentiment_overall(self):
request = [req.get_sentiment() for req in self.log_list]
sen_array = []
for sen in request:
sen_array.append(sen[1])
if len(sen_array) > 1:
mean_sen = reduce((lambda x,y: x + y), sen_array) / len(sen_array)
return mean_sen
else:
return sen_array[0]
def get_usertype(self):
request = [req.get_sentiment()[1] for req in self.log_list]
request = np.array(request)
length_neu = len([request[request == 0]])
length_pos = len(request[request > 0])
length_neg = len(request[request < 0])
sum_pos_neg = (length_pos + length_neg)
min = request.min()
max = request.max()
usertype = ''
if length_neu > sum_pos_neg:
usertype = 'neu'
elif (length_pos > length_neg) or (length_pos == length_neg and max > (min*(-1))):
usertype = 'pos'
elif (length_pos < length_neg) or (length_pos == length_neg and max < (min*(-1))):
usertype = 'neg'
self.usertype = usertype
return self.usertype
def get_questions_asked(self):
# Get every question asked but dont just one time
self.questions_asked = {}
all_questions_asked = {}
for req in self.log_list:
if not req.compare_string in all_questions_asked:
all_questions_asked[req.compare_string] = req.text
self.questions_asked = all_questions_asked
def get_shops_asked(self):
# Get every shop that was asked about but just one time
self.shops_asked = [req.location for req in self.log_list]
uniquelist = set(self.shops_asked)
if len(uniquelist) > 1:
self.shops_asked = list(uniquelist)
if '' in self.shops_asked:
self.shops_asked.remove('')
else:
if '' in self.shops_asked:
self.shops_asked = ""
def get_products_asked(self):
# Get every product that was asked about but just one time
self.products_asked = [req.product for req in self.log_list]
uniquelist = set(self.products_asked)
if len(uniquelist) > 1:
self.products_asked = list(uniquelist)
if '' in self.products_asked:
self.products_asked.remove('')
else:
if '' in self.products_asked:
self.products_asked = ""
def firebase_save_format(self):
obj = {}
obj["products_asked"] = self.products_asked
obj["shops_asked"] = self.shops_asked
obj["user_type"] = self.usertype
obj["questions_asked"] = self.questions_asked
obj["chat"] = {}
for req in self.log_list:
obj["chat"][req.id] = req.save_format()
return obj
class Request(object):
def __init__(self, log, id):
self.id = id
self.query = log['request']['query']
self.client = log['request']['query']['client']
self.location = log['request']['query']['location']
self.notmatched = log['request']['query']['notmatched']
self.product= log['request']['query']['product']
self.product_key_words = log['request']['query']['product_key_words']
self.question_key_words = log['request']['query']['question_key_words']
self.question_words = log['request']['query']['question_words']
self.verb = log['request']['query']['verb']
self.sentiment = log['request']['sentiment']
self.sentiment_type = log['request']['type']
self.text = log['request']['text']
self.response = log['response']['text']
self.compare_string = log['request']['query']['compare_string']
def get_sentiment(self):
string = self.text
polarity = TextBlob(string)
pol = polarity.sentiment
if pol[0] > 0:
self.sentiment = pol[0]
self.sentiment_type = 'pos'
elif pol[0] == 0:
self.sentiment = pol[0]
self.sentiment_type = 'neu'
else:
self.sentiment = pol[0]
self.sentiment_type = 'neg'
return (self.sentiment_type, self.sentiment)
def save_format(self):
obj = {}
obj["request"] = {}
obj["request"]["query"] = self.query
obj["request"]["sentiment"] = self.sentiment
obj["request"]["type"] = self.sentiment_type
obj["request"]["text"] = self.text
obj["response"] = {}
obj["response"]["text"] = self.response
return obj