标记语言 AIML
**运行命令:**java -cp Ab.jar Main bot=test action=chat trace=false
1. AIML标签
1.1 AIML文档中常用的重要标签
<aiml>
定义AIML文档的开头和结尾<category>
定义Alicebot
知识库中的知识单元<pattern>
定义模式以匹配用户可以输入到Alicebot
的模式<template>
定义<Alicebot>
对用户输入的响应
1.2 AIML 中常用标签
<star>
用于匹配<pattern>
标签中的通配符*
字符<srai>
多用途标签,用于调用/匹配其他类别<random>
使用<random>
获取随机响应<li>
用于表示多个响应<set>
用于在AIML
变量中设置值<get>
用于获取存储在AIML
变量中的值<that>
在AIML
中用于根据上下文进行响应<topic>
在AIML
中用于存储上下文,以便以后可以基于该上下文完成对话<think>
在AIML
中用于存储变量而不通知用户<condition>
与编程语言中的switch
语句类似。有助于ALICE
响应匹配输入
1.3 AIML词汇
AIML
词汇使用单词,空格和两个特殊字符*
和 _
作为外卡。AIML 解释器优先选择具有 _
的模式而不是具有 *
的模式。AIML标记符合XML,模式不区分大小写。
示例:
<aiml version = "1.0.0" encoding = "UTF-8"?>
<category>
<pattern> HELLO ALICE </pattern>
<template>
Hello User!
</template>
</category>
</aiml>
注:
<aiml>
标记表示AIML文档的开始<category>
标签定义知识单元<pattern>
标签定义用户要输入的模式<template>
标签,如果用户键入Hello Alice
, 它定义对用户的响应
结果:
User:Hello Alice
Bot:Hello User
1.4 AMIL 基本标签
示例:
<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
<category>
<pattern> HELLO ALICE </pattern>
<template>
Hello User
</template>
</category>
</aiml>
1.4.1 <aiml>
标签
<aiml>
标签标记AIML文档的开头和结尾。它包含版本和编码属性下的版本和编码信息。version
属性存储ALICE聊天机器人知识库,表示使用的AIML版本。此属性是可选的。encoding
属性提供要在文档中使用的字符集。例如,使用 UTF-8
。强制性要求 <aiml>
标记至少包含一个 <category>
标记。可以创建多个AIML文件,其中每个 AIML 文件包含一个 <aiml>
标记。每个 AIML 文件的目的是将至少一个名为 category
的知识单元添加到 ALICE 聊天机器人的知识库。
1.4.2 <category>
标签
<category>
标签是 ALICE 机器人的基本知识单元。每个类别包含:
-
用户输入的巨资形式可以是断言,问题和感叹号等。用户输入可以包含像
*
和_
这样的通配符 -
响应
Alicebot
提供的用户输入 -
可选上下文
<category>
标记必须具有<pattern>
和<template>
标记。<pattern>
表示用户输入,<template>
表示Alicebot
的回应。如下示例:<category> <pattern> HELLO ALICE </pattern> <template> Hello User </template> </category>
即当用户输入
HELLO ALICE
时,机器人将使用Hello User
作为回复。
1.4.3 <pattern>
标签
<pattern>
标记表示用户的输入。他是 <category>
标记中的第一个标记。 <pattern>
标签可以包含通配符,以匹配多个句子作为用户输入。例如,在上述示例中, <pattern>
包含 "HELLO ALICE"
。
AIML 不区分大小写,如果用户输入 hello alice
等,所有这些输入都是有效,机器人都能够与 HELLO ALICE
进行匹配。
<category>
<pattern> HELLO ALICE </pattern>
<template>
Hello User
</template>
</category>
即机器人对 HELLO ALICE
的响应为 Hello User
.
1.4.4 <template>
标签
<template>
标签标示机器人对用户的响应。他是 <category>
标记中的第二个标记。此 <template>
标记可以保存数据,调用另一个程序,提供条件答案或委托给其他类别。
<category>
<pattern> HELLO ALICE </pattern>
<template>
Hello User
</template>
</category>
2. AIML标记
2.1 <star>
标记
<star>
标签用于匹配 <pattern>
标签中的通配符 *
。
语法:
<star index = "n" />
n
表示 <pattern>
标签中用户输入 *
的位置。
示例:
<category>
<pattern> A * is a *. </pattern>
<template>
When a <star index = "1" /> is not a <star index = "2"/>?
</template>
</category>
当用户输入 A mango is a fruit.
。 那么机器人会回答: When a mango is not a fruit?
2.2 <srai>
标记
AIML <srai>
标记是一个多功能标签,此标记使 AIML 能够为同一模板定义不同的目标。
语法:
<srai>pattern</srai>
以下是 srai
相关的常用术语
- 符号缩减
- 分而治之
- 同义词解析
- 关键词检测
1. 符号缩减
符号缩减技术用于简化模式,他有助于用简单的模式减少复杂的语法模式。
例如,请考虑以下对话:
Human: Who was Albert Einstein?
Robot: Albert Einstein was a German physicist.
Human: WHo was Isaas Newton?
Robot: Isaac Newton was a English physicist and mathematician.
若问题修改为:
Human: DO YOU KONW WHO Albert Einstein IS?
Human: DO YOU KONW WHO Isaac Newton IS?
此时, srai
标签就派上用场了。它可以将用户的模板作为模板。
**第1步:**创建类别
<category>
<pattern>WHO IS ALBERT EINSTEIN?</pattern>
<template>Albert Einstein was a German physicist.</template>
<pattern>WHO IS Isaac Newton?</pattern>
<template>Isaac Newton was a English physicist and mathematician.</template>
</category>
**第2步:**使用 <srai>
标签创建通用类别
<category>
<pattern>DO YOU KNOW WHO * IS?</pattern>
<template>
<srai>WHO IS <star /></srai>
<!-- 当该部分与相应的 <pattern> 标签匹配的时候就会回复相应的 <template> 标签内容
-->
</template>
</category>
2. 分为治之
分而治之用于重复使用子句来作出完成的回复。有助于减少定义多个类别。
例如,考虑如下对话:
Human: Bye
Robot: GoodBye!
Human: Bye Alice!
Robot: GoodBye!
每当用户在句子开头说 Bye
的时候,机器人回复 GoodBye!
在这里将使用 srai
标签。参考以下步骤:
**第1步:**创建类型
<category>
<pattern>BYE</pattern>
<template>Good Bye!</template>
</category>
**第2步:**使用 <srai>
标签创建通用类别
<category>
<pattern> BYE * </pattern>
<template>
<srai>BYE</srai>
</template>
</category>
3. 同义词解析
同义词是具有相似含义的词。机器人应该以相同的方式回复类似的单词。
例如,请考虑如下对话:
Human: Factory
Robot: Development Center!
Human: Industry
Robot: Development Center!
每当用户说 Factory
或 Industry
时,机器人回复: Development Center!
在这里使用 <srai>
标签来实现。
**第1步:**创建类别
<category>
<pattern>FACTORY</pattern>
<template>Development Center!</template>
</category>
**第2步:**使用 <srai>
标签创建通用类别
<category>
<pattern>INDUSTRY</pattern>
<template>
<srai>FACTORY</srai>
</template>
</category>
4. 关键词检测
使用 <srai>
标签,当用户键入特定关键词是,可以返回一个简单的响应,例如,无论句子中 school
还是 School
都一样,它不区分大小写字母。
例如,请考虑一下对话:
Human: I love going to school daily.
Robot: School is an import institution in a child's life.
Human: I like my school.
Robot: School is an important institution in a child's life.
在这里,每当用户在句子中包含: school
时,机器人回复标准信息:“School is an important institution in a child’s life.”。
在这里使用 <srai>
标签,并使用通配符。
**第1步:**创建类别
<category>
<pattern>SCHOOL</pattern>
<template>School is an important institution in a child's life.</template>
</category>
**第2步:**使用 <srai>
标签创建通用类型
<category>
<pattern>_ SCHOOL</pattern>
<template>
<srai>SCHOOL</srai>
</template>
</category>
<category>
<pattern>SCHOOL *</pattern>
<template>
<srai>SCHOOL</srai>
</template>
</category>
<category>
<pattern>_ SCHOOL *</pattern>
<template>
<srai>SCHOOL</srai>
</template>
</category>
3. AIML 标签
3.1 <random>
标签
<random>
标签用于获取随机响应。此标记使 AIML 能够针对相同的输入作出不同的响应。 <random>
标签与 <li>
标签一起使用。 <li>
标签设置每个不同的响应,这些响应将随机传递给用户。
语法:
<random>
<li>pattern1</li>
<li>pattern1</li>
...
<li>pattern1</li>
</random>
示例:
对话:
Human:HI
Robot:Hello!
Human:HI
Robot:Hi! Nice to meet you!
文件:random.aiml
<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
<category>
<pattern>HI</pattern>
<template>
<random>
<li>Hello!</li>
<li>Hi! Nice to meet you!</li>
</random>
</template>
</category>
</aiml>
文件:random.aiml.csv
0,HI,*,*, <random><li> Hello! </li><li> Hi! Nice to meet you! </li></random>,random.aiml