aiml规范研究文档

酥酥 发布于 2022-03-22 55 次阅读


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元素里面的英文必须大写!!!


高阶用法介绍

3.1 <star>

可以用*表示1个或多个任意字符

				
					<category>
    <pattern>晚安*</pattern>
    <template>
        好的,晚安,做个好梦哈~
    </template>
</category>
				
			

output:

				
					user: 晚安啦/晚安哦,宝贝/晚安,亲/晚安晚安...
bot: 好的,晚安,做个好梦哈~
				
			

*的元素可以取出

				
					<category>
    <pattern>我是*</pattern>
    <template>
        哈哈,<star/>最近怎么样呀?
    </template>
</category>
				
			

output:

				
					user:我是老师
bot:哈哈,老师最近怎么样啊
				
			

有大于一个*时,可根据索引提取,索引从1开始

				
					<category>
        <pattern>*介绍一下*</pattern>
        <template>
           <star index = "2"/>是阿里老板
        </template>
</category>
				
			

output

				
					user: 能介绍一下马云吗
bot: 马云是阿里老板
				
			

3.2 <srai>

把srai作为输入如下图例子中匹配到* 不聊 * 则相当于用户输入再见再次匹配得到返回”好,回聊哈”

				
					<category>
    <pattern>再见</pattern>
    <template>
        好,回聊哈!
    </template>
</category>
<category>
    <pattern>*不聊*</pattern>
    <template>
        <srai>再见</srai>
    </template>
</category>
				
			

output

				
					user: 再见
bot: 好,回聊哈!

user: 太晚了,不聊了哦
bot: 好,回聊哈!
				
			
				
					<category>
<pattern>谁是马云</pattern>
<template>马云是阿里巴巴的老板</template>
</category>

<category>
<pattern>谁是马化腾</pattern>
<template>马化腾是腾讯的老板</template>
</category>

<category>
<pattern>你知道谁是*吗</pattern>
<template>
谁是<star/>!
<srai>谁是<star/></srai>
</template>
</category>
				
			

output

				
					user: 谁是马云
bot: 马云是阿里巴巴的老板

user: 你知道谁是马云吗
bot: 马云是阿里巴巴的老板
				
			

3.3 <random> <li>

				
					<category>
<pattern>HELLO</pattern>
<template>
<random>
<li>Hi~Dear~.</li>
<li>您好呀.</li>
<li>在呢在呢.</li>
<li>臣妾在,圣上有何指示.</li>
<li>嗨,您好,我是王小草机器人,我的主人不在,有什么悄悄话可以和我说哦~</li>
</random>
</template>
</category>
				
			

output

li中的随机一个作为返回

3.4 <set> <get>

				
					<category>
<pattern>我叫*</pattern>
<template>
<think>
<setname="name">
<formal><star/></formal>
</set>
</think>
哈哈,<getname="name"/>,别来无恙啊
</template>
</category>
user: 我叫李莫愁
bot: 哈哈,李莫愁,别来无恙啊
<category>
<pattern>*我是谁*</pattern>
<template>
<random>
    <li>你是<getname="name"/>呀,把你放在心里面</li>
    <li><getname="name"/>,<getname="name"/>,<getname="name"/>,重要的名字说三遍</li>
</random>
</template>
</category>
				
			

output

				
					user: 还记得我是谁吗?
bot: 李莫愁,李莫愁,李莫愁,重要的名字说三遍
				
			

3.4 <think>

下图与get、set配合使用 表示把变量记在p1中

				
					<category>
<pattern>没有</pattern>
<that>那你有打火机吗</that>
<template>
<think><setname="p1"><formal>true</formal></set></think>
那你为什么点燃了我的心?
</template>
</category>
				
			

3.5 <that>

				
					<category>
<pattern>没有</pattern>
<that>那你有打火机吗</that>
<template>
<think><setname="p1"><formal>true</formal></set></think>
那你为什么点燃了我的心?
</template>
</category>
				
			

output

				
					bot: 你有打火机吗?
user: 没有
bot: 那你为什么点燃了我的心?
				
			

3.6 <condition>

比较name中存储的变量与value值是否相等,相等则输出对应的话语

				
					<category>
<pattern>ASKUSERAQUESTION</pattern>
<template>
<condition>
<li name="age" value="">小哥哥你多大了?</li>
<li name="p1"  value="">那你有打火机吗?</li>
<li name="p2" value="">你猜我是什么做的?</li>
<li name="p3" value="">有没有计划过什么时候结婚?</li>
<li name="p4" value="">你知道为什么我的眼睛特别美吗?</li>
<li name="p5" value="">给你一样东西你要不要?</li>
<li name="p6" value="">哈哈哈,不套路你了,要不咱们聊点别的吧?</li>
</condition>
</template>
</category>
				
			
				
					<category>
<pattern> HOW ARE YOU FEELING TODAY </pattern>  
<template>
<think><set name = "state"> happy</set></think>
<condition name = "state" value = "happy">
I am happy!
</condition>

<condition name = "state" value = "sad">
I am sad!
</condition>
</template>
</category>
				
			

3.7 <topic>

给category一个标识

				
					<category>
<pattern>*聊*吧</pattern>
<template>
<think><setname="p6"><formal>true</formal></set></think>
<think><setname="topic"><formal><starindex="2"/></formal></set></think>
OK,<getname="topic"/>,我喜欢!
</template>
</category>

<topicname="手机">
<category>
<pattern>我喜欢苹果</pattern>
<template>
我比较喜欢华为,想问苹果的前置摄像头拍出来的到底是什么鬼
</template>
</category>
</topic>

<topicname="水果">
<category>
<pattern>我喜欢苹果</pattern>
<template>
我比较喜欢芒果,苹果我吃厌了
</template>
</category>
</topic>
				
			

3.8 <learn>

学习指定的aiml文件

3.9 其他

<date>返回系统时间

				
					<category>
    <pattern>几点了</pattern>
    <template>
        现在是:<system>date</system>
    </template>
</category>
				
			

<formal> 格式化

				
					<category>
    <pattern>FORMAL *</pattern>
    <template><formal><star /></formal></template>
</category>
				
			

<gender>性别转换

				
					<category>
    <pattern>DOES IT BELONG TO *</pattern>
    <template>No, it belongs to <gender><star/></gender></template>
</category>
				
			

<input> 获取用户输入的语句

				
					<category>
<pattern>你能跟我说一样的话吗</pattern>

<template><input /></template>

</category>

<category>
<pattern>你还记得我上一句话吗</pattern>

<template><input index = "2"/></template>

</category>
				
			

<size>获取规则的数目

				
					<category>
<pattern>你懂多少 *</pattern>
<template>
我懂<size />条规则.
</template>
</category>
				
			

<version>

				
					<version>

<category>
<pattern>你的版本 *</pattern>

<template>
我已经<version />了.
</template>

</category>
				
			

output

				
					user: 几点了
bot: 现在是: Thu  Feb  1  20:15:25  CST  2018

user: FORMAL wang xiao cao
bot: Wang  Xiao  Cao

user: DOES IT BELONG TO him?
bot: No,  it  belongs  to  her

user: 你能跟我说一样的话吗
bot: 你能跟我说一样的话吗

user: 你还记得我上一句话吗
bot: 你能跟我说一样的话吗

user: 你懂多少问答模式了? bot: 我懂 70 条规则. user: 你的版本是什么 bot: 我已经 PyAIML 0.8.6 了.
				
			
仰天大笑出门去,我辈岂是蓬蒿人
最后更新于 2022-03-22