AIML应答机器人(一)aiml简介
文章列表
AIML应答机器人(一)aiml简介
AIML应答机器人(二)java实现
想做一款和上图一样的自动应答机器人吗,跟着博客,咱们一步步实现,现在开始第一个内容,简单了解下什么是AIML语言
AIML
AIML:人工智能标记语言(Artificial Intelligence Markup Language)
AIML(人工智能标记语言)是一种XML兼容的语言,很容易学习,并且可以开始定制艾尔博特(Alicebot)或分分钟创建一个scratch机器人。AIML最重要的单元有:
开始和结束一个AIML文档的标签(tag)
标志着一个艾尔博特知识库(Alicebot's knowledge base)的“知识单元”标签<</font>类别>
用于包含匹配用户给艾尔博特(an Alicebot)机器人可以说或键入字符的一个简单模式(simple pattern)<<font face="宋体">模式>
包含对用户输入(user input)的响应<<font face="宋体">模板>
AIML文件中经常发现有20个左右或附加多个标签(tags),创建自己所谓“自定义谓词(custom predicates)”是可能的。现在,AIML Primer提供一个AIML初学者指南。免费Alice机器人人工智能标记语言(The free Alice机器人 AIML)包括一个约41000分类的知识库(knowledge base)
举例:
<?xml version="1.0" encoding="UTF-8"?>
<aiml>
<category>
<pattern>今天天气挺好*</pattern>
<template>是吗?我这里下雨了。要是没下雨,我就出去玩了!
</template>
</category>
<category>
<pattern>_天气_</pattern>
<template>url:http://wap.baidu.com/s?word=<star index="1" />天气</template>
</category>
<category>
<pattern>_百度下_</pattern>
<template>url:http://wap.baidu.com/s?word=<star index="2" /></template>
</category>
</aiml>
以上片段再加上html的支持,就可以实现查询天气,与百度内容
下面简单介绍下,每个标签的用法,含义,如果大家心急,可以先跳过这一步,直接去第二篇博客进行系统搭建了。
标签
1、基本标签
<aiml>:定义在AIML文件的开头和结尾。 它包含在版本和编码属性的版本和编码信息。
<category>:定义unit ofknowledge中Alicebot的知识库。每个类别包含在一个句子的形式,用户输入可以是一个断言,问题和感叹号等用户的输入可以包含通配符的字符,如*和_。用<category>标签必须有<pattern>和<template>标记。
<pattern>:定义图案什么用户可输入匹配到Alicebot。
<template> :定义一个Alicebot的用户的输入的响应。<template>标签可以保存数据,可以调用另一个程序,能够给条件答案或委托给其他类别。
2、<*> :用于匹配通配符*character(s)在<pattern>标签。
<category>
<pattern> A * is a *.</pattern>
<template>When a <starindex="1"/> is not a <star index="2"/>?</template>
</category>
3、<random> :用于获取随机响应。
4、<li> :用来表示多个响应。
<?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>
</aiml>
5、<set> :使用在AIML变量设定值。6、<get> :用于获取存储在AIML变量的值。
<?xml version="1.0"encoding="UTF-8"?>
<aiml version="1.0.1"encoding="UTF-8"?>
<category><pattern>I am*</pattern>
<template>Hello <set name="username"><star/>! </set></template>
</category>
<category> <pattern>GoodNight</pattern>
<template>Hi <getname="username"/> Thanks for the conversation!</template>
</category>
</aiml>
7、<that> :在AIML用于应对基于上下文。表示先前机器人说的话。
<?xml version="1.0"encoding="UTF-8"?>
<aiml version="1.0.1"encoding="UTF-8"?>
<category><pattern>WHAT ABOUTMOVIES</pattern>
<template>Do you like comedymovies</template>
</category>
<category><pattern>YES</pattern>
<that>Do you like comedymovies</that>
<template>Nice, I like comedy moviestoo.</template>
</category>
<category><pattern>NO</pattern>
<that>Do you like comedymovies</that>
<template>Ok! But I like comedymovies.</template>
</category>
</aiml>
Human: What about movies?
Robot: Do you like comedy movies?
Human: No
Robot: Ok! But I like comedy movies.
8、<topic> :用于AIML存储上下文,这样以后可以谈话基于这一背景下进行。
<?xml version="1.0"encoding="UTF-8"?>
<aiml version="1.0.1"encoding="UTF-8"?>
<category><pattern>LET DISCUSSMOVIES</pattern>
<template>Yes <setname="topic">movies</set></template>
</category>
<topic name="movies">
<category><pattern> *</pattern>
<template>Watching good movierefreshes our minds.</template>
</category>
<category>
<pattern> I LIKE WATCHING COMEDY!</pattern>
<template>I like comedy moviestoo.</template>
</category>
</topic>
</aiml>
Human: let discuss moviesRobot: Yes movies
Human: Comedy movies are nice to watch
Robot: Watching good movie refreshes ourminds.
Human: I like watching comedy
Robot: I too like watching comedy.
9、<think>:用于AIML存储变量不通知用户。
<?xml version="1.0"encoding="UTF-8"?>
<aiml version="1.0.1"encoding="UTF-8"?>
<category><pattern>My name is*</pattern>
<template>Hello!<think><setname="username"> <star/></set></think></template>
</category>
<category><pattern>Byeee</pattern>
<template>Hi <getname="username"/> Thanks for the conversation!</template>
</category>
</aiml>
Human: My name is MaheshRobot: Hello!
Human: Byeee
Robot: Hi Mahesh Thanks for theconversation!
10、<condition>:类似的切换在编程语言语句。 它有助于ALICE来匹配输入作出响应。
<?xml version="1.0"encoding="UTF-8"?>
<aiml version="1.0.1" encoding="UTF-8"?>
<category><pattern> HOW ARE YOUFEELING TODAY </pattern>
<template><think><setname="state"> happy</set></think>
<condition name="state"value="happy">I am happy!</condition>
<condition name="state"value="sad">I am sad!</condition></template>
</category>
</aiml>
Human: How are you feeling todayRobot: I am happy!
11、<srai>:多用途标签,用来调用其它/匹配的类别。(符号缩减、分而治之、同义词分辨率、关键词检测)
<?xml version="1.0"encoding="UTF-8"?>
<aiml version="1.0.1"encoding="UTF-8"?>
<category><pattern> WHO ISALBERT EINSTEIN </pattern>
<template>Albert Einstein was agerman physicist.</template>
</category>
<category><pattern> WHO ISIsaac NEWTON </pattern>
<template>Isaac Newton was a englishphysicist and mathematician.</template>
</category>
<category><pattern>DO YOU KNOWWHO * IS</pattern>
<template><srai>WHO IS<star/></srai></template>
</category>
<category><pattern>BYE</pattern>
<template>Good Bye!</template>
</category>
<category><pattern>BYE*</pattern>
<template><srai>BYE</srai></template>
</category>
<category><pattern>FACTORY</pattern>
<template>DevelopmentCenter!</template>
</category>
<category><pattern>INDUSTRY</pattern>
<template><srai>FACTORY</srai></template>
</category>
<category><pattern>SCHOOL</pattern>
<template>School is an importantinstitution in a child's life.</template>
</category>
<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>
<category><pattern>_ SCHOOL*</pattern>
<template><srai>SCHOOL</srai></template>
</category>
</aiml>
Human: I love going to school daily.Robot: School is an important institutionin a child's life.
Human: I like my school.
Robot: School is an important institutionin a child's life.
12、<upcase>xiaoxie</upcase>元素用来把xiaoxie转换成大写形式:XIAOXIE
13、<system><system>元素表示调用系统函数,例如:<system>date</system>表示取系统当前日期。
14、<sentence>元素用来格式化句子,比如:<sentence>this is some kind ofsentence test.</sentence>可以格式化成:This is some kind of sentence test.即把句子首字母大写。
15、<pattern>表示匹配模式,里面的内容必须大写,可以有星号* 或下划线_,但必须空格隔开,星号表示匹配所有,任意情况;下划线的意义跟星号一样,除了不能匹配字典里面Z后面的字母。
16、<lowcase></lowcase>表示把中间的内容变成小写,对应的是<upcase>把内容变成大写
中文无效。
17、<learenfilename=”xxx.aiml”>元素表示让机器人学习某个aiml文件。
18、<if>元素,判断元素,有以下形式:<if name="topic"value="cars"></if> <if name="topic"contains="cars"></if> <if name="topic"exists="true"></if>
19、<formal>元素,用来格式化输出,例如:<formal>jon baer</formal>那么回复将被格式化成首字母大写输出:Jon Baer,对中文无效。
20、<NUM/>元素,匹配数字
21、约束匹配模式
<category>
<pattern that="你好">你好啊</pattern>
<template>
<random>
<li>你好,我们刚刚说过一遍了。</li>
<li>你好,客气啥!</li>
</random>
</template>
</category>
上述示例中,并不会直接命中”你好啊“,而是在上一次是匹配的”你好“,当又匹配了”你好啊“才会命中上述category,即上次和当前次的连续匹配下一篇: 超越苹果!小米成为世界第二的深层逻辑