从零开始写聊天机器人

目录

  • 目录
  • 简介
  • 搭建聊天机器人的嘴巴之对话功能
    • 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扩展专业方向知识库

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

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

你可能感兴趣的:(聊天机器人,AIML,自然语言处理,聊天机器人,tornado,websocket)