-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbot.py
46 lines (36 loc) · 1.6 KB
/
bot.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
import re
import long_response as long
def message_probability(user_message,recognised_words,single_response=False,required_words=[]):
message_certainty=0
has_required_words=True
for word in user_message:r̥
if word in recognised_words:
message_certainty +=1
percentage=float(message_certainty)/float(len(recognised_words))
for word in required_words:
if word not in user_message:
has_required_words =False
break
if has_required_words or single_response:
return int(percentage*100)
else:
return 0
def check_all_messages(message):
highest_prob_list={}
def response(bot_response,list_of_words,single_response=False,required_words=[]):
nonlocal highest_prob_list
highest_prob_list[bot_response]=message_probability(message,list_of_words,single_response,required_words)
response('Hello!',['hello','hi','hey'],single_response=True)
response('I\m doing fine, and you?',['how','are','you','doing'],required_words=['how'])
response('Thank you!',['for','help','me'],required_words=['code','palace'])
response(long.R_EATING,['what','you','eat'],required_words=['you','eat'])
best_match=max(highest_prob_list,key=highest_prob_list.get)
#print(highest_prob_list)
#return best_match
return long.unknown() if highest_prob_list[best_match]<1 else best_match
def get_response(user_input):
split_message = re.split(r'\s+|[,;?!.-]\s*', user_input.lower())
response= check_all_messages(split_message)
return response
while True:
print('Bot: ' + get_response(input('You: ')))