在我的回答之一中,我提到了使用Python构建聊天机器人。从今天开始,我将带大家从0开始构建一个聊天机器人。
(顺便说一句,我喜欢在上面的文本中添加链接。如果找不到文本中提到的资源,则可以检查周围是否有任何链接。)
准备工作
首先,您必须有一台装有Python的计算机。推荐使用Python 3. 6+。此外,该系统最好使用Windows系统,因为连接机器人和CoolQ的软件只有Windows版本。尽管它可以在使用Docker和wine的其他系统上运行,但不能保证稳定性。
然后,您需要在系统中安装并运行MongoDB服务。安装方法可以在这里看到。请记住,安装完成后要运行MongoDB服务,也就是说,将MongoDB作为服务安装到系统中,以使其在后台运行。
第二,您可能需要一个美观的控制台,最好与Conemu一样方便和美观。毕竟,累了就可以舔妻子(划掉
Chatterbot
Chatterbot是一个Python库,而我们的chatbot主要基于此库。
安装与其他Python库一样容易:
pip3 install chatterbot chatterbot_corpuschatterbot_corpus是Chatterbot随附的语料库。
现在简要讨论Chatterbot的原理。 Chatterbot是一个相对简单的聊天机器人,它需要大量对话材料来支持其操作。用户输入时,它将在所有语料库中查找最相似的句子,然后返回到语料库中的下一个句子。
因此,在使用Chatterbot之前,我们需要先进行培训。
from chatterbot import ChatBot
from chatterbot.trainers import ChatterBotCorpusTrainer
bot = ChatBot(
Sakura,
storage_adapter=chatterbot.storage.MongoDatabaseAdapter
)
trainer = ChatterBotCorpusTrainer(bot)
trainer.train("chatterbot.corpus.chinese")
trainer.train("chatterbot.corpus.english")让我们分析这些代码行。
bot = ChatBot(
Sakura,
storage_adapter=chatterbot.storage.MongoDatabaseAdapter
)这是使用MongoDB中的数据创建一个名为Sakura(您也可以将其更改为自己的名称)的聊天机器人。 (实际上,Chatterbot也支持SQL,但是速度太慢。)
此代码中有一个单词适配器,正式翻译为“适配器”。实际上,其更准确的含义是“组件”。创建Chatbot时有很多参数,例如xxx_adapter,这些参数可以打开机器人的各种功能。但是,应该注意的是,某些功能可能仅适用于英语,并且对其他语言的支持也不佳。
trainer = ChatterBotCorpusTrainer(bot)
trainer.train("chatterbot.corpus.chinese")
trainer.train("chatterbot.corpus.english")这些行是特定的培训代码。请注意,这是最新版本(2019/8/1 8)。以前的版本有所不同。它使用bot.set_trainer(ChatterBotCorpusTrainer)和bot.train。有关详细信息,请参阅Internet上的其他文章。
chatterbot.corpus.chinese是Chatterbot自己的语料库之一。 Chatterbot的英语语料库非常好,但是数据量却很少。但是,Chatterbot的中文语料库是完全从英语语料库中机器翻译而来的,因此它不适合中文上下文。我自己浏览网上的爱情小说,提取其中的对话,并编写了一个可以代替chatterbot附带的语料库的语料库。
上面提到的训练代码保存在一个单独的文件中,因为在每次更改主体之前只需要运行一次即可。
现在,运行培训代码,如果没有意外,您将看到一系列进度条,如下所示:


Conemu支持控制台背景图片,呵呵〜(您可以猜测背景是谁,尽管正确的猜测并没有奖赏)
如果您卡在上面的[nltk_data]中,则是网络环境问题。我别无选择,只能放弃Chatterbot框架(它将在随后的系列文章中介绍)。
(2020年2月14日增补)注意!如果在启动Chatterbot时出现以[nltk_data]开头的网络错误,请参见下面的补充内容!即使前几个启动成功,下一次启动也会失败,它仍然可以工作!

(在2020/2/3上添加)已解决!出现此问题的原因是chatterbot编写了错误的代码来判断nltk数据是否存在,这导致该数据在每次启动时都被下载,并且在特殊的网络环境中会发生此问题。解决方案如下:首先手动(由百度下载)nltk数据,然后在chatterbot目录(通常在python目录/ Lib / site-packages / chatterbot)中找到utils.py,然后更改nltk_download_corpus('stopwords '),nltk_download_corpus('averaged_perceptron_tagger'),nltk_download_corpus('vader_lexicon')更改为nltk_download_corpus('corpora / stopwords'),nltk_download_corpus('taggers / averaged_perceptron_taggers')(nltk_corpus')(nltk_corpus' ')。
培训结束后,机器人可以支持基本对话。
那么,如何将这个机器人插入自己的代码中?
首先,创建一个机器人实例,代码与上面的训练相同:
from chatterbot import ChatBot
bot = ChatBot(
Sakura,
storage_adapter=chatterbot.storage.MongoDatabaseAdapter
)机器人对象具有get_response方法,顾名思义,该方法用于获取响应。
立即尝试:
print(bot.get_response(你好吗?))稍等片刻,您可以看到机器人的答案〜
print(bot.get_response(你好吗?))
# 输出:你好!get_response返回一个Statement对象,该对象具有两个常用的属性text和confindence,分别表示所返回语句的内容和可信度(0到1)。
r = bot.get_response(你好吗?)
print({} ,confidence={}.format(r.text, r.confidence))
# 输出:你好! ,confidence=1.0这是基本操作。尽管没有高级操作,但是正确(划掉
然后是一个无限制对话的小程序:

from chatterbot import ChatBot
bot = ChatBot(
Sakura,
storage_adapter=chatterbot.storage.MongoDatabaseAdapter
)
def r(s):return bot.get_response(s).text
while True:
i = input(>>> ).strip()
if i != exit:
print(r(i))
else:
break 享受与机器人沙雕对话的乐趣!
CoolQ
现在我们有了一个可用的机器人,但是仅与机器人对话并不有趣。接下来,我们将其部署到QQ。
首先,您必须拥有QQ小号。当然,不怕吓到朋友的学生也可以使用自己的喇叭作为机器人。
我们使用的软件是KuQ,这是专门用于设置QQ机器人的软件。 CoolQ Air版本可以免费使用,并支持基本功能,例如接收和发送短信。
运行CoolQ并登录后,我们将在屏幕上看到一个浮动窗口:
当然,头像是您帐户的头像。
右键单击浮动窗口,然后选择“应用程序-应用程序管理”菜单,您可以看到如下所示的界面:


在这里,我们需要解释酷Q操作的原理。 CoolQ依赖于各种已安装的“应用程序”来运行。每个应用程序实际上是一个动态链接库。 CoolQ通过调用动态链接库的相应接口来执行应用程序的功能。但是问题来了。 Python无法编译为动态链接库。我该怎么办?
您是否注意到我的应用程序列表中的最后一个“ HTTP API”?这是解决方案。 CoolQ HTTP API是一种将CoolQ的接口封装为HTTP接口或Socket接口的应用程序。从理论上讲,它可以解决将CoolQ与所有编程语言连接的问题。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shumachanpin/article-378494-1.html
维持在中东的强大军事存在
这些军舰有什么用