aiml规范研究文档

原创 2005年02月25日 20:52:00

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/>表示星号,已经不推荐使用,只针对09版本,目前一般要加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


附录:

有一位亲戚,脾胃虚弱,消化吸收功能很差,面色腊黄,体重日益下降,整天没精打采。我将少林饭后罗汉卧功介绍给他,他治病心切,认真练习,20余日就初见成效,饭量增加了,人也有了精神。见了效果,练得更认真了,两个多月后,我去看他,只见他面色红润,说话铿锵有力,体重也增加了,与过去判若两人。这个功很简单,一学就会,现简介于下。

  饭后斜卧床上或躺在沙发上,使上身与地面成3045度的斜角,放松裤带,两腿散盘,舌抵上腭,自然呼吸,两掌相叠于腹部丹田上,意想腹内有水旋涡转动,然后用右掌以肚脐为圆心,在肚皮上方约10厘米处顺时针方向转圈180次;再用左掌依法逆时针方向转圈180次。手掌带动腹内内气运转,是靠意念去指挥的,是靠手掌的感应去引动的,应做到手掌不能太用力,也不能完全不用力,而是稍带暗力,力与意结合将内气引动运转起来。当丹田真气充实,真气会循经下行至会阴,会阴即出现跳动、热、凉、麻等感觉,还会出现性欲感,此时应加以克制,排除杂念。

  此少林饭后罗汉卧功是少林寺第33代俗家弟子李森堂老师于1986年编入“少林广成气功”内的,几乎所有功法在饭后半小时内是禁练的,而此功是吃过饭马上就练,可以借谷气而增强内气,所以能迅速培养内气,在较短期内打通任脉和督脉,使小周天运转起来。通过导引行气,脾胃之气运转起来后,带动肝、肺、肾等脏腑之气同时运转,从而调动五脏六腑潜在的健身、防病治病的能力,所以除了能防治消化系统慢性病外,对气管炎、哮喘、妇女月经不调和男性阳痿早泄、肾虚尿频尿急等也有可喜效果。一个极简单的动作就能使五脏俱和、六腑皆安,符合“大道至简”的原则,因而嵩山少林寺主持德祥法师称赞这一功法“为少林增辉”。我常练此功以代替午睡,功后神情爽朗、思路敏捷,对下午的工作、学习有很大的帮助。过去常患感冒,自练此功后,从未患过病,精神饱满,步履轻捷,大有行百里而不倦之精神,有意者一试便知

相关文章推荐

[NLP]AIML初探

1.简介AIML的全称是 Artificial Intelligence Modelling Language,是基于xml格式标签,用于开发的人工智能应用程序。 它的特点就是基于对话模板的匹配,因...

人工智能:用AIML写一个机器人

最近搞了一把人工智能,感觉AIML(Artificial Intelligence Mark-up Language)确实是个好东西,特笔记之。AIML OVERVIEW:http://www.pan...

人工智能标记语言AIML聊天机器人:…

人工智能标记语言AIML聊天机器人:产生、种类、应用、实例、AIML概述、知识库、公司、业界(20k字经典收藏版) 秦陇纪10译编 聊天机器人(chatterbot)是一个用来模拟人类对话或聊天...

AIML标签

1、基本标签 :定义在AIML文件的开头和结尾。 它包含在版本和编码属性的版本和编码信息。 :定义unit of knowledge中Alicebot的知识库。 每个类别包含在一个句子的形式,用户...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

从零开始写聊天机器人

目录目录 简介 搭建聊天机器人的嘴巴对话功能 1 websocket简介 1 Tornado实现websocket服务端 2 Tornado实现websocket客户端 搭建聊天机器人的大脑AIML ...

聊天机器人 AIML文件 <topic>标签解释(三)

在一些特定的语境下,我们希望聊天能围绕一个主题展开,这个时候,标签就派上用场了。 假设,我们希望跟机器人展开一段“爱情”的话题,则示例: 聊聊爱情 可以啊爱情         什么是爱情 ...

聊天机器人 AIML文件 标签解释(一)

网上找了一堆资料,发现英文的写的还比较详细,中文的都是寥寥几字,所以想自己整理下自己对于AIML文档的见解。     AIML文件其实和XML文件是类似的,是聊天机器人回答问题的一个模板,机器人根据...

Alice实现自定义标签

上一篇分析了Alice支持中文,这一篇介绍Alice自定义标签。源码下载地址点击这里 Alice标签解析过程     要想自定义标签,得先清楚Alice标签原理,我不想说的太细,大致说...

swing美化包的应用

是不是厌倦了JAVA中AWT与swing的呆板,那就用美化的皮肤包来是你的界面更加的精美吧!!! 本篇主要介绍两种美化的皮肤包:substance.jar和jtattoo.jar 皮肤包可以美化s...
  • dyyyyl
  • dyyyyl
  • 2013年12月08日 09:47
  • 2744
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:aiml规范研究文档
举报原因:
原因补充:

(最多只允许输入30个字)