基於AIML的PHP聊天機器人

2020-07-16 10:06:07
chatbot:基於AIML的PHP聊天天機器人

本文章中講介紹用PHP實現的一個小聊天機器人程式,用到了php操作dom相關的知識和mysql資料庫,可以用來學習。程式碼可以從https://github.com/kompasim/chatbot下載。

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

以上就是基於AIML的PHP聊天機器人的詳細內容,更多請關注TW511.COM其它相關文章!