alicebot.jpg

AIML,全称Artificial Intelligence Markup Language,是一种XML模式,用做自然语言聊天机器人的规则库。

最简单的AIML规则如下:

* bye

byebye

中的“* bye”为模式。比如输入“mike,bye”就可以匹配该模式(*表示任意字符),然后AIML解释器就会根据规则库返回“byebye”作为回复。

更复杂的aiml规则可参考:Alicebot 或 AIML介绍

Aiml可以用来实现对话机器人,但是用于中文有以下问题:

中文规则库较少。规则库相当于对话机器人的“大脑”,一般来说,规则库越丰富,对话机器人的应对就更像人。目前英文的规则库已经很丰富,涵盖面很广,而且是公开可获取的。但公开的中文规则库就基本没有。

AIML解释器对中文支持不好。实际上,Python下的Pyaiml模块(解析器)已经能比较好的支持中文,但是也存在以下问题:

英文单词间一般都有空格或标点区分,因此具备一种“自然分词”特性,

比如模式“* BYE”很自然的就和“mike,bye”匹配,而且一般也不会写成无空格的"BYE";

但是中文的“再见”(无空格),与“* 再见”(有空格)匹配的就是不同的模式,

分别匹配"迈克,再见”和“迈克, 再见”(再见前必须有空格)。

由于中文输入没有以空格分隔的习惯,以上会在实践中造成一些不便。比如要实现有/无空格的输入匹配,就需要在规则库中同时包含这两种模式。

这种情况下,很多中文aiml规则库在实现时,就采取了在每个单字间人为增加空格的方法;同样,进行输入匹配的时候,也需要对输入添加空格来进行匹配。

针对上述问题,提出两种曲线救国的思路:

1.通过翻译工具解决AIML对中文的处理,比如输入内容先经过翻译处理后变成英文内容,英文内容经AIML处理后输出,输出再翻译成中文显示。

输入中文->翻译为英文->AIML处理->英文结果->翻译成中文

好处是可以直接利用现有的英文规则库

经测,可实现。

但因为要用到翻译api,实现效果跟翻译api的质量有关,另外在没有网络的情况下,较难实现。

参考代码如下:

import aiml

from translate import Translator

# 创建Kernel()和 AIML 学习文件

kernel = aiml.Kernel()

kernel.learn("std-startup.xml")

kernel.respond("load aiml b")

# 按组合键 CTRL-C 停止循环

while True:

translator = Translator(to_lang='en', from_lang='zh')

backtranslator = Translator(to_lang='zh',from_lang='en')

original = raw_input(u"请输入信息 >> ")

print original

message = translator.translate(original)

print message

response = kernel.respond(message)

print backtranslator.translate(response)

2.利用中文分词工具(如jieba)进行分词,而不是每个单字间添加空格。

为了实现中文输入与模式的对应关系。建立规则库时,用分词工具对匹配模式进行预处理;在处理输入信息时,使用相同的分词工具进行处理。

基本思路和逐字添加空格类似。但是分词工具能同时兼顾中文的语义表达性。

本文采用ulysses写作。

写作耗时:50分钟

发布到简书耗时:20分钟

python中文聊天_Python下两种曲线救国实现AIML中文聊天机器人功能的方法相关推荐

  1. python统计中文字符的个数_python统计中文字符数量的两种方法

    方法一: def str_count(str): '''找出字符串中的中英文.空格.数字.标点符号个数''' count_en = count_dg = count_sp = count_zh = c ...

  2. python统计汉字个数是_python统计中文字符数量的两种方法

    方法一: def str_count(str): '''找出字符串中的中英文.空格.数字.标点符号个数''' count_en = count_dg = count_sp = count_zh = c ...

  3. python怎么统计多少字符_python统计中文字符数量的两种方法

    方法一: def str_count(str): '''找出字符串中的中英文.空格.数字.标点符号个数''' count_en = count_dg = count_sp = count_zh = c ...

  4. python定义字符串变量有两种常用方式_Python 1基础语法二(标识符、关键字、变量和字符串)...

    一.标识符 标识符就是程序员自己命名的变量名.名字需要有见名知义的效果,不要随意起名 :比如 a=1 a是个变量,a这个变量名属于标识符 1 company = '小米 2 employeeNum = ...

  5. 如何打开python的交互窗口-Python多版本情况下四种快速进入交互式命令行的操作技巧...

    原标题:Python多版本情况下四种快速进入交互式命令行的操作技巧 因为工作需求或者学习需要等原因,部分小伙伴的电脑中同时安装了Python2和Python3,相信在Python多版本的切换中常常会遇 ...

  6. python文字教程-Python在图片中添加文字的两种方法

    本文主要介绍的是利用Python在图片中添加文字的两种方法,下面分享处理供大家参考学习,下来要看看吧 一.使用OpenCV 在图片中添加文字看上去很简单,但是如果是利用OpenCV来做却很麻烦.Ope ...

  7. python怎么模拟浏览器交互_干货分享:python爬虫模拟浏览器的两种方法实例分析(赶紧收藏)...

    今天为大家带来的内容是:干货分享:python爬虫模拟浏览器的两种方法实例分析(赶紧收藏) 文章主要介绍了python爬虫模拟浏览器的两种方法,结合实例形式分析了Python爬虫模拟浏览器的两种常见操 ...

  8. django + python上传文件的两种方式

    突然心血来潮,研究了下django+python上传文件的两种方式. 第一:直接采用文件读写的方式上传 1. settings.py文件中设置文件的存放路径和文件读取路径 MEDIA_ROOT = o ...

  9. Python实现图片裁剪的两种方式——Pillow和OpenCV

    在这篇文章里我们聊一下Python实现图片裁剪的两种方式,一种利用了Pillow,还有一种利用了OpenCV.两种方式都需要简单的几行代码,这可能也就是现在Python那么流行的原因吧. 首先,我们有 ...

最新文章

  1. 10大经典排序算法,20+张图就搞定
  2. DevExpress控件使用系列--ASPxTreeList
  3. 2014 7-8月MoonCake新增功能更新
  4. 【C++多线程系列】【七】实现经典的C/S架构
  5. QT 防止FTP 上传软件在断连处 Crash
  6. 修改Transformer结构,设计一个更快更好的MLM模型
  7. BZOJ3236 [Ahoi2013]作业
  8. .net core 实现基于 cron 表达式的任务调度
  9. JAVA入门级教学之(while循环语句)
  10. Excel2003怎样拆分单元格
  11. ESP32 + ESP-IDF |GPIO 01 - 驱动外部两个LED灯,以每300ms的时间间隔闪烁
  12. 苹果cms8x缩图带3D翻转自适应模版
  13. 2020年Java讲课笔记目录
  14. 2017.9.28 降雨量 思考记录
  15. python使用struct处理二进制数据(使用pack和unpack进行打包和解包)
  16. Servlet(二)GenericServlet
  17. CMMI、ISO、6sigma、ITIL软件质量管理体系了解
  18. 汽车电子电气架构EEA演变
  19. ST-link无法下载—— “ access port fault. check the access port selection and ensure it fits the debugging
  20. 综合日语第一册动词复习

热门文章

  1. 微信小程序用canvasToTempFilePath压缩图片,开发工具压缩正常而真机上比例失调
  2. 计算机音乐简单好听,电脑上好听的歌怎么录制,教你2分钟,截取你爱听的声音...
  3. 单元测试中使用Mock对象
  4. child_process.spawn中文乱码
  5. Mac上安装瓦力之Docker安装的一些小坑
  6. 知乎关注度人数最多的问题排行榜 TOP10
  7. [转载] js 下获取子元素的方法 -- 李富生
  8. 苹果三代耳机_华强北airpods2 华强北三代耳机 airpodspro可调通透 主动降噪 定位改名 苹果airpodspro...
  9. 万物皆可NFT,UTON NFT正式上线内测
  10. 【SVG素材网站】免费icon、logo素材下载