用PyAIML开发简单的对话机器人
AIML files are a subset of Extensible Mark-up Language (XML) that can store different text patterns in the form of tags. AIML was developed by the Alicebot free software community. AIML is mainly used to implement Chatbots, a natural language software agent in which a user can ask questions to the robot and it can give an intelligent reply.
The <aiml> tag: Each AIML code begins with this tag and is closed using the </aiml> tag. This tag also consists of attributes such as the version and encoding scheme of the file.
<aiml version="1.0.1" encoding="UTF-8">
...
</aiml>
The <category> tag: The basic knowledge blocks of AIML are called categories. Each category block consists of two sections. One is the user input in the form of a sentence and the other is a corresponding response to user input which comes from robot. The category tag is represented using the opening <category> tag and the closing tag is represented using the </category> tag. These categories must be inside the <aiml> and </aiml> tags. The category tags consist of two tags, namely, the <pattern> tag and the <template> tag. The input given by users is inside the <pattern> tag and the answers are in the <template> tag. For example, look at this following conversation:
User: How are you?
Robot: I am fine.
In this conversation, the user dialog will be in the <pattern> tag and the robot's response will be in the <template> tag. The following code shows the representation of the preceding dialogs in the AIML format:
<aiml version="1.0.1" encoding="UTF-8">
<category>
<pattern> HOW ARE YOU </pattern>
<template> I AM FINE </template>
</category>
</aiml>
We need to save this file in the .aiml or .xml format. For example, save the code with the name "sample.aiml".
Introduction to PyAIML
PyAIML is an open source Python AIML interpreter written completely in pure Python without using any third-party dependencies.
Installing PyAIML from source code:
https://github.com/DYFeng/pyaiml
$ sudo python setup.py install
Install the aiml package with pip:
pip install aiml
Loading a single AIML file from the command-line argument(载入单个aiml文件)
We can load a single AIML file using the following code:
#!/usr/bin/env python
import aiml
import sys
mybot = aiml.Kernel()
mybot.learn(sys.argv[1]) while True:
print mybot.respond(raw_input("Enter input >"))
Execute the code using the following command:
python test.py sample.aiml
It will give you the following result:
Loading AIML files into memory(载入多个aiml文件)
If you want to learn more than one AIML, it's better to use an XML file, for example, the startup.xml file can load all other AIML files.
<aiml version="1.0">
<category>
<pattern>LOAD AIML B</pattern>
<template>
<!-- Load standard AIML set -->
<learn>*.aiml</learn>
</template>
</category>
</aiml>
The preceding XML file will learn all the AIML files when we call the LOAD AIML B pattern. The following code will load all the AIML files into memory:
#!/usr/bin/env python
import aiml # Create a Kernel object.
mybot = aiml.Kernel() # Learn startup.xml
mybot.learn('startup.xml') # Change the current path to your aiml files path # Calling load aiml b for loading all AIML files
mybot.respond('load aiml b') # Enter the main input/output loop.
print "\nINTERACTIVE MODE (ctrl-c to exit)"
while True:
print mybot.respond(raw_input("Enter input >"))
You will get the following output:
更多标签(以<random>标签为例。<li>标签 is the list can be used within the <random> and <condition> tag sets)
Its purpose is random selection of one of a set of list items.
<random>
<li>A</li>
<li>B</li>
<li>C</li>
</random>
Say one of A, B or C randomly.
<aiml version="1.0.1" encoding="UTF-8">
<category>
<pattern> WHO ARE YOU </pattern>
<template>
<random>
<li> A </li>
<li> B </li>
<li> C </li>
<li> D </li>
</random>
</template>
</category>
</aiml>
The <star index="n"/> tag indicates the input text fragment matching the "n" pattern '*'.
<star index="1"/> yields the first matching text fragment.
<star index="2"/> yields the second matching text fragment.
<star index="3"/> yields the third matching text fragment.
And so on....
The index="n" is optional, and if left off, the index value of "1" is assumed. The tag <star/> is equivilant to <star index="1"/>.
<aiml version="1.0.1" encoding="UTF-8">
<category>
<pattern> MY NAME IS * </pattern>
<template>
NICE TO MEET YOU <star/>
</template>
</category>
<category>
<pattern> MEET OUR GUEST * AND * </pattern>
<template>
NICE TO MEET YOU <star index="1"/> AND <star index="2"/>.
</template>
</category>
</aiml>
参考:
http://python.jobbole.com/82007/
http://www.jb51.net/article/78789.htm
http://www.alicebot.org/aiml.html
http://blog.csdn.net/aofengdaxia/article/details/18364365
用PyAIML开发简单的对话机器人的更多相关文章
- 手把手教你利用微软的Bot Framework,LUIS,QnA Maker做一个简单的对话机器人
最近由于要参加微软亚洲研究院的夏令营,需要利用微软的服务搭建一个对话Bot,以便对俱乐部的情况进行介绍,所以现学了几天,搭建了一个简单的对话Bot,期间参考了大量的资料,尤其是下面的这篇博客: htt ...
- python 全栈开发,Day129(玩具开机提示语,为多个玩具发送点播,聊天界面,app录音,app与服务器端文件传输,简单的对话)
一.玩具开机提示语 先下载github代码,下面的操作,都是基于这个版本来的! https://github.com/987334176/Intelligent_toy/archive/v1.2.zi ...
- 打造一个window桌面应用:在线聊天对话机器人
大家好,我是辰哥~~~ 本文目标:打造一个window桌面应用:在线聊天对话机器人. 今天辰哥教大家做一个在线聊天对话机器人桌面应用,已经打包成exe可执行文件,读者可以直接拿来使用, 先上演示图 聊 ...
- TensorFlow练习13: 制作一个简单的聊天机器人
现在很多卖货公司都使用聊天机器人充当客服人员,许多科技巨头也纷纷推出各自的聊天助手,如苹果Siri.Google Now.Amazon Alexa.微软小冰等等.前不久有一个视频比较了Google N ...
- python 全栈开发,Day123(图灵机器人,web录音实现自动化交互问答)
昨日内容回顾 . 百度ai开放平台 . AipSpeech技术,语言合成,语言识别 . Nlp技术,短文本相似度 . 实现一个简单的问答机器人 . 语言识别 ffmpeg (目前所有音乐,视频领域,这 ...
- HiLink & LiteOS & IoT芯片 让IoT开发简单高效
HiLink & LiteOS & IoT芯片让IoT开发简单高效 华为HiLink & LiteOS & IoT芯片使能三件套,让IoT开发更简单高效.下一代智能手机 ...
- 【Azure 机器人】微软Azure Bot 编辑器系列(1) : 创建一个天气对话机器人(The Bot Framework Composer tutorials)
欢迎来到微软机器人编辑器使用教程,从这里开始,创建一个简单的机器人. 在该系列文章中,每一篇都将通过添加更多的功能来构建机器人.当完成教程中的全部内容后,你将成功的创建一个天气机器人(Weather ...
- 从零开始学Python08作业思路:开发简单的FTP
一,作业要求 开发简单的FTP 1,用户登录 2,上传/下载文件 3,不同用户家目录不同 4,查看当前目录下文件 5,充分使用面向对象 二,程序文件清单 Folder目录:用户上传文件家目录 db目录 ...
- Python开发简单爬虫 - 慕课网
课程链接:Python开发简单爬虫 环境搭建: Eclipse+PyDev配置搭建Python开发环境 Python入门基础教程 用Eclipse编写Python程序 课程目录 第1章 课程介绍 ...
随机推荐
- 【crunch bang】中文美化
原文连接:http://edyfox.codecarver.org/html/debian_testing_chinese.html 中文字体美化是个很讨厌的事情,无数初学者在这里面浪费了无数时间,做 ...
- url传参
1.两种url形式传参index.php/action/function/id/2 这种模式下:$_GET[action]就是function,$_GET[id]就是2
- HGE游戏引擎之hgeQuad结构体的使用(用于渲染图片)
HGE基本的渲染图元是hgeQuad (Quad is the basic HGE graphic primitive),其中有一个hgeVertex成员结构,它用来描述图元顶点信息.The hgeV ...
- java总结第三次//类和对象2、3
四.类和对象2 主要内容:Java类的继承.方法的重写.覆盖.访问控制.super 关键字.多态性及其应用 1.继承 要求:Java只支持单继承,不允许多重继承 一个子类只能有一个父类 一个父类可以派 ...
- Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)
MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...
- XCode属性面板使用说明
Xcode 中Interface Builder 工具 是一个功能强大的“所见即所得”开发工具.本文主要介绍属性面板 和 对象库面板 对象库面板: 提供了所有Cocoa Touch 库给我们定义好的 ...
- python: hashlib 加密模块
加密模块hashlib import hashlib m=hashlib.md5() m.update(b'hello') print(m.hexdigest()) #十六进制加密 m.update( ...
- 【转】MYSQL入门学习之六:MYSQL的运算符
转载地址:http://www.2cto.com/database/201212/175862.html 一.算术运算符 1.加 www.2cto.com mysql> s ...
- YTU 3003: 括号匹配(栈和队列)
3003: 括号匹配(栈和队列) 时间限制: 1 Sec 内存限制: 128 MB 提交: 2 解决: 2 [提交][状态][讨论版] 题目描述 假设一个表达式中只允许包含三种括号:圆括号&quo ...
- js中的各种获取日期
JS中获取当前时间点前一天时间 var date=new Date(); var dat_year=date.getYear(); var dat_month=date.getMonth(); var ...