python - 如何将 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()
解决方案
必须有一种方法可以知道在 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."
推荐阅读
- laravel - vuejs + laravel中的权限导航?
- oracle11g - ORA-00936: ALTER 表 table_name 修改时缺少表达式错误 (column_name DEFAULT on null column_name.nextval)
- .net-core - 检查使用 Task.Run 调用的线程的状态
- javascript - 您如何解决正文内容与使用 HTML、CSS 和 JavaScript 创建的响应式导航栏重叠的问题?
- c++ - 变量在某处打印但不在其他地方打印?
- qt - 如何将 QML 小部件提升到顶部?
- xamarin - Xamarin 条目在删除最后一个字符时不会引发绑定项目属性的设置器
- docker - 在 macbook 上使用 docker 安装 sql server 时出错
- android - Android 用 Livedata 和 ViewModel 替换 Greenrobot 事件机制
- python - 如何在火花中合并数据框中的列表