您的位置:首页 > 大数据 > 人工智能

从零开始写聊天机器人

2016-04-29 11:59 288 查看

目录

目录

简介

搭建聊天机器人的嘴巴之对话功能
websocket简介

Tornado实现websocket服务端

Tornado实现websocket客户端

搭建聊天机器人的大脑之知识库与思考功能
AIML文件简介

PyAIML如何支持中文
PyAIML解析如何支持中文

PyAIML查找时如何支持中文

通过自定义标签扩展AIML文件
AIML如何扩展以支持SQL查询

AIML如何扩展以支持SQL插入

AIML如何扩展以支持个性化标签

AIML如何生成以及存储知识库

AIML如何通过知识库实现推理过程

数据库如何帮助AIML扩展专业方向知识库

中文语义分析以及模糊匹配

如何通过扩展知识库实现推理过程

简介

先把目录与思路写在这儿,有机会慢慢补.

aiml如何支持中文补充完毕

搭建聊天机器人的嘴巴之对话功能

websocket简介

Tornado实现websocket服务端

Tornado实现websocket客户端

搭建聊天机器人的大脑之知识库与思考功能

AIML文件简介

PyAIML如何支持中文

PyAIML解析如何支持中文

请先参考我的github上pyaiml的代码


https://github.com/lemontreeshy/PyAIML

请允许我先废话介绍一下aiml的解析过程


Created with Raphaël 2.1.0读取aiml文件利用xml解析工具解析将问题转为词语列表 将问题与答案转为树结构 结束

xml解析这一部分,我就不多说了,主要是xml.sax进行的.
将问题转为词语列表这一步,由于aiml只支持空格分隔的语言,如英语,法语等等,对于中文的
支持力度差了一点,不过我们可以利用中文分词插件来将中文切割成空格分隔的字符串.


import jieba as jb
def splitChinese(s):
result = jb.cut(s)
ret = '|'.join(result)
return ret.split("|")


这段代码利用jieba分词天然能够区分中英文的优势,省去了判断中英文的过程,不过我还是要解释一下如何区别中英文(在unicode编码情况下)


def isChinese(c):
# http://www.iteye.com/topic/558050 
r = [
# 标准CJK文字
(0x3400, 0x4DB5), (0x4E00, 0x9FA5), (0x9FA6, 0x9FBB), (0xF900, 0xFA2D),
(0xFA30, 0xFA6A), (0xFA70, 0xFAD9), (0x20000, 0x2A6D6), (0x2F800, 0x2FA1D),
# 全角ASCII、全角中英文标点、半宽片假名、半宽平假名、半宽韩文字母
(0xFF00, 0xFFEF),
# CJK部首补充
(0x2E80, 0x2EFF),
# CJK标点符号
(0x3000, 0x303F),
# CJK笔划
(0x31C0, 0x31EF)]
return any(s <= ord(c) <= e for s, e in r)


返回值为True即为中文,False为英文.

至于在代码何处调用splitChinese,参考链接里的aiml/AimlParser.py文件.


PyAIML查找时如何支持中文

通过自定义标签扩展AIML文件

AIML如何扩展以支持SQL查询

AIML如何扩展以支持SQL插入

AIML如何扩展以支持个性化标签

AIML如何生成以及存储知识库

AIML如何通过知识库实现推理过程

数据库如何帮助AIML扩展专业方向知识库

中文语义分析以及模糊匹配

如何通过扩展知识库实现推理过程

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息