本文整合了看到的几篇博客并结合了笔者自己的尝试,记录下对aiml的浅显理解,想了解的更深入还是要靠自己探索呀!
目录
一、简介
AIML,全名为Artificial Intelligence Markup Language(人工智能标记语言),是一种创建自然语言软件代理的XML语言,最初来源于一个名为"A.L.I.C.E."的聊天机器人。
简言之,AIML就是用户通过定义的规则模板进行问答匹配,来实现聊天机器人自动问答的功能
下面展示了一个最基本的例子,仅包含最主要的<category><pattern><template>三种标签
<category> <pattern>你好</pattern> <template>您好,很高兴认识您。</template> </category>
当用户输入问题“你好”时,机器人就会匹配到这个pattern,然后将<template>中的内容作为答案返回
标签的详细说明可以参考https://www.tutorialspoint.com/aiml/index.htm
二、原理+源代码解析
1.原理
原理参考了春雨里de太阳的AIML知识库数据匹配原理解析这篇博客(感谢!)
一个通常流程是:
首先系统初始化,包括问句规范化配置、加载许多配置属性等然后将aiml问答知识库以树的形式加载到内存,将其拆分成单个词,结构类似trie tree,在java源码中就是Graphmaster对象(节点和子节点来存储知识节点)
然后接受用户输入,将问句规范化,并将其拆成一个个单词
进而查询匹配标签
最后根据最佳匹配,完善模板(比如*填充,index填充等)返回答案
2.源代码解析
代码逻辑:
(1)用Chat类实现会话,工厂创造bot对象
(2)解析aiml,在aiml包下 AimlHandler类,里面包含对多种标签的解析,生成context和