2012-06-29 46 views
5

我有我的這個個人C++項目,我目前卡住了。似乎很多人都對這個話題提出了問題,如果這是一個重複的問題,我現在要道歉。基於C++聊天機器人等級的回答?

不管怎樣,這個項目是一個聊天機器人,它會根據用戶輸入做出回答。 當前爲,因此它將採用整個查詢並使用長效率低效的語句if來查找匹配項。如果發現匹配,它將回答一個特定的答案。

我之所以來這裏是因爲我厭倦了編寫非常耗時,效率低下的陳述,甚至沒有記錄同一問題的所有變化。我不在尋找從維基百科或類似的東西獲取數據的代碼或解決方案。我想要的聊天機器人只是回答一些簡單的問題。

在我用if語句抨擊我的時候,我想出了一個主意。爲什麼我不像搜索引擎排名網頁一樣使用關鍵字?

我已經編寫了代碼,以計算查詢中存在多少個關鍵字(或多個不同的關鍵字)。問題是如何去排名他們以找到最佳答案?我會假設答案和關鍵字需要以特殊的方式存儲。

我的答案,我的主要問題名單至今都:

當接收到查詢,通過ini文件,其中有關鍵中的關鍵字排名吧,而且回答作爲它的價值。如果存在多個答案,則採用另一個關鍵字並搜索原始內容(縮小範圍)。做足夠的時間應該會得出正確的答案。

優點:適合我需要做的,這是我可以在C++中掌握的東西。

缺點:似乎冗長和低效率的,幾乎像潛入如果再次聲明......

2.使用SQL數據庫,告訴它找到適用的答案。不知道如何做到這一點。

優點:這將是輕量級的,因爲數據庫計算機將處理搜索並可能非常詳細。

缺點:對我來說可能會導致很多痛苦,因爲我已經用C++在相當高的水域踩踏了。但是,我開始認爲它會像if語句一樣結束。

3.有人可能會在這裏建議的最佳答案是AIML(這是discussed here)。

優點:用於開發智能聊天機器人,功能非常強大。

缺點:似乎對我的簡單的項目太「重」,我不能明確的是我找到一個易於理解的代碼,一個機器人是需要AIML的搜索。

我希望有人可以建議一個聰明的路線,因爲我不是C++的粉絲,我覺得我已經在用這個項目深入探索。然而,今年夏天,我覺得自己咬舌頭,走出我的舒適區,一度在C++中發揮作用。我可以在PHP中快速完成這項工作,但爲了發送消息,我必須使用C++。

+0

如果你能在php中完成它,那麼在C++中做什麼會阻止你?此外,如果您希望它看起來很智能,那麼您應該更多地關注上下文而不是關鍵字排名。 – gcochard

+1

當談到製造人工智能至少有點「智能」時,會涉及很多工作。悲傷的第一階段是接受。 –

+0

上下文會很簡單,我已經考慮過了。這只是如何找到正確或最好的答案。正如亞歷克斯提出的那樣,我擔心任何種類的人工智能都不容易做到。我不是C++的最佳人選,但同時我不爬行。我不習慣C++,我仍然圍繞着一些概念。 –

回答

0

前段時間我對IRC bot做過類似的事情,我用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中)。

祝你好運!