chatbot:基於 AIML 的 PHP 聊天機器人

基於AIML的PHP聊每天機器人

本文章中講介紹用PHP實現的一個小聊天機器人程序,用到了php操做dom相關的知識和mysql數據庫,能夠用來學習。代碼能夠從https://github.com/kompasim/c...下載。php

English

0. 提醒

該聊天機器人是參考AIML 2.5和Program-P而寫成的,這聊天機器人實現的aiml標籤和標準的aiml標籤由必定的差距,因此你從網上下載的aiml語料庫可能無法正常工做。適用於UTF-8編碼的,單詞後綴根據不一樣的時態而改變的那些語言。感興趣的朋友能夠本身研究學習一下。mysql

1. 介紹

這是一個用PHP寫的aiml解析器,目前在PHP5.4環境上能正常運行。git

2. 數據庫配置

本程序用了MySQL數據庫,你須要把chatbot.sql 文件倒入到你的數據庫,而後在chatbot/Config.php文件裏修改相關數據庫配置變量.github

4. aiml語料庫資源

你能夠直接編輯 aiml/chatbot.aiml 文件或者建立一個新的aiml文件而後在aiml/chatbot.aiml文件用include標籤引入它。sql

5. 關於aiml文件

  • aiml 必需要放在 aiml 目錄內.數據庫

  • chatbot.aiml 是入口文件 ,它裏面的 aiml 標籤能夠包含多個 category 標籤 , 一個 default標籤和多個 include標籤。json

  • 被你添加的其它 aiml 文件在根aiml標籤裏必需要包含一個 topic 標籤 , 這個topic標籤能夠包含多個 category 標籤和一個default標籤 (這裏的其餘aiml文件不能寫include標籤,include標籤只能出如今chatbot.aiml文件裏)。api

6. 測試聊天機器人

你能夠打開index.php進行和機器人聊天作測試。數組

7. 調用聊天機器人

若是但願在本身的應用裏面調用聊天機器人咱們能夠這樣調用它的api api.php?requestType=talk&input=你好dom

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.phpGET方式發送請求的時候帶了userId參數, 這個參數會看成用戶的惟一標識。若你沒給這個參數,程序會用用戶的ip看成惟一標示。

$userId = isset($_REQUEST['userId']) ? $_REQUEST['userId'] : $_SERVER['REMOTE_ADDR'];

12. 關於多個chatbot

若是你把'chatbot/Config.php'文件裏面的multiChatbot設置成false,全部的用戶會分享一個defaultchatbot。當你設置成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 是存儲userbot的有關屬性的表 , 至關於咱們聊天機器人的腦殼,幫咱們記住一些屬性。 set ,get, del, user, bot 等標籤是用來操做這個表的 .

data 表用來存儲用戶的輸入,機器人的回覆,input , that, topic 等標籤會操做Parser::$_data數組,每次程序開始運行的時候程序會從這個表加載數據到這個數組裏,而後程序要結束的時候再會存儲到這個表裏面。表的惟一標示仍是userId


源碼

https://github.com/kompasim/chatbot

相關文章
相關標籤/搜索