首页 > 解决方案 > 如何将 CHATBOT 的未回答问题存储在文本文件中

问题描述

我是python的新手并使用chatterbot库构建聊天机器人我想将用户提出的那些聊天机器人无法回答的问题(我的意思是存储未回答的问题)存储在文本文件或数据库中,以便我们可以将他们的答案之后。这是chatterbot构造函数的代码

self.chatbot = ChatBot(
            "GUI Bot",
            storage_adapter="chatterbot.storage.SQLStorageAdapter",
            logic_adapters=[{
                'import_path': 'chatterbot.logic.BestMatch',
                'default_response': 'I am sorry, but I do not understand.',
                'maximum_similarity_threshold': 0.75
} ]
        )

这是类的完整代码

class TkinterGUIExample(tk.Tk):

    def __init__(self, *args, **kwargs):
        """
        Create & set window variables.
        """
        tk.Tk.__init__(self, *args, **kwargs)

        self.chatbot = ChatBot(
            "GUI Bot",
            storage_adapter="chatterbot.storage.SQLStorageAdapter",
            logic_adapters=[{
                'import_path': 'chatterbot.logic.BestMatch',
                'default_response': 'I am sorry, but I do not understand.',
                'maximum_similarity_threshold': 0.75
} ]
        )


        for files in os.listdir('C:/Users/HP/Desktop/FYP BOT/training_data/'):
            con=open('C:/Users/HP/Desktop/FYP BOT/training_data/'+files,'r').readlines()
            trainer = ListTrainer(self.chatbot)
            trainer.train(con)
        self.title("Chatterbot")

        self.initialize()

标签: pythonpython-3.xchatterbot

解决方案


必须有一种方法可以知道在 chatterbot 中使用了哪个逻辑适配器,或者如果没有使用它们。我能想到的最简单的方法是使用default_response.

设置default_response = '-2E-'或其他东西。接下来,添加一个 if else 条件来查看 的值str(bot.get_response(userText))是否等于-2E-。如果它们是匹配的,则意味着没有使用任何逻辑适配器并且没有找到用户输入的匹配项。

没有使用逻辑适配器意味着它是一个没有答案的输入。您现在可以将存储在文本文件中的用户输入附加userText到文本文件中。

代码:

## initialize chatter bot
bot = ChatBot(
    'robot',
    storage_adapter='chatterbot.storage.SQLStorageAdapter',
    preprocessors=[
        'chatterbot.preprocessors.clean_whitespace',
    ],
    logic_adapters=[
        {
            'import_path': 'chatterbot.logic.BestMatch',
            'default_response': '-2E-',
            'maximum_similarity_threshold': 0.90,
            'statement_comparison_function': chatterbot.comparisons.levenshtein_distance,
            'response_selection_method': chatterbot.response_selection.get_first_response
        },
        'chatterbot.logic.MathematicalEvaluation'
    ],
    database_uri='sqlite:///database.db',
    read_only=True
)

下面是代码中使用的示例逻辑。您应该根据自己的要求修改此逻辑。

## Open a file to write unknown user inputs
with open("unanswered.txt", "a") as f:

    ## Loop and get user input
    ## Check to see if none of the logic adapters was used
    if str(bot.get_response(userText)) == "-2E-":
        f.write(userText)
        return "Sorry, I do not understand."

推荐阅读