基于C ++聊天机器人排名的回答?

时间:2012-06-29 19:00:38

标签: c++ chat ranking bots aiml

我有我的个人C ++项目,目前我被困住了。似乎很多人都对这个话题提出了问题,如果这是一个重复的问题,我现在就道歉。

无论如何,这个项目是一个聊天机器人,它将根据用户输入进行回答。 当前目前,它采用整个查询并使用长{,1}}语句的低效率行查找匹配项。如果找到匹配,它将以特定答案回复。

我来到这里的原因是因为我厌倦了编写非常耗时且效率低下的if语句,这些语句甚至没有捕捉到同一问题的所有变体。我不是在寻找从维基百科或类似的东西中获取数据的代码或解决方案。我想要的是聊天机器人只回答一些简单的问题。

在我使用if语句的时候,我提出了一个想法。为什么我不像搜索引擎排名网页一样使用关键字?

我编写的代码可以计算查询中存在关键字(或几个不同的关键字)的次数。问题是如何对它们进行排名以找到最佳答案?我认为答案和关键词需要以特殊的方式存储。

到目前为止,我对主要问题的答案清单是:

1。收到查询后,通过ini文件对其进行排名,其中密钥中包含关键字,答案为其值。如果有多个答案,请使用另一个关键字并搜索该关键字以及原始关键字(缩小范围)。这样做足够的时间应该得到正确的答案。

优点:适合我需要做的事情,这是我在C ++中可以掌握的。

缺点:看起来冗长而低效,几乎再次潜入if语句......

2. 使用SQL数据库,告诉它找到适用的答案。不知道如何做到这一点。

优点:这将是轻量级的,因为数据库计算机将处理搜索并且可能非常详细。

缺点:可能会给我带来相当大的痛苦,因为我已经用C ++踩到了相当高的水域。但是,我开始认为它最终会像if语句一样。

3。有人可能会建议的最佳答案是AIML(discussed here)。

优点:用于开发智能聊天机器人,功能非常强大。

缺点:对于我的简单项目来说,似乎太“沉重”了,我无法确定一个搜索结果,这个搜索结果让我发现了一个易于理解的代码,用于采用AIML的机器人。

我希望有人可以建议一条明智的路线,因为我不是C ++的粉丝,而且我觉得我已经在这个项目中深入探索。然而,在今年夏天,我感觉自己咬着舌头,走出了我的舒适区,并且曾经在C ++中创造了一些有用的东西。我本可以在PHP中快速完成这项工作,但为了发送消息,我必须使用C ++。

1 个答案:

答案 0 :(得分:0)

前段时间我和IRC机器人做过类似的事情,为此我使用了AIML。计算关键字在句子中出现的次数似乎不是一种非常准确的方式。使用AIML可能是要走的路。如果您使用AIML,那么编写C ++代码就不必费心了,因为实际的“大脑”(因为它可以被称为)是用AIML编写的。 代码中的一个小摘录(我认为它来自大部分的示例)写入加载libaiml.xml(包含机器人的AIML代码的文件):

#include <aiml.h>
// ...
using namespace aiml;

// setup Ai bot:
cInterpreter* interpreter = cInterpreter::newInterpreter();

try {
    if(!interpreter->initialize("libaiml.xml"))
        throw 1;
} catch(int _ret) {
    cout << "ERROR: " << interpreter->getErrorStr(interpreter->getError())
         << " (" << interpreter->getError() << ")" << endl;
    if(!interpreter->getRuntimeErrorStr().empty())
        cout << "Runtime Error: " << interpreter->getRuntimeErrorStr() << endl;
}

然后我使用interpreter->respond(message, "name", result);来获得回复。 我用libaiml(需要libxml2)链接,可以在http://www.alicebot.org/downloads/programs.html.(scroll找到C ++,你应该在那里找到libaiml;请注意,您还必须安装std_utils)。由于库中的更新,我的代码可能不再有效,我不知道。幸运的是,libaiml还包含一个很好的例子,对我来说非常有用。

您应该能够找到很多关于XML格式本身的文档,例如。 http://www.alicebot.org/TR/2011/。我建议你看看我上面提到的例子(包含在libaiml中)。

祝你好运!