I wrote a simple chatbot in Python a while ago, and I'd like to know how it could be improved. Here's the code:
import random
import pickle
class Bot:
current = ""
botText = "BOT> "
def __init__(self, data, saveFile):
self.data = data
self.saveFile = saveFile
def say(self, text):
print(self.botText + text)
self.current = text
def addResponse(self, userInput, response):
if userInput in self.data:
self.data[userInput].extend(response)
else:
self.data[userInput] = []
self.data[userInput].extend(response)
def evaluate(self, text):
if text in self.data:
self.say(random.choice(self.data[text]))
elif text == "/SAVE":
f = open(self.saveFile, 'wb')
pickle.dump(self.data, f)
f.close()
elif text == "/LOAD":
f = open(self.saveFile, 'rb')
self.data = pickle.load(f)
f.close()
elif text == "/DATA":
print(self.data)
else:
if not self.current in self.data:
self.data[self.current] = []
self.data[self.current].append(text)
self.say(text)
Here's how the bot works. I'm sorry if you don't understand, I'm not the best at explaining things.
- User enters input.
- If the input is in the database, choose a random response associated with the input and output it.
- If it isn't, add the input to the database and echo the input.
- User enters input again.
- The input is associated with the bot's output.
Inputs and outputs can be added manually using the addResponse() function.
There are also a few commands, which are quite self-explanatory, but I'll list them here anyways.
- /SAVE pickles the file and saves it in the
saveFile. - /LOAD unpickles the
saveFileand loads it. - /DATA displays the database.