文章目录

  • 关于AIML
    • 关于 PYAIML
    • 安装
  • AIML标签
  • 元素示例
    • AIML
  • Topic 主题
    • Category 类别
  • Pattern 模式
  • Template 模板
  • 原子模板元素
    • Star(*)
    • Template-side that
    • Input
    • Thatstar
    • Topicstar
    • Get
    • Short-cut
    • System-defined predicates
  • 文本格式化元素
    • Text Format
  • 条件元素
  • 捕获元素
  • 转换元素
  • 隐藏元素
    • think
    • Learn
  • 扩展处理器元素
    • System
  • 使用 aiml 自带文件
  • 创建配置文件
  • 相关资料

关于AIML

AIML:Artificial Intelligence Markup Language,人工智能标记语言

AIML是由 Alicebot自由软件社区 和 Richard S. Wallace博士在1995-2000期间开发。
AIML用于创建或自定义Alicebot,这是一个基于 A.L.I.C.E(人工语言互联网计算机实体)聊天框应用程序的免费软件。


  • 官网:http://www.aiml.foundation
  • AIML docs:http://www.aiml.foundation/doc.html
  • Github:https://github.com/AIML-Foundation
  • PYPI:https://pypi.org/project/aiml/

关于 PYAIML

  • Pypi:https://pypi.org/project/PyAIML/
  • Github:https://github.com/andelf/PyAIML

安装

(base) $ pip install aiml

AIML标签

以下是AIML文档中常用的重要标签。

编号 标签 描述
1 <aiml> 定义AIML文档的开头和结尾。
2 <category> 定义Alicebot知识库中的知识单元。
3 <pattern> 定义模式以匹配用户可以输入到Alicebot的模式。
4 <template> 定义Alicebot对用户输入的响应。

我们将在AIML基础标签章节中讨论这些标签。
以下是一些其他广泛使用的aiml标签。 我们将在接下来的章节中详细讨论每个标签。

编号 标签 描述
1 <star> 用于匹配<pattern>标签中的通配符*字符
2 <srai> 多用途标签,用于调用/匹配其他类别。
3 <random> 使用<random>获取随机响应。
4 <li> 用于表示多个响应。
5 <set> 用于在AIML变量中设置值。
6 <get> 用于获取存储在AIML变量中的值。
7 <that> AIML中用于根据上下文进行响应。
8 <topic> AIML中用于存储上下文,以便以后可以基于该上下文完成对话。
9 <think> AIML中用于存储变量而不通知用户。
10 <condition> 与编程语言中的switch语句类似。 它有助于ALICE响应匹配输入。

  • 类别,代表一次会话
  • 模式,用来匹配对方的问题
  • 模板
  • 原子模板元素
  • <Template-side that>
  • <Input>
  • <Thatstar>
  • <Topicstar>
  • <Get>
  • <Short-cut>
  • <System-defined predicates>
  • <Text Format>
  • 条件元素
  • 捕获元素
  • 转换元素
  • 隐藏元素
  • 扩展处理器元素

元素示例


AIML

Aiml:定义在AIML文件的开头和结尾。
它包含版本和编码属性的版本和编码信息。


语法结构

<aiml:aiml version = number>
<!-- Content: top-level-elements) -->
</aiml:aiml>

案例

<?xml version="1.0" encoding="UTF-8"?>
<aiml>
<category><pattern>hi</pattern><template>你好</template>
</category>
</aiml>

Topic 主题

用于AIML存储上下文,这样以后可以谈话基于这一 背景下进行。


语法规则

<!-- Category: top-level-element -->
<aiml:topic name=aiml-simple-pattern-expression>
<!-- Content: aiml:category+ -->
</aiml:topic>

说明

  • 顶级元素:可以包含
  • 可选元素:一个AMIL对象必须包含0/1个主题元素
  • Name属性:必须包括Name属性
  • 独立空间:完整的匹配路径

案例

设置主题:只有当前的topic系统变量是“功夫” 时才会匹配到这里;

<aiml>
<topic name="功夫">
<category>
<pattern> phrase </pattern> <that> phrase </that> <template> phrase </template> </category>
</topic>
</aiml>

Category 类别


语法规则

<!-- Category: top-level-element -->
< aiml:category><!-- Content: aim/-category-elements -->
</aiml:category>

规则说明

  1. 顶级元素或二级元素(包含于Topic)
  2. 必选元素:一个AIML必须包含1-N个类别元素
  3. 无属性
  4. 必须包含子标签: <pattern> </pattern><template> </template>

Pattern 模式


语法规则

<!-- Category: aiml-category-elements --
< aiml:pattern>
<!-- Content: aiml-pattern- expression ->
</aiml:pattern>

二、规则说明

  1. 用户表达内容;
  2. 必选元素:一个类别必须包含1-N个模式元素;
  3. 无属性
  4. 必须包含配对标签:<template> </template>
  5. 第一子元素:Category ;

Template 模板


语法规则

 <!-- Category: aiml-category-elements -->
< aiml:template><!-- Content: aim/-template-elements -->
</aiml:template>

规则说明

  1. 机器回复内容;
  2. 必选元素: -个类别必须包含1-N个模板元素;
  3. 无属性:
  4. 必须伴随配对标签: < pattern> </ pattern>
  5. 第二子元素: Category ;

原子模板元素

Star(*)

替代Pattern中的第Index个“*”所表述的内容 1.1 语法规则


语法规则

 <! - Category:aiml-template-elements - > <aiml:star
index = single-integer-index />

案例

用户:我的名字叫黑山!

 <pattern>* 名 字 叫 *</pattern> <template>呵呵,我知道了,你的名字叫<star index="2"/>。 </template>

注意事项 pattern元素里的匹配模式是用* 号表示任意匹配的,但在其他元素里面不能用* 号,而用<star/>这个元素来表示。


Template-side that

 <!-- Category: aiml-template-elements -->
< aiml:that
index = (single- integer-indexl
comma-
separated-integer-pair) />

案例

对话场景:
用户:你好.
机器人:计算机的型号是什么
用户: p4
机器人: p4这个型号是计算机里面很好的商品

<category><pattern>45R7F</pattern><template>计算机的型号是什么</template>
</category><category><pattern>* </pattern><that>*的型号是什么</that><template> <star/>这个型号是<thatstar/>里面<random><li>很好的商品</li><li>很流行的商品</li><li>很华丽的商品</li><random>。</template>
</category>


Input

Input:用户输入的内容
语法规则:

<!-- Category: aiml-template-elements --> <aiml:input
index = (single-integer-index | comma-separated- integer-pair) />

示例


<input index="2"/>将输出用户倒数第2次的输入,看如 下对话:
用户:好阿
机器人:你也好,你叫什么名字?
用户:我叫黑山
机器人:呵呵,你好黑山。
如果有aiml文件里有片断:
<category>
<pattern>嘿 嘿</pattern>
<template>
<gossip>你刚才说:“<input index="2"/>”? </gossip>
</template>
</category> 如果这个时候用户输入“嘿嘿”,那么机器人将回复:你 刚才说:“我叫黑山”? Index属性的数字表示倒数第几句话,1:倒数第一句,2: 倒数第2句,依此类推。


Thatstar

  1. Thatstar:元素先前第n个机器人说过的星号部分 的话;

语法规则:

<!-- Category: aiml-template-elements --> <aiml:thatstar
index = single-integer-index />

案例

对话场景:
用户:你好
机器人:计算机 的 型 号 是 什 么
用户:p4 机器人:p4这个型号是计算机里面很好的商品

 <category> <pattern>你好</pattern> <template>
计算机 的 型 号 是 什 么 </template> </category>
<category> <pattern>*</pattern>
<that>* 的 型 号 是 什 么</that> <template><star/> 这个型号是<thatstar/>里面 <random>
<li>很好的商品</li> <li>很流行的商品</li> <li>很华丽的商品</li> <random>。
</template>
</category>

Topicstar

  1. Topicstar:元素用来得到先前倒数第n次谈论的主 题;
    5.1 语法规则:
 <!-- Category: aiml-template-elements --> <aiml:topicstar index = single-integer-index/>

案例



Get

Get:用于获取存储在AIML变量的值;
6.1 语法规则:

 <!-- Category: aiml-template-elements --> <aiml:get
name = aiml-predicate-name />


Short-cut

7.1 SR:
语法规则:
<! - Category:aiml-template-elements - > <AIML:SR />
7.2 Person2:第一人称替换为第二人称
语法规则:

7.3 Person:第一人称替换为第三人称
语法规则:

<!-- Category: aiml-template-elements --> <aiml:person/>

gender:替换性别以及代名词
语法规则



案例

将被替换成:He told her to take a hike,跟性 别有关的单词都将被替换,中文怎么处理不是很清 楚。

<gender>She told him to take a hike.</gender>

System-defined predicates

模板-原子模板元素

 7.1 Date:系统时间; 语法规则:
<!-- Category: aiml-template-elements --> <aiml:date/>
7.2 ID:用户ID
语法规则:
<!-- Category: aiml-template-elements --> <aiml:id/>
7.3 Size:元素数量
语法规则:
<!-- Category: aiml-template-elements --> <aiml:size/>
7.4 Version:版本
语法规则:
<!-- Category: aiml-template-elements --> <aiml:version/>

文本格式化元素


Text Format

模板-文本格式化元素

 1 Uppercase:元素转换为大写 语法规则:
<!-- Category: aiml-template-elements --> <aiml:uppercase>
<!-- Contents: aiml-template-elements --> </aiml:uppercase>2 Lowercase:元素转换为小写 语法规则:
<!-- Category: aiml-template-elements --> <aiml:lowercase>
<!-- Content: aiml-template-elements --> </aiml:lowercase>3 Formal:格式化,首字母大写,标题样式 语法规则:
<!-- Category: aiml-template-elements --> <aiml:formal>
<!-- Content: aiml-template-elements --> </aiml:formal>4. Sentence:格式化句子 语法规则:
<!-- Category: aiml-template-elements --> <aiml:sentence>
<!-- Content: aiml-template-elements --> </aiml:sentence>
典型示例:
<sentence>this is some kind of sentence test.</sentence>
This is some kind of sentence test.
典型案例:
<upcase>xiaoxie</upcase> XIAOXIE

条件元素

 1.Condition:条件语句
典型示例:
<?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 today
Robot: I am happy!2.Random:随机选择
语法结构:
<!-- Category: aiml-template-elements --> <aiml:random>
<!-- Contents: default-list-item+ --> </aiml:random>

典型示例:


捕获元素

.Set:设置变量取值
语法结构:

<!-- Category: aiml-template-elements --> <aiml:set
name = aiml-predicate-name >
<!-- Contents: aiml-template-elements --> </aiml:set>

示例


转换元素

1.Person2:人称替换
<!-- Category: aiml-template-elements --> <aiml:person2>
<!-- Contents: aiml-template-elements --> </aiml:person2>2.Person:人称替换
<!-- Category: aiml-template-elements --> <aiml:person>
<!-- Contents: aiml-template-elements --> </aiml:person>3.Gender:性别替换
<!-- Category: aiml-template-elements --> <aiml:gender>
<!-- Contents: aiml-template-elements --> </aiml:gender>

隐藏元素

think

记录用户输入且里面的内容,不回复给用户


语法规则:

<!-- Category: aiml-template-elements -->
<aiml:think><!-- Contents: aim/- template -elements -->
</aiml:think>

案例:
下面的示例:把female这个值保存到gender这个变量里,且回复内容不包括female

<category><pattern>I AM FEMALE</pattern><template> Thanks for telling me your gender.<think><set name=gender>female</set></think></template>
</category>

Learn

Learn:检索资源,并加载
语法规则:

<!-- Category: aiml-template -elements --
<aiml:learn>
<!-- Contents: uri-reference -->
</aiml:leam>

典型案例:
<aiml version="1.0.1" encoding= "UTF-8">
<!-- std-startup.xml -->
<!-- Category是-个自劫的AIML単元-->
<category><!-- Pattern用来匹配用戸輸入--><!--如果用戸輸入"LOAD AIML B" --><pattern>LOAD AIML C</pattern><!-- Template是模式的喃虚--<!--这里学习一个aiml文件--><template><learn> basic. chat.aiml</learn><!--你可以在遠里添加更多的aiml文件--><!-- <learn> more_ aiml.aiml</learn>--><learn> tuling. aiml</learn></template>
</category>
</aiml>

扩展处理器元素

System

语法结构

<aiml:system>
<!-- Contents: character data, aiml-template- elements -->
</aiml:system>

示例
表示取系统当前日期


使用 aiml 自带文件

import aimlimport os
import sysdef get_module_dir(name):path = getattr(sys.modules[name], '__file__', None)print(path) # /Users/xx/opt/anaconda3/lib/python3.7/site-packages/aiml/__init__.pyif not path:raise AttributeError('module %s has not attribute __file__' % name)return os.path.dirname(os.path.abspath(path))def test():alice_path = get_module_dir('aiml') + '/botdata/alice'print(alice_path)#切换到语料库所在工作目录os.chdir(alice_path)alice = aiml.Kernel()alice.learn("startup.xml")alice.respond('LOAD ALICE')while True:print(alice.respond(input("Enter your message >> ")))if __name__ == '__main__':test1()

效果

Loading startup.xml...done (0.03 seconds)
Loading xfind.aiml...done (0.00 seconds)
Loading mp6.aiml...done (0.09 seconds)
...
Loading mp5.aiml...done (0.14 seconds)
Loading iu.aiml...done (0.00 seconds)
Loading money.aiml...done (0.00 seconds)
Loading reduction0.safe.aiml...done (0.21 seconds)
Enter your message >> hi
Hi there!
Enter your message >> Enter your message >> this is my friend
You don't say.
Enter your message >> what is your name
I am called Nameless.

创建配置文件

1、创建 startup.xml,作为加载AIML文件的主入口点
我们想要匹配模式load aiml b,然后让它加载我们的aiml大脑作为响应。我们将在一步内创建basic_chat.aiml文件。

<aiml version="1.0.1" encoding="UTF-8"><!-- std-startup.xml --><!-- Category是一个自动的AIML单元 --><category><!-- Pattern用来匹配用户输入 --><!-- 如果用户输入 "LOAD AIML B" --><pattern>LOAD AIML B</pattern><!-- Template是模式的响应 --><!-- 这里学习一个aiml文件 --><template><learn>basic_chat.aiml</learn><!-- 你可以在这里添加更多的aiml文件 --><!--<learn>more_aiml.aiml</learn>--></template></category></aiml>

2、创建 basic_chat.aiml

上面 startup.xml 中只能处理一个模式: load aiml b。当我们向机器人输入那个命令时,它将会尝试加载basic_chat.aiml。如果没有创建则无效。
下面是 basic_chat.aiml 的内容,将匹配两个基本的模式和响应。

<aiml version="1.0.1" encoding="UTF-8">
<!-- basic_chat.aiml -->
<aiml><category><pattern>HELLO</pattern><template>Well, hello!</template></category><category><pattern>WHAT ARE YOU</pattern><template>I'm Emily!</template></category></aiml>

相关资料

  • Wiki: AIML
    https://en.wikipedia.org/wiki/AIML
  • https://blog.csdn.net/xvshu/article/details/80973649
  • https://segmentfault.com/a/1190000010216805
  • 易百教程:AIML
    https://www.yiibai.com/aiml/aiml_introduction.html
  • 使用Python AIML搭建聊天机器人的方法示例
    https://www.jb51.net/article/143395.htm

NLP - AIML相关推荐

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

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

  2. 人工智能标记语言AIML聊天机器人:产生、种类、应用、实例、AIML概述、知识库、公司、业界(20k字经典收藏版)...

    目录 一.聊天机器人(chatbots)的产生.盛行.中文版 二.聊天机器人种类及应用场景简介 三.聊天机器人相关疑问与常见实例 四.人工智能标记语言(AIML)概述(Dr.理查德S.华勒斯Richa ...

  3. NLP实战:利用Python理解、分析和生成文本 | 赠书

    导读:本文内容参考自<自然语言处理实战:利用Python理解.分析和生成文本>一书,由Hobson Lane等人所著. 本书是介绍自然语言处理(NLP)和深度学习的实战书.NLP已成为深度 ...

  4. 博士申请 | 英国爱丁堡大学NLP组招收自然语言处理方向全奖博士生

    合适的工作难找?最新的招聘信息也不知道? AI 求职为大家精选人工智能领域最新鲜的招聘信息,助你先人一步投递,快人一步入职! 爱丁堡大学 爱丁堡大学(The University of Edinbur ...

  5. 博士申请 | 美国加州大学圣克鲁兹分校王鑫教授招收NLP/CV方向全奖博士生

    合适的工作难找?最新的招聘信息也不知道? AI 求职为大家精选人工智能领域最新鲜的招聘信息,助你先人一步投递,快人一步入职! 加州大学圣克鲁兹分校 UC Santa Cruz is one of Am ...

  6. 科研实习 | 北京大学万小军教授招收NLP方向本科实习生和硕博访问学生

    合适的工作难找?最新的招聘信息也不知道? AI 求职为大家精选人工智能领域最新鲜的招聘信息,助你先人一步投递,快人一步入职! 北京大学 北京大学语言计算与互联网挖掘实验室隶属于北京大学王选计算机研究所 ...

  7. 视频教程-人工智能-知识图谱实战案例视频-NLP

    人工智能-知识图谱实战案例视频 数据产品讲师,人工智能探索者,15年一线IT研发经验,国内顶级互联网行业工作背景,社区达人,著有长篇连载<胖子哥的大数据之路>,<数据实践之美> ...

  8. NLP自然语言处理工具小结

    20220331 https://zhuanlan.zhihu.com/p/79202151 BM25 https://github.com/v1shwa/document-similarity wo ...

  9. ELECTRA 超过bert预训练NLP模型

    论文:ELECTRA: Pre-training Text Encoders As Discriminators Rather Then Generators 本文目前在ICLR 2020盲审中,前几 ...

  10. NLP突破性成果 BERT 模型详细解读 bert参数微调

    https://zhuanlan.zhihu.com/p/46997268 NLP突破性成果 BERT 模型详细解读 章鱼小丸子 不懂算法的产品经理不是好的程序员 ​关注她 82 人赞了该文章 Goo ...

最新文章

  1. python入门基础代码图-Python Matplotlib绘图基础知识代码解析
  2. spring mvc中filter的设计与实现
  3. Delphi 如何解决在DLL的入口函数中创建或结束线程时卡死
  4. 温州大学《机器学习》课程课件(七、决策树)
  5. ajax 中文乱码问题 主要是IE浏览器
  6. tensorflow 如何获取模型中想要的张量
  7. UE3 iPhonePackager 工具
  8. Python(140行):第一次作业_中小学数学卷子自动生成程序
  9. 【SpringBoot】 logback 日志的集成
  10. 用python做个网络爬虫
  11. 小程序开发小游戏注意事项
  12. 【LeetCode - 379】电话目录管理系统
  13. 执行董事和非执行董事的区别
  14. 怎么删除win10 C盘Hiberfil.sys文件,Hiberfil.sys文件删了有没有事?
  15. 主修计算机专业的青年们的一封信(转载)
  16. 网络编程学习(11)/ FTP项目(5) ——文件上传和上传断点续存功能
  17. laravel seeding
  18. 转载:【推荐】云服务器推荐
  19. python画图模糊_Python绘图scikitfuzzy没有响应
  20. Python:30行代码,使用POST登录山大的教务处系统(附完整源码)

热门文章

  1. HTML5+CSS编写个人博客界面
  2. 聚类法 人脸识别 matlab,声纹识别 快速概览 + 详细了解N:N聚类算法是如何应用的...
  3. 漏洞补丁:漏洞命名(CVE和CNNVD)及补丁查找
  4. java中ofd文件转pdf_java ofd文件解析
  5. 雅黑PHP探针Light,雅黑php探针
  6. 测试部门工作周报模板
  7. 【模拟电路】PID简介
  8. 客户端的云桌面平台配置与开启(附,登录“云电脑”与切换登录账号)
  9. 威纶通触摸屏可以解密吗_老电工选型威纶通触摸屏时的3大技巧!知道了能帮你省事不少...
  10. Android arm64-v8a、armeabi-v7a、armeabi、x86详解