diff --git a/chatterbot/chatterbot.py b/chatterbot/chatterbot.py index 19b33635c..5d54676ee 100644 --- a/chatterbot/chatterbot.py +++ b/chatterbot/chatterbot.py @@ -234,20 +234,24 @@ def learn_response(self, statement, previous_statement=None): """ Learn that the statement provided is a valid response. """ + from chatterbot.conversation import Statement + if not previous_statement: previous_statement = statement.in_response_to if not previous_statement: previous_statement = self.get_latest_response(statement.conversation) - if previous_statement: - previous_statement = previous_statement.text previous_statement_text = previous_statement - if not isinstance(previous_statement, (str, type(None), )): + if not isinstance(previous_statement, (Statement, str, type(None), )): statement.in_response_to = previous_statement.text elif isinstance(previous_statement, str): statement.in_response_to = previous_statement + elif isinstance(previous_statement, Statement): + statement.in_response_to = previous_statement.text + statement.search_in_response_to = previous_statement.search_text + previous_statement_text = previous_statement.text self.logger.info('Adding "{}" as a response to "{}"'.format( statement.text, diff --git a/examples/learning_feedback_example.py b/examples/learning_feedback_example.py index b42c31158..9a031c1c4 100644 --- a/examples/learning_feedback_example.py +++ b/examples/learning_feedback_example.py @@ -1,12 +1,13 @@ -from chatterbot import ChatBot -from chatterbot.conversation import Statement - """ This example shows how to create a chat bot that will learn responses based on an additional feedback element from the user. """ +from chatterbot import ChatBot +from chatterbot.conversation import Statement + + # Uncomment the following line to enable verbose logging # import logging # logging.basicConfig(level=logging.INFO) @@ -18,9 +19,22 @@ ) -def get_feedback(): +def get_feedback(response_text: str, input_statement_text: str): + """Get feedback - text = input() + Confirm whether response generated by bot is acceptable + :param response_text : response text generated by bot + :type response_text : str + :param input_statement_text: input statement text + :type input_statement_text: str + :return: True or False + :rtype: bool + """ + + text = input('\n Is "{}" a coherent response to "{}"? \n'.format( + response_text, + input_statement_text + )) if 'yes' in text.lower(): return True @@ -28,7 +42,7 @@ def get_feedback(): return False else: print('Please type either "Yes" or "No"') - return get_feedback() + return get_feedback(response_text=response_text, input_statement_text=input_statement_text) print('Type something to begin...') @@ -36,20 +50,16 @@ def get_feedback(): # The following loop will execute each time the user enters input while True: try: - input_statement = Statement(text=input()) - response = bot.generate_response( + input_statement = Statement(text=input("User: ")) + response = bot.get_response( input_statement ) - print('\n Is "{}" a coherent response to "{}"? \n'.format( - response.text, - input_statement.text - )) - if get_feedback(): - print('please input the correct one') - correct_response = Statement(text=input()) - bot.learn_response(correct_response, input_statement) - print('Responses added to bot!') + if not get_feedback(response_text=response.text, input_statement_text=input_statement.text): + response = Statement(text=input("Please input the correct response: ")) + + bot.learn_response(response, input_statement) + print("Bot: {} # Added to bot".format(response.text)) # Press ctrl-c or ctrl-d on the keyboard to exit except (KeyboardInterrupt, EOFError, SystemExit):