AIML的一些标签说明

转自:http://blog.sina.com.cn/s/blog_71302a170101a8kz.html

1.think元素
例如:<think><set name=”topic”>Me</set></think>
放置在template元素里面,表示一旦用户的输入匹配到该category时,再回复应答的同时,给一个变量赋值,这里也就是把Me记再脑子里,以后就可以用<get name=”topic”/>来取出先前记住的内容。

2.<star/>表示*
比如有一个匹配模式是<pattern>* 你 好 *<pattern>;这里pattern元素里的匹配模式是用*号表示任意匹配的,但在其他元素里面不能用*号,而用<star/>这个元素来表示。
已经不推荐使用,只针对0。9版本,目前一般要加index属性来使用,例如:<star index=”1″/>,看如下对话:
用户:我的名字叫黑山!

3.<srai>元素
刺激回复人工智能,表示<srai>里面的话会被当作是用户输入,从新查找匹配模式,直到找到非<srai>定义的回复
例如:<srai>我 是 <star/></srai>,那么机器人会把“我 是 *”当作是用户输入来从新查找匹配模式。

4.<condition>元素
放在template元素里面,可以有多个condition元素,但不能嵌套(目前还不支持),有3种形式:

Name是预先定义的变量,第一种表示name变量的值如果和value相等,回复内容就包括”你好”;
第二种表示name变量的值如果里面包含value这个字符串,回复内容就包括“你好”;
第三种表示name变量的值如果存在value的值,回复内容就包括“你好”
举个使用例子:

情况一:如果事先用think设置了变量“用户名字”,而且等于“张三”,那么用户接受到的回复内容是:你好阿!你又来了阿;)
情况二:如果事先没有定义或者变量“用户名字”的值不等于“张三”,那么用户接受到的回复内容是:你好阿!
写法有以下几种:

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>
例子:

10. <input>表示用户输入,
例如: <input index=”2″/>将输出用户倒数第2次的输入,看如下对话:
用户:好阿
机器人:你也好,你叫什么名字?
用户:我叫黑山
机器人:呵呵,你好黑山。
如果有aiml文件里有片断:

如果这个时候用户输入“嘿嘿”,那么机器人将回复:你刚才说:“我叫黑山”?
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. <system><system>元素表示调用系统函数,
例如: <system>date</system>表示取系统当前日期
警告:使用这个元素要千万小心,因为有可能使用户运行你的系统命令。

19.<template>定义回复的模板。

20.<that>元素表示先前机器人说的话,例如:

即:如果机器人先前问用户“一起聊聊电影好吗?”,而且现在用户回答了“好”,那么匹配正确,回复内容为:“那你喜欢什么电影那?”
如果要取前面的前面机器人的话,可以用:<that index=”nx,ny”>,例如:<that index=”2,1”>
表示取机器人倒数第2句的话,<that index=”2,1”>也等于<justbeforethat/>

21.<thatstar index=”n”>元素先前第n个机器人说过的星号部分的话,<thatstar/>等于<thatstar index=”1″/>.
例如:

对话场景:
用户:你好
机器人:计算机 的 型 号 是 什 么
用户:p4
机器人:p4这个型号是计算机里面很好的商品

22.<think>记录用户输入且里面的内容不回复给用户
例如:

这里把female这个值保存到gender这个变量里,且回复内容不包括female。

23. <Topic name=”film”>元素用来设置主题,
例如:

只有当前的topic系统变量是“功夫”时才会匹配到这里。

24.<topicstar index=”n”>元素用来得到先前倒数第n次谈论的主题。

25.<upcase>xiaoxie</upcase>元素用来把xiaoxie转换成大写形式:XIAOXIE

注意:
aiml所有元素属性都是大小写敏感的!!!
aiml的pattern元素里面的英文必须大写!!!

AIML机器人

AIML,全名为Artificial Intelligence Markup Language(人工智能标记语言),是一种创建自然语言软件代理的XML语言,是由Richard Wallace和世界各地的自由软件社区在1995年至2002年发明的。它的雏形是一个名为”A.L.I.C.E.” (“Artificial Linguistic Internet Computer Entity”)的高度扩展的Eliza机器人。ALICE总共赢得3次每年度的Loebner奖,并且在2004年获得了Chatterbox Challenge的冠军。由于A.L.I.C.E. 的AIML设置是在GNU GPL协议下发布的,所以已经有许多基于该程序和AIML库的“克隆ALICE”出现。目前AIML已经有了Java,Ruby,Python, C ,C#,Pascal等语言的版本。

例子:http://alice.mpabo.com

AIML文件就是一个xml兼容的文本文档

AIML的常用标签:
1:pattern tag:支持模式匹配(正则表达式,模糊匹配),及基于template的返回
2:random tag:支持随机回答(一对多)
4:think,system tag: 支持简单逻辑记忆及自定义函数
5:javascript tag: 支持嵌入js脚本(适用于web chat开发,比如根据情绪改变表情等)。
6:srai tag: 支持多对一回答.
详细内容请参加AIML的官方文档:
http://alicebot.org/TR/2005/WD-aiml/WD-aiml-1.0.1-008.html

chatterbean的例子,需要bsh包。
Alice工厂: AliceBotMother

命令行聊天程序:

需要说明的是:

context.xml:设置application的属性, 及时间格式等可变属性

如上属性,都可以用AIML的<bot>标签及<get>标签访问得到。

splitters.xml:定义什么是句子,即句子的结束符。

substitutions.xml:定义容错规则及特殊字符映射等。

AIML文件:

system标签中的learn方法实现了Alice的学习功能,<input/>标签记住了之前对方的聊天记录, 通过index可以得到(倒序索引)

转自:http://lcllcl987.iteye.com/blog/473256
中文的实现:https://code.google.com/p/ameliebot/ (很久没更新了)