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>我 头 发 的 颜 [...]