Aiml
Aiml就是一個xml兼容的文本文檔,現簡單介紹一下xml規范:
xml每一個型如<aiml topic=”電影”>叫做一個元素,每個元素都是閉合的,也就是說要只要有<aiml>開頭就必定有</aiml>相對應與之閉合;topic=”電影”稱為改元素的屬性,一個元素可以有多個屬性沒有限制。元素和元素之間可以嵌套,但必須閉合。
一個最簡單的aiml文件如下:
<?xml version="1.0" encoding="GB2312"?>
<aiml>
<category>
<pattern>你好</pattern>
<template>好</template>
</category>
</aiml>
1. <?xml version="1.0" encoding="GB2312"?>這個是所有xml文檔都必須申明的,如果是中文這里要申明編碼為:GB2312,如果是英文則一般申明為:UTF-8
2. category表示一個目錄,表示一個一問一答匹配和一問多種應答匹配,但不允許多中提問匹配。
3. pattern表示匹配模式,表示用戶的輸入匹配,以上例子,用戶一旦輸入你好,那機器人就找到這個匹配,然后取出應答“好”;
4. template表示應答,這里應答一個“好”字。
有了這幾個簡單的元素理論上就可以寫出任意匹配模式,達到一定智能,但實際應用當中只有這些元素是不夠的,接下去將作進一步介紹。
注意:aiml所有元素屬性都是大小寫敏感的!!!
aiml的pattern元素里面的英文必須大寫!!!
4、詳細說明
1. think元素
型如: <think><set name="topic">Me</set></think>
放置在template元素里面,表示一旦用戶的輸入匹配到該category時,再回復應答的同時,給一個變量賦值,這里也就是把Me記再腦子里,以后就可以用<get name=”topic”/>來取出先前記住的內容。
2. <star/>表示*,比如有一個匹配模式是<pattern>* 你 好 *<pattern>;注意,由于機器人解析器是外國人寫的;而外國人每個單詞之間一個空格,因為,我們寫匹配的時候也要再每個漢字之間加上空格。這里pattern元素里的匹配模式是用*號表示任意匹配的,但在其他元素里面不能用*號,而用<star/>這個元素來表示。
3. <srai>元素,刺激回復人工智能,表示<srai>里面的話會被當作是用戶輸入,從新查找匹配模式,直到找到非<srai>定義的回復。例如:
<srai>我 是 <star/></srai>,那么機器人會把“我 是 *”當作是用戶輸入來從新查找匹配模式。
4. <condition>元素,放在template元素里面,可以有多個condition元素,但不能嵌套(目前還不支持),有3種形式:
<condition name="name" value="value">你好 </condition>
<condition name="name" contains="value"> 你好</condition>
<condition name="name" exists="value">你好 </condition>
Name是預先定義的變量,第一種表示name變量的值如果和value相等,回復內容就包括”你好”;第二種表示name變量的值如果里面包含value這個字符串,回復內容就包括“你好”;第三種表示name變量的值如果存在value的值,回復內容就包括“你好”(這個什么意思還不明確)
舉個使用例子:
<category>
<pattern>你 好</pattern>
<template>
你好阿!
<condition name="用戶名字" value="張三">
你又來了阿:)
</condition>
</template>
</category>
a. 情況一:如果事先用think設置了變量“用戶名字”,而且等于“張三”,那么用戶接受到的回復內容是:你好阿!你又來了阿;)
b.情況二:如果事先沒有定義或者變量“用戶名字”的值不等于“張三”,那么用戶接受到的回復內容是:你好阿!
寫法有一下幾種:
<category>
<pattern>我 頭 發 的 顏 色 是 藍 色 *</pattern>
<template>哇塞,你很
<condition name="用戶性別" value="女"> 漂亮阿!</condition>
<condition name="用戶性別" value="男">英俊阿!</condition>
</template>
</category>
<category>
<pattern>我 頭 發 的 顏 色 是 藍 色 *</pattern>
<template>哇塞,你很
<condition>
<li name="用戶性別" value="女">漂亮阿!</li>
<li name="用戶性別" value="男">英俊阿!</li>
</condition>
</template>
</category>
<category>
<pattern>我 頭 發 的 顏 色 是 藍 色 *</pattern>
<template>哇塞,你很
<condition name="用戶性別">
<li value="女"> 漂亮阿!</li>
<li value="男"> 英俊阿!</li>
</condition>
</template>
</category>
<category>
<pattern>我 頭 發 的 顏 色 是 藍 色 *</pattern>
<template>哇塞,你很
<condition>
<li name="用戶性別" value="女"> 漂亮阿!</li>
<li>好看!</li>
</condition>
</template>
</category>
這里最后一個li元素表示默認的情況;即找不到condition相匹配時,就用默認的。
5.<formal>元素,用來格式化輸出,例如:<formal>jon baer</formal>
那么回復將被格式化成首字母大寫輸出:Jon Baer,對中文無效。
6.<gender>元素,替換性別以及代名詞,例如:
<gender>She told him to take a hike.</gender>
將被替換成:He told her to take a hike,跟性別有關的單詞都將被替換,中文怎么處理不是很清楚。
7.<get name=””名字/>,即得到name的值。
8.<gossip>元素用來把改元素里面的內容保存到gossip.log文件里。
9.<if>元素,判斷元素,有以下形式:
<if name="topic" value="cars"></if>
<if name="topic" contains="cars"></if>
<if name="topic" exists="true"></if>
例子:
<template>
<if name="用戶名稱" exists="true">
你的名字叫 <get name=”用戶名稱”/>.
<else/>
你叫什么名字?
</if>
</template>
10. <input>表示用戶輸入,例如:
<input index="2"/>將輸出用戶倒數第2次的輸入,看如下對話:
用戶:好阿
機器人:你也好,你叫什么名字?
用戶:我叫黑山
機器人:呵呵,你好黑山。
如果有aiml文件里有片斷:
<category>
<pattern>嘿 嘿</pattern>
<template>
<gossip>你剛才說:“<input index="2"/>”?</gossip>
</template>
</category>
如果這個時候用戶輸入“嘿嘿”,那么機器人將回復:你剛才說:“我叫黑山”?
Index屬性的數字表示倒數第幾句話,1:倒數第一句,2:倒數第2句,依此類推。
11.<learen filename=”xxx.aiml”>元素表示讓機器人學習某個aiml文件。
12.<li></li>元素可以在random元素或condition等元素當中使用;表是一個列表;
13.<lowcase></lowcase>表示把中間的內容變成小寫,對應的是<upcase>把內容變成大寫
中文無效。
14.<pattern>表示匹配模式,里面的內容必須大寫,可以有星號* 或下劃線_,但必須空格隔開,星號表示匹配所有,任意情況;下劃線的意義跟星號一樣,除了不能匹配字典里面Z后面的字母。
15.<person>和<person2> 第一個是把第一人稱轉換成第3人稱;第2個是把第一人稱轉成第2人稱。<person/>等于 <person><star/></person>
16.<random>隨機元素,一般和<li>一起使用,表示從列表里隨機取一個。
17.<sentence>元素用來格式化句子,比如:
<sentence>this is some kind of sentence test.</sentence>
可以格式化成:This is some kind of sentence test.即把句子首字母大寫。
18.<star/>表示星號,已經不推薦使用,只針對0。9版本,目前一般要加index屬性來使用,例如:<star index="1"/>,看如下對話:
用戶:我的名字叫黑山!
<pattern>* 名 字 叫 *</pattern>
<template>呵呵,我知道了,你的名字叫<star index="2"/>。
</template>
19。<system><system>元素表示調用系統函數,例如:
<system>date</system>表示取系統當前日期
警告:使用這個元素要千萬小心,因為有可能使用戶運行你的系統命令。
20.<template>定義回復的模板。
21.<that>元素表示先前機器人說的話,例如:
<category>
<pattern>好</pattern>
<that>一 起 聊 聊 電 影 好 嗎 *</that>
<template>那你喜歡什么電影那?</template>
</category>
即:如果機器人先前問用戶“一起聊聊電影好嗎?”,而且現在用戶回答了“好”,那么匹配正確,回復內容為:“那你喜歡什么電影那?”
如果要取前面的前面機器人的話,可以用:<that index=”nx,ny”>,例如:<that index=”2,1”>
表示取機器人倒數第2句的話,<that index=”2,1”>也等于<justbeforethat/>
22.<thatstar index=”n”>元素先前第n個機器人說過的星號部分的話,<thatstar/>等于<thatstar index="1"/>.看個例子:
<category>
<pattern>你好</pattern>
<template>
計算機 的 型 號 是 什 么
</template>
</category>
<category>
<pattern>*</pattern>
<that>* 的 型 號 是 什 么</that>
<template><star/>
這個型號是<thatstar/>里面
<random>
<li>很好的商品</li>
<li>很流行的商品</li>
<li>很華麗的商品</li>
<random>。
</template>
</category>
對話場景:
用戶:你好
機器人:計算機 的 型 號 是 什 么
用戶:p4
機器人:p4這個型號是計算機里面很好的商品
23.<think>記錄用戶輸入且里面的內容不回復給用戶。例如:
<category>
<pattern>I AM FEMALE</pattern>
<template>Thanks for telling me your gender.
<think>
<set name=gender>female</set>
</think>
</template>
</category>
這里把female這個值保存到gender這個變量里,且回復內容不包括female。
24。<Topic name=”film”>元素用來設置主題,例如:
<aiml>
<topic name="功夫">
<category>
<pattern> phrase </pattern>
<that> phrase </that>
<template> phrase </template>
</category>
</topic>
</aiml>
只有當前的topic系統變量是“功夫”時才會匹配到這里。
25.<topicstar index=”n”>元素用來得到先前倒數第n次談論的主題。
26.<upcase>xiaoxie</upcase>元素用來把xiaoxie轉換成大寫形式:XIAOXIE
xml每一個型如<aiml topic=”電影”>叫做一個元素,每個元素都是閉合的,也就是說要只要有<aiml>開頭就必定有</aiml>相對應與之閉合;topic=”電影”稱為改元素的屬性,一個元素可以有多個屬性沒有限制。元素和元素之間可以嵌套,但必須閉合。
一個最簡單的aiml文件如下:
<?xml version="1.0" encoding="GB2312"?>
<aiml>
<category>
<pattern>你好</pattern>
<template>好</template>
</category>
</aiml>
1. <?xml version="1.0" encoding="GB2312"?>這個是所有xml文檔都必須申明的,如果是中文這里要申明編碼為:GB2312,如果是英文則一般申明為:UTF-8
2. category表示一個目錄,表示一個一問一答匹配和一問多種應答匹配,但不允許多中提問匹配。
3. pattern表示匹配模式,表示用戶的輸入匹配,以上例子,用戶一旦輸入你好,那機器人就找到這個匹配,然后取出應答“好”;
4. template表示應答,這里應答一個“好”字。
有了這幾個簡單的元素理論上就可以寫出任意匹配模式,達到一定智能,但實際應用當中只有這些元素是不夠的,接下去將作進一步介紹。
注意:aiml所有元素屬性都是大小寫敏感的!!!
aiml的pattern元素里面的英文必須大寫!!!
4、詳細說明
1. think元素
型如: <think><set name="topic">Me</set></think>
放置在template元素里面,表示一旦用戶的輸入匹配到該category時,再回復應答的同時,給一個變量賦值,這里也就是把Me記再腦子里,以后就可以用<get name=”topic”/>來取出先前記住的內容。
2. <star/>表示*,比如有一個匹配模式是<pattern>* 你 好 *<pattern>;注意,由于機器人解析器是外國人寫的;而外國人每個單詞之間一個空格,因為,我們寫匹配的時候也要再每個漢字之間加上空格。這里pattern元素里的匹配模式是用*號表示任意匹配的,但在其他元素里面不能用*號,而用<star/>這個元素來表示。
3. <srai>元素,刺激回復人工智能,表示<srai>里面的話會被當作是用戶輸入,從新查找匹配模式,直到找到非<srai>定義的回復。例如:
<srai>我 是 <star/></srai>,那么機器人會把“我 是 *”當作是用戶輸入來從新查找匹配模式。
4. <condition>元素,放在template元素里面,可以有多個condition元素,但不能嵌套(目前還不支持),有3種形式:
<condition name="name" value="value">你好 </condition>
<condition name="name" contains="value"> 你好</condition>
<condition name="name" exists="value">你好 </condition>
Name是預先定義的變量,第一種表示name變量的值如果和value相等,回復內容就包括”你好”;第二種表示name變量的值如果里面包含value這個字符串,回復內容就包括“你好”;第三種表示name變量的值如果存在value的值,回復內容就包括“你好”(這個什么意思還不明確)
舉個使用例子:
<category>
<pattern>你 好</pattern>
<template>
你好阿!
<condition name="用戶名字" value="張三">
你又來了阿:)
</condition>
</template>
</category>
a. 情況一:如果事先用think設置了變量“用戶名字”,而且等于“張三”,那么用戶接受到的回復內容是:你好阿!你又來了阿;)
b.情況二:如果事先沒有定義或者變量“用戶名字”的值不等于“張三”,那么用戶接受到的回復內容是:你好阿!
寫法有一下幾種:
<category>
<pattern>我 頭 發 的 顏 色 是 藍 色 *</pattern>
<template>哇塞,你很
<condition name="用戶性別" value="女"> 漂亮阿!</condition>
<condition name="用戶性別" value="男">英俊阿!</condition>
</template>
</category>
<category>
<pattern>我 頭 發 的 顏 色 是 藍 色 *</pattern>
<template>哇塞,你很
<condition>
<li name="用戶性別" value="女">漂亮阿!</li>
<li name="用戶性別" value="男">英俊阿!</li>
</condition>
</template>
</category>
<category>
<pattern>我 頭 發 的 顏 色 是 藍 色 *</pattern>
<template>哇塞,你很
<condition name="用戶性別">
<li value="女"> 漂亮阿!</li>
<li value="男"> 英俊阿!</li>
</condition>
</template>
</category>
<category>
<pattern>我 頭 發 的 顏 色 是 藍 色 *</pattern>
<template>哇塞,你很
<condition>
<li name="用戶性別" value="女"> 漂亮阿!</li>
<li>好看!</li>
</condition>
</template>
</category>
這里最后一個li元素表示默認的情況;即找不到condition相匹配時,就用默認的。
5.<formal>元素,用來格式化輸出,例如:<formal>jon baer</formal>
那么回復將被格式化成首字母大寫輸出:Jon Baer,對中文無效。
6.<gender>元素,替換性別以及代名詞,例如:
<gender>She told him to take a hike.</gender>
將被替換成:He told her to take a hike,跟性別有關的單詞都將被替換,中文怎么處理不是很清楚。
7.<get name=””名字/>,即得到name的值。
8.<gossip>元素用來把改元素里面的內容保存到gossip.log文件里。
9.<if>元素,判斷元素,有以下形式:
<if name="topic" value="cars"></if>
<if name="topic" contains="cars"></if>
<if name="topic" exists="true"></if>
例子:
<template>
<if name="用戶名稱" exists="true">
你的名字叫 <get name=”用戶名稱”/>.
<else/>
你叫什么名字?
</if>
</template>
10. <input>表示用戶輸入,例如:
<input index="2"/>將輸出用戶倒數第2次的輸入,看如下對話:
用戶:好阿
機器人:你也好,你叫什么名字?
用戶:我叫黑山
機器人:呵呵,你好黑山。
如果有aiml文件里有片斷:
<category>
<pattern>嘿 嘿</pattern>
<template>
<gossip>你剛才說:“<input index="2"/>”?</gossip>
</template>
</category>
如果這個時候用戶輸入“嘿嘿”,那么機器人將回復:你剛才說:“我叫黑山”?
Index屬性的數字表示倒數第幾句話,1:倒數第一句,2:倒數第2句,依此類推。
11.<learen filename=”xxx.aiml”>元素表示讓機器人學習某個aiml文件。
12.<li></li>元素可以在random元素或condition等元素當中使用;表是一個列表;
13.<lowcase></lowcase>表示把中間的內容變成小寫,對應的是<upcase>把內容變成大寫
中文無效。
14.<pattern>表示匹配模式,里面的內容必須大寫,可以有星號* 或下劃線_,但必須空格隔開,星號表示匹配所有,任意情況;下劃線的意義跟星號一樣,除了不能匹配字典里面Z后面的字母。
15.<person>和<person2> 第一個是把第一人稱轉換成第3人稱;第2個是把第一人稱轉成第2人稱。<person/>等于 <person><star/></person>
16.<random>隨機元素,一般和<li>一起使用,表示從列表里隨機取一個。
17.<sentence>元素用來格式化句子,比如:
<sentence>this is some kind of sentence test.</sentence>
可以格式化成:This is some kind of sentence test.即把句子首字母大寫。
18.<star/>表示星號,已經不推薦使用,只針對0。9版本,目前一般要加index屬性來使用,例如:<star index="1"/>,看如下對話:
用戶:我的名字叫黑山!
<pattern>* 名 字 叫 *</pattern>
<template>呵呵,我知道了,你的名字叫<star index="2"/>。
</template>
19。<system><system>元素表示調用系統函數,例如:
<system>date</system>表示取系統當前日期
警告:使用這個元素要千萬小心,因為有可能使用戶運行你的系統命令。
20.<template>定義回復的模板。
21.<that>元素表示先前機器人說的話,例如:
<category>
<pattern>好</pattern>
<that>一 起 聊 聊 電 影 好 嗎 *</that>
<template>那你喜歡什么電影那?</template>
</category>
即:如果機器人先前問用戶“一起聊聊電影好嗎?”,而且現在用戶回答了“好”,那么匹配正確,回復內容為:“那你喜歡什么電影那?”
如果要取前面的前面機器人的話,可以用:<that index=”nx,ny”>,例如:<that index=”2,1”>
表示取機器人倒數第2句的話,<that index=”2,1”>也等于<justbeforethat/>
22.<thatstar index=”n”>元素先前第n個機器人說過的星號部分的話,<thatstar/>等于<thatstar index="1"/>.看個例子:
<category>
<pattern>你好</pattern>
<template>
計算機 的 型 號 是 什 么
</template>
</category>
<category>
<pattern>*</pattern>
<that>* 的 型 號 是 什 么</that>
<template><star/>
這個型號是<thatstar/>里面
<random>
<li>很好的商品</li>
<li>很流行的商品</li>
<li>很華麗的商品</li>
<random>。
</template>
</category>
對話場景:
用戶:你好
機器人:計算機 的 型 號 是 什 么
用戶:p4
機器人:p4這個型號是計算機里面很好的商品
23.<think>記錄用戶輸入且里面的內容不回復給用戶。例如:
<category>
<pattern>I AM FEMALE</pattern>
<template>Thanks for telling me your gender.
<think>
<set name=gender>female</set>
</think>
</template>
</category>
這里把female這個值保存到gender這個變量里,且回復內容不包括female。
24。<Topic name=”film”>元素用來設置主題,例如:
<aiml>
<topic name="功夫">
<category>
<pattern> phrase </pattern>
<that> phrase </that>
<template> phrase </template>
</category>
</topic>
</aiml>
只有當前的topic系統變量是“功夫”時才會匹配到這里。
25.<topicstar index=”n”>元素用來得到先前倒數第n次談論的主題。
26.<upcase>xiaoxie</upcase>元素用來把xiaoxie轉換成大寫形式:XIAOXIE
總結
- 上一篇: 熵权法计算权重原理python实现
- 下一篇: 求助!ENDnoteX8+Word201