基于许多有关botovodam的文章...
最近,我开发了“交钥匙”这个致力于vk.com社交网络的有趣项目。 任务很简单-创建一个可以添加到对话中并会给出随机引号的漫游器。 但这似乎太简单了,所以我不得不重振伟大的哲学家尼采(Friedrich Nietzsche),他将机器人变成机器人-过度机器人...

我没有看到任何复杂的内容,因此很快编写了这样的脚本:
授权->阅读消息->分析并生成响应->响应所有这些都是使用
Callback API VK v.5.80 (
没有新内容 )完成的
最困难的一点是“分析和响应形成”。 确实,这是最重要的事情。
但是事实是,我想创建一个“或多或少的智能机器人”,而不是简单地从字典中发布随机短语。
“我是如何做到的?它是如何工作的?”-请阅读...
所以,让我们开始吧!
原则上,该机器人具有相当简单的功能,但只是表面上简单。 如果您更深入,那么一切都会更加复杂,因为我们将使用
PHP (
)编写
我再说一遍,我不需要引号生成器,所以我决定向机器人询问一些逻辑。 但是,我也不需要神经网络,因为学习是一项艰巨的任务。
当我试图复兴十九世纪的伟大哲学家弗里德里希·尼采时,我用创造力解决了这个问题。
是的,它将由Nietzsche担任该机器人的角色,因此,即使是随机引号也会显得更聪明。
但是我想以某种方式团结对话者和机器人,在它们之间建立连接...
因此,对话者的短语被作为基础,通过过滤器转换为关键词,然后从先前的基础中找到句子。
这样,就好像形成了对提问者问题的答案。
我收到了这样的来自用户的新消息:
然后,他以适当的形式显示了该消息,以突出显示关键字并将其输入数据库搜索。
首先,我完全摆脱了结尾“
a,and s,am,yami,ah,oh ... ”,依此类推……我删除了标点符号和其他字符。
其次,我没有考虑介词。 首先,我限制单词的长度-最多3个字母。 但这是错误的,因为尼采的哲学以“
上帝,世界,岩石,世纪等 ”为代表。 另外,在过滤掉四个字母的单词之后,存在三个字母的单词,因为结尾被丢弃了。 然后,我仅将搜索范围限制为:“
超过,什么,关于,如何,在哪里等 ”。
第三,尼采在自己的书中写了更多书,所以他分别
用“我的,我的,我爱的,我可以的 ”代替了诸如“
你的,你的,你的,爱的,你可以的”之类的词 。
因此,获得了一种对话。
此外,有必要建立基础,从尼采的书籍摘录中选出一个短语/引语/陈述的字典。
我以升为单位从
txt格式下载了尼采的书籍。 将它们聚集在一起,然后过滤:
1个引号= 1个句子(
使用分隔符为 “。”,“!',”?“ )
事实证明,这种类型的基础是:
- , , -
, , , ,
, , : ,
,
嗯,有一个数据库和来自用户的过滤消息。
: ", ?"
: " "
它仍然可以固定搜索系统。 这很困难,因为不同的设置会产生不同的结果。 而且,如果一个代码给出了正确的答案,则另一个请求没有给出所需的内容。
决定不使用正则表达式,而是将它们与内置函数一起使用,例如:
substr
stripos
substr_count
和其他文字功能...
在较长的比较条件和无限长的周期的帮助下,我大致达到了所需的结果。
搜索逻辑是这样的:遍历每个句子并从传入消息中找到该句子中存在的单词。
如果找到该单词,则将+1添加为“变量的权重”。
因此,在句子中找到的单词越多,“变量的权重”就越大。
这表明,如果在数据库中的某些句子中找到“道德与生命”一词,那么这将是100%的答案。
但是,如果单词是主题,并且产生了100%的结果,那么rand()方法就会发出random()方法。
另外,这些句子并非总是很小的句子,所以我不得不大致按照这样的规则来整理答案:
preg_match('/(?:^|\.\s+)([^\.]*?'.$wordpattern.'[^\.]*?\.+)\s+/i', $text , $matches);
然后一切都是自动的:
发送信息
$request_params = array( 'message' => $matches[1],
我没有专门上传所有代码,但是它相对较小。 目的是根据需要创建响应引擎,而不是人工训练的情报。
您可以在
此链接上测试机器人。 只是给他写一条消息。 重要的是要知道,在句子的开头,您需要加上“ Nietzsche”(尼采),就好像在提到它一样,只有这样,机器人才会做出响应。
这是一个测试版本,因此不完整,因此不能使用垫子,青年语,单词错误等。该机器人没有考虑到这一点,并且基数仅为10,000个短语。
作为示例,我可以给出对话框:






结论:是的,该机器人与用户之间没有双向通信-它不是人工智能。 但是,在众多参与者的交谈中,该机器人将成为一个很好的“对话者”。