chatbot:基於AIML的PHP聊天天機器人
本文章中講介紹用PHP實現的一個小聊天機器人程序,用到了php操作dom相關的知識和mysql資料庫,可以用來學習。
0. 提醒
該聊天機器人是參考AIML 2.5和Program-P而寫成的,這聊天機器人實現的aiml標籤和標準的aiml標籤由一定的差距,所以你從網上下載的aiml語料庫可能沒法正常工作。
適用於UTF-8編碼的,單詞後綴根據不同的時態而改變的那些語言。
感興趣的朋友可以自己研究學習一下。
1. 介紹
這是一個用PHP寫的aiml解析器,目前在PHP5.4環境上能正常運行。
2. 資料庫配置
本程序用了MySQL資料庫,你需要把chatbot.sql 文件倒入到你的資料庫,然後在chatbot/Config.php文件裡修改相關資料庫配置變量.
4. aiml語料庫資源
你可以直接編輯 aiml/chatbot.aiml 文件或者創建一個新的aiml文件然後在aiml/chatbot.aiml文件用include標籤引入它。
5. 關於aiml文件
aiml 必須要放在 aiml 目錄內.
chatbot.aiml 是入口文件 ,它裡面的 aiml 標籤可以包含多個 category 標籤 , 一個 default標籤和多個 include標籤。
被你添加的其它 aiml 文件在根aiml標籤裡必須要包含一個 topic 標籤 , 這個topic標籤可以包含多個 category 標籤和一個default標籤 (這裡的其他aiml文件不能寫include標籤,include標籤只能出現在chatbot.aiml文件裡)。
6. 測試聊天機器人
你可以打開index.php進行和機器人聊天做測試。
7. 調用聊天機器人
如果希望在自己的應用裡面調用聊天機器人我們可以這樣調用它的api api.php?requestType=talk&input=你好
8. 關於匹配規則
修改之後的匹配規則 :
* ---> (\S+)
# ---> \S+
_ ---> .*
= ---> \S*9. 關於AIML標籤
本聊天機器人的aiml標籤和標準aiml標籤有所不同,我根據需求對標籤做了一些個性化,我們可以在AIML.MD文件裡面查到更多本聊天機器人所支持的標籤。
10. 關於api.php的返回數據
{
"status": "success",
"type": "talk",
"message": "haha ...",
"data": {
"arr1": {
"name11": "value11",
"name12": "value12"
},
"arr2": {
"name21": "value21",
"name22": "value22"
}
}
}當你訪問 api.php?requestType=talk&userInput=haha 的時候能得到以上json數據 .<category>
<pattern>haha</pattern>
<template>
<data name="arr1">
<attr name="name11">value11</attr>
<attr name="name12">value12</attr>
</data>
<data name="arr2">
<attr name="name21">value21</attr>
<attr name="name22">value22</attr>
</data>
haha ...
</template>
</category>11. 關於userId
當你給api.php以GET方式發送請求的時候帶了userId參數, 這個參數會當作用戶的唯一標識。若你沒給這個參數,程序會用用戶的ip當作唯一標示。
$userId = isset($_REQUEST['userId']) ? $_REQUEST['userId'] : $_SERVER['REMOTE_ADDR'];12. 關於多個chatbot
如果你把'chatbot/Config.php'文件裡面的multiChatbot設置成false,所有的用戶會分享一個default的chatbot。
當你設置成true的時候每個用戶都會擁有獨立的chatbot,這些chatbot會吧userId作為唯一標示,每個用戶給自己的chatbot設置相關名字,性別,年齡之類的屬性。
當你在寫一個語音助手之類的時候多個chatbot功能會特別好用,因為用戶可以給自己的語音助手設置名字了。
$user = $this->getUser($this->_unique);
if ($this->_config->multiChatbot){
$bot = $this->getBot($this->_unique);
} else {
$bot = $this->getBot("default");
}13. 關於userInfo和botInfo
userInfo和botInfo是指用戶和聊天機器人的一些屬性,例如姓名,年齡,性別等等。
用戶可以改變這些屬性,當然這是我們當寫aiml語料庫的時候通過一些標籤來實現的,我們可以從AIML.MD 學習set, get, del, user, bot等有關標籤。
<category>
<pattern>my name is *</pattern>
<template>
ok , your name is
<star/>
<set type="user" name="name">
<star/>
</set>
</template>
</category>
<category>
<pattern>what is my name</pattern>
<template>
oh , your name is
<get type="user" name="name"/>
, i remembered it last time ...
</template>
</category>14. 關於資料庫
log 存儲日誌的表 .
property 是存儲user和bot的有關屬性的表 , 相當於我們聊天機器人的腦袋,幫我們記住一些屬性。 set ,get, del, user, bot 等標籤是用來操作這個表的 .
data 表用來存儲用戶的輸入,機器人的回覆,input , that, topic 等標籤會操作Parser::$_data數組,每次程序開始運行的時候程序會從這個表加載數據到這個數組裡,然後程序要結束的時候再會存儲到這個表裡面。表的唯一標示還是userId。
源碼
https://github.com/kompasim/chatbot
-END-
▼請點擊下方:「閱讀原文」,在線查看全部文章內容!