Menu
Woocommerce Menu

利用Python读取外部数据文件的例子,AIML搭建聊天机器人的过程介绍

0 Comment


AIML全名为Artificial Intelligence Markup
Language(人工智能标记语言),是一种创建自然语言软件代理的XML语言,是由RichardS.
Wallace
博士和Alicebot开源软件组织于1995-2000年间发明创造的。AIML是一种为了匹配模式和确定响应而进行规则定义的
XML 格式。

    
红旗Linux桌面版5.0在系统安装、硬件设备支持、核心性能、桌面环境设计等方面做了较大
改进和优化,使之更加适用于政府、个人、家庭的办公、学习、娱乐、开发、教育等需求;并在应用集成、在线升级、跨平台软件兼容等方面做了全面改进,使红旗
桌面产品更加人性化,更加方便用户使用和维护。
为了大家少走弯路,把收集的经验与大家分享一下!(感谢所有原创者)
一、红旗Linux5.0下载地址集中
http://www.linuxidc.com/Linux/2006-10/609.htm
二、红旗Linux5.0硬盘安装失败的原因及解决办法
由于设计不周,硬盘安装时不能把iso放到fat32分区.安装过程,发现在选择一个fat32分区的时候,就会出现Invalid
arguments,即参数错误,而产生错误的原因是”找不到cp936″.可能红旗一心想把字符集搞成utf8,但在安装程序中挂载fat32时参数却
写成了cp936,因此出错.
解决办法:
1,把iso放到ext2/3分区.
2,就近找一台机器,做个ftp,将iso解压到某个目录,进行ftp安装(http,nfs也可).
3,刻录成光盘安装.
例如:
硬盘安装:请将两张盘下完后放在同一个ext3分区目录下,例如:rf50目录下,我的分区是在/dev/hda8.,在fat32分区的C盘下
建一目录 load,
拷引导软件loadlin到load目录下,从第一光盘的isolinux目录下拷vmlinuz和initrd.img放load目录下,建一批处理文
件b.bat,同样放在loadlin目录下,编辑b.bat内容为c:\load\loadlin
c:\load\ vmlinuz initrd=c:\load\initrd.img ramdisk_size=64000
保存。重启到DOS到C盘下,输入b回车启动安装,到本地硬盘选/dev/hda8
在下面输入/rf50即可.
三、 Vware 5 下安装红旗Linux5.0
例子:
条件:
载了redflag 5.0 snapshot disk1和disk2
在XP下安装好Vware5
保证硬盘有6G的额外空间
安装
new machine
选择custom 下一步
选择linux 复选中other linux kenel 2.6.X 下一步
选择位置 自己建一个目录 到指定空间
选择内存 192 (机器用512内存)
network connetction 选择 NAT 与自己主机用同一个IP
i/o 默认
disk create a new disk
IDE
选择 6G 空间 (我开始用4G 安装说空间不足)
ok
安装 红旗
点击EDIT V machine
光盘选择 用虚拟光驱软件 虚拟的那个盘符
用虚拟光驱软件装载disk1.iso
用VMare 点击开始就可以安装了
ctrl+alt 切换出来,换上disk2.iso
注意,安装过程中它会提示hda硬盘设备错误,不要管它,重新分区格式化,就可以了。
银河国际网址手机版 1

不论是数据分析,数据可视化,还是数据挖掘,一切的一切全都是以数据作为最基础的元素。利用Python进行数据分析,同样最重要的一步就是如何将数据导入到Python中,然后才可以实现后面的数据分析、数据可视化、数据挖掘等。

AIML的设计目标如下:

 

AIML应当为大众所易学易会。
AIML应当使最小的概念得以编码使之基于L.I.C.E支持一种刺激-响应学科系统组件。
AIML应当兼容XML。
书写AIML可处理程序文件应当简单便捷。
AIML对象应当对人而言具有良好的可读性和清晰度。
AIML的设计应当正式而简洁。
AIML应当包含对其他语言的依附性。
关于AIML详细的初级读物,可翻阅 Alice Bot’s AIML Primer 。你同样可以在
AIML Wikipedia page 了解更多 AIML 的内容以及它能够做什么。借助 Python 的
AIML 包,我们很容易实现人工智能聊天机器人。

在本期的Python学习中,我们将针对Python如何获取外部数据做一个详细的介绍,从中我们将会学习以下4个方面的数据获取:

1、安装Python aiml库

 

pipinstallaiml
2、获取alice资源

1、读取文本文件的数据,如txt文件和csv文件

Python aiml安装完成后在Python安装目录下的
Lib/site-packages/aiml下会有alice子目录,这个是系统自带的一个简单的语料库。

 

3、Python下加载alice

2、读取电子表格文件,如Excel文件

取得alice资源之后就可以直接利用Python aiml库加载alice brain了。

 

# -*- coding: utf-8 -*-
importaiml
importsys
importos
 
 
defget_module_dir(name):
    path = getattr(sys.modules[name], ‘__file__’, None)
    if not path:
        raiseAttributeError(‘module %s has not attribute __file__’ %
name)
    return os.path.dirname(os.path.abspath(path))
 
 
alice_path = get_module_dir(‘aiml’) + ‘/alice’
#切换到语料库所在工作目录
os.chdir(alice_path)
 
alice = aiml.Kernel()
alice.learn(“startup.xml”)
alice.respond(‘LOAD ALICE’)
 
while True:
printalice.respond(raw_input(“Enter your message >> “))
上述流程非常的简单,接下来我们要自己从0开始创建自己的机器人。

3、读取统计软件生成的数据文件,如SAS数据集、SPSS数据集等

创建标准启动文件

 

标准的做法是,创建一个名为std-startup.xml的启动文件,作为加载AIML文件的主入口点。在这个例子中,我们将创建一个基础的文件,它匹配一个模式,并且返回一个相应。我们想要匹配模式load
aiml
b,然后让它加载我们的aiml大脑作为响应。我们将在一步内创建basic_chat.aiml文件。

4、读取数据库数据,如MySQL数据、SQL
Server数据

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

 

在上面,我们创建的AIML文件只能处理一个模式:load aiml
b。当我们向机器人输入那个命令时,它将会尝试加载basic_chat.aiml。除非我们真的创建了它,否则无效。下面是你可以写进basic_chat.aiml的内容。我们将匹配两个基本的模式和响应。

 

<aimlversion=”1.0.1″ encoding=”UTF-8″>
<!– basic_chat.aiml –>
<aiml>
 
    <category>
        <pattern>HELLO</pattern>
        <template>
            Well, hello!
        </template>
    </category>
 
    <category>
        <pattern>WHATAREYOU</pattern>
        <template>
            I’m a bot, silly!
        </template>
    </category>
 
</aiml>
随机响应

 

你也可以像下面这样添加随机响应。它将在接受到一个以”One time
I”开头的消息的时候随机响应。*是一个匹配任何东西的通配符。

一、读取文本文件的数据

    <category>
        <pattern>ONETIME I *</pattern>
        <template>
            <random>
                <li>Goon.</li>
                <li>Howoldareyou?</li>
                <li>Bemorespecific.</li>
                <li>I didnot knowthat.</li>
                <li>Areyoutellingthetruth?</li>
                <li>I don’t knowwhatthatmeans.</li>
                <li>Try to tellmethatanotherway.</li>
                <li>Areyoutalkingaboutananimal, vegetableor
mineral?</li>
                <li>Whatis it?</li>
            </random>
        </template>
    </category>
使用已存在的AIML文件

 

编写你自己的AIML文件是一个很有趣的事,但是它将花费很大的功夫。我觉得它需要大概10,000个模式才会开始变得真实起来。幸运的是,ALICE基金会提供了大量免费的AIML文件。在
Alice Bot website 上浏览AIML文件。

大家都知道,Python中pandas模块是专门用来数据分析的一个强大工具,在《Python数据分析之pandas学习(一)》和《Python数据分析之pandas学习(二)》中我们详细介绍了有关pandas模块的应用,下面我们就来介绍pandas是如何读取外部数据的。

测试新建的机器人

 

目前为止,所有 XML 格式的 AIML
文件都准备好了。作为机器人大脑的组成部分,它们都很重要,不过目前它们只是信息(information)而已。机器人需要活过来。你可以借助任何语言定制
AIML。这里还是使用Python。

 

# -*- coding: utf-8 -*-
importaiml
importos
 
 
mybot_path = ‘./mybot’
#切换到语料库所在工作目录
os.chdir(mybot_path)
 
mybot = aiml.Kernel()
mybot.learn(“std-startup.xml”)
mybot.respond(‘load aiml b’)
 
while True:
    printmybot.respond(raw_input(“Enter your message >> “))
这是我们可以开始的最简单的程序。它创建了一个aiml对象,学习启动文件,然后加载剩余的aiml文件。然后,它已经准备好聊天了,而我们进入了一个不断提示用户消息的无限循环。你将需要输入一个机器人认识的模式。这个模式取决于你加载了哪些AIML文件。我们将启动文件作为一个单独的实体创建,这样,我们之后可以向机器人添加更多的aiml文件,而不需要修改任何程序源码。我们可以在启动xml文件中添加更多的可供学习的文件。

 

加速Brain加载

1、读取txt数据

当你开始拥有很多AIML文件时,它将花费很长的时间来学习。这就是brain文件从何而来。在机器人学习所有的AIML文件后,它可以直接将它的大脑保存到一个文件中,这个文件将会在后续的运行中动态加速加载时间。

 

# -*- coding: utf-8 -*-
importaiml
importos
 
 
mybot_path = ‘./mybot’
#切换到语料库所在工作目录
os.chdir(mybot_path)
 
mybot = aiml.Kernel()
 
if os.path.isfile(“mybot_brain.brn”):
    mybot.bootstrap(brainFile=”mybot_brain.brn”)
else:
    mybot.bootstrap(learnFiles=”std-startup.xml”, commands=”load aiml
b”)
    mybot.saveBrain(“mybot_brain.brn”)
 
while True:
    printmybot.respond(raw_input(“Enter your message >> “))
记住,如果你使用了上面写的brain方法,在运行的时候加载并不会将新增改变保存到brain中。你将需要删除brain文件以便于它在下一次启动的时候重建,或者需要修改代码,使得它在重新加载后的某个时间点保存brain。

In [1]: import pandas as pd

增加Python命令

 

如果你想要为你的机器人提供一些特殊的运行Python函数的命令,那么,你应该为机器人捕获输入消息,然后在将它发送给mybot.respond()之前处理它。在上面的例子中,我们从raw_input中获得了用户的输入。然而,我们可以从任何地方获取输入。可能是一个TCP
socket,或者是一个语音识别源码。在它进入到AIML之前处理这个消息。你可能想要在某些特定的消息上跳过AIML处理。

In [2]: mydata_txt = pd.read_csv(‘C:\\test_code.txt’,sep =
‘\t’,encoding = ‘utf-8’)

while True:
    message = raw_input(“Enter your message >> “)
    if message == “quit”:
        exit()
    elifmessage == “save”:
        mybot.saveBrain(“bot_brain.brn”)
    else:
        bot_response = mybot.respond(message)
        # Do something with bot_response
会话与断言

 

通过指定一个会话,AIML可以为不同的人剪裁不同的会话。例如,如果某个人告诉机器人,他的名字是Alice,而另一个人告诉机器人他的名字是Bob,机器人可以区分不同的人。为了指定你所使用的会话,将其作为第二个参数传给respond()

银河国际网址手机版 2

sessionId = 12345
mybot.respond(raw_input(“>>>”), sessionId)
这对于为每一个客户端定制个性化的对话是很有帮助的。你将必须以某种形式生成自己的会话ID,并且跟踪它。注意,保存brain文件不会保存所有的会话值。

 

    sessionId = 12345
 
    # 会话信息作为字典获取. 包含输入输出历史,
    # 以及任何已知断言
    sessionData = mybot.getSessionData(sessionId)
 
    # 每一个会话ID需要时一个唯一值。
    # 断言名是机器人在与你的会话中了解到的某些/某个名字
    # 机器人可能知道,你是”Billy”,而你的狗的名字是”Brandy”
    mybot.setPredicate(“dog”, “Brandy”, sessionId)
    clients_dogs_name = mybot.getPredicate(“dog”, sessionId)
 
    mybot.setBotPredicate(“hometown”, “127.0.0.1”)
    bot_hometown = mybot.getBotPredicate(“hometown”)
在AIML中,我们可以使用模板中的set响应来设置断言

对于中文的文本文件常容易因为编码的问题而读取失败,正如上图所示。遇到这样的编码问题该如何处置呢?解决办法有两种情况:

<aimlversion=”1.0.1″ encoding=”UTF-8″>
  <category>
      <pattern>MYDOGSNAMEIS *</pattern>
      <template>
        Thatis interestingthatyouhave a dognamed
<setname=”dog”><star/></set>
      </template> 
银河国际网址手机版,  </category> 
  <category>
      <pattern>WHATIS MYDOGSNAME</pattern>
      <template>
        Yourdog’s nameis <getname=”dog”/>.
      </template> 
  </category> 
</aiml>
使用上面的AIML,你可以告诉机器人:

 

Mydogsnameis Max
而机器人会回答你:

1)当原始文件txt或csv的数据不是uft8格式时,需要另存为utf8格式编码;

Thatis interestingthatyouhave a dognamedMax
然后,如果你问机器人:

 

Whatis mydogsname?
机器人将会回答:

2)如果原始的数据文件就是uft8格式,为了正常读入,需要将read_csv函数的参数encoding设置为utf-8

Yourdog’s nameis Max.
aiml可以用来实现对话机器人,但是用于中文有以下问题:

 

中文规则库较少。规则库相当于对话机器人的“大脑”,一般来说,规则库越丰富,对话机器人的应对就更像人。目前英文的规则库已经很丰富,涵盖面很广,而且是公开可获取的。但公开的中文规则库就基本没有。
AIML解释器对中文支持不好。实际上,Python下的Pyaiml模块(解析器)已经能比较好的支持中文,但是也存在以下问题:英文单词间一般都有空格或标点区分,因此具备一种“自然分词”特性,由于中文输入没有以空格分隔的习惯,以上会在实践中造成一些不便。比如要实现有/无空格的输入匹配,就需要在规则库中同时包含这两种模式。

 

 

将原始数据另存为utf8格式的数据,重新读入txt数据

 

In [3]: mydata_txt = pd.read_csv(‘C:\\test.txt’,sep =
‘\t’,encoding = ‘utf-8’)

 

In [4]: mydata_txt

 

银河国际网址手机版 3

 

很顺利,txt文本文件数据就这样进入了Python的口袋里了。

 

 

 

2、读取csv数据

 

csv文本文件是非常常用的一种数据存储格式,而且其存储量要比Excel电子表格大很多,下面我们就来看看如何利用Python读取csv格式的数据文件:

 

In [5]: mydata_csv = pd.read_csv(‘C:\\test.csv’,sep = ‘,’,encoding
= ‘utf-8’)

 

In [6]: mydata_csv

 

银河国际网址手机版 4

 

如果你善于总结的话,你会发现,txt文件和csv文件均可以通过pandas模块中的read_csv函数进行读取。该函数有20多个参数,类似于R中的read.table函数,如果需要查看具体的参数详情,可以查看帮助文档:help(pandas.read_csv)。

 

 

 

二、读取电子表格文件

 

这里所说的电子表格就是Excel表格,可以是xls的电子表格,也可以是xlsx的电子表格。在日常工作中,很多数据都是存放在Excel电子表格中的,如果我们需要使用Python对其进行分析或处理的话,第一步就是如何读取Excel数据。下面我们来看看如果读取Excel数据集:

 

In [7]: mydata_excel = pd.read_excel(‘C:\\test.xlsx’,sep =
‘\t’,encoding = ‘utf-8’)

 

In [8]: mydata_excel

 

银河国际网址手机版 5

 

三、读取统计软件生成的数据文件

 

往往在集成数据源的时候,可能会让你遇到一种苦恼,那就是你的电脑里存放了很多统计软件自带的或生成的数据集,诸如R语言数据集、SAS数据集、SPSS数据集等。那么问题来了,如果你电脑里都装了这些软件的话,这些数据集你自然可以看见,并可以方便的转换为文本文件或电子表格文件,如果你的电脑里没有安装SAS或SPSS这样大型的统计分析软件的话,那么你该如何查看这些数据集呢?请放心,Python很万能,它可以读取很多种统计软件的数据集,下面我们介绍几种Python读取统计数据集的方法:

 

 

 

1、读取SAS数据集

 

SAS数据集的读取可以使用pandas模块中的read_sas函数,我们不妨试试该函数读取SAS数据集。下图是使用SAS打开的数据集,如果你的电脑中没有安装SAS,那你也可以通过Python实现数据的读取。

 

银河国际网址手机版 6

标签:,

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图