Building a chatbot that learns Python

Building a chatbot that learns in Python


In this tutorial we will be building a chatbot that learns in Python. Chatbot’s are simple but sometimes complex programs to write. from simple chatbots to machine learning backed chatbots. All chatbots have a common ground the ability to carry out conversations and ability to learn in the process (though not all follow this).

I used a simple algorithm LCA(Learning Chatbot Algorithm) as I like to call it. It is really easy. The the algorithm is shown below.:

Function LCA(text):
Brain —> datasource for conversations
If learning:
Return best suited response for text

That’s just it, we will implement this simple stuff in Python.

Python implementation:

This project is object oriented so we will make use of Python’s class method.

Creating the class and declaring variables we will be using:

class Chatbot(object):
    def __init__(self,name,**kwargs):       = name
        self.read_only = kwargs.get("read_only",False)
        self.filex = open("LCA.txt","a+")
        # show learning mode
        if not self.read_only:
            print(" now in learning mode")
            if self.read_only: print (" now in read only mode")
            else: print(" now in learning mode")  
        #define some local variables
        self.threshold = 70
        self.temp_memory = []        
        self.response = None
        self.msg = "learning disable please enable learning by setting the read only flag to False"

We will be needing 4 helper functions to implement our algorithm.

will now explain this functions one by one.

learn_response_from accepts 2 arguments input, response and saves them up in a text file with a newline as the separation between them.

def learn_response_from(self,inputx,response):
        self.filex = open("LCA.txt","a+")

Learner : The function that let’s our chatbot learn, when our bot doesn’t know the response to query it asks us what should be the response.

def Learner(self,input):
        learns a new response if there is no response to an input 
        or returns an response if there is one
        self.response = None
        self.brain = [i.strip() for i in open("LCA.txt")]
        # are we allowed to learn new response
        if self.read_only:
            return self.msg
        # checks wether we are learning a new sentence
        elif len(self.temp_memory) == 1:
            sentence = self.temp_memory[0]
            response = self.temp_memory[1]
            if response != "":
                self.temp_memory = []
                self.temp_memory = []
                return("discarded learning")
        # checks wether we already know the input parsed
        elif input in self.brain:
        # since we don't recognize the input we LEARN it
            return("%s ?"%"please what should be my response")

Generate_response : This function makes use of the euclidean similarity index to find our match of our query in our bot’s brain. A response is the next sentence in our chatbot’s brain or the previous Incase of an end of file error.

def Generate_response(self,input,data_source):
        Generates a list of responses for the LCA to choose from
        for id,text in enumerate (data_source):
            #print(text +"==="+ input,euclidean_similarity(text,input))
            if euclidean_similarity(text,input) >= self.threshold:

is_learning returns True or False after validating whether or not to learn a given input.

def is_learning(self,input):
        checks wether the chatbot is supposed to learn a new response to an input
        returns True or False
        self.brain = [i.strip() for i in open("LCA.txt")]
        if len(self.temp_memory) == 1:
            return True
        elif input in self.brain:
            return False
        elif self.Generate_response(input,self.brain) != None :
            return True

Our algorithm implemented in Python.

def LCA(self,input):
        the engine box of the entire program balances between learning and response generation
        response = None
        self.brain = [i.strip() for i in open("LCA.txt")]
        if self.is_learning(input):
            return self.Learner(input)
            response = self.Generate_response(input,self.brain)
            if input == "":return("Null input")
            if input not in self.brain and self.read_only != True:
                if type(response) == list:
                    response = choice(response)
                    response = (len(self.brain)+1,response[1])

Our chatbot in action:

building a chatbot that learns

Learning a response to a query.:

Learning chatbot

Learning chatbot

Easy huh?? Get the full code. The chatbot’s learning could still be improved. I hope you completed the building a chatbot that learns in Python tutorial with ease, you can use comment section to ask questions, I promise to reply ASAP.

Leave a Reply

Your email address will not be published. Required fields are marked *