AIML框架标签详解
文章目录
- AIML框架--->分词
- 中文分词库-Jieba
- 中英文分词的方式
- 全模式分词
- 精确模式分词
- 搜索模式
- AIML框架--->基本标签
- 小试牛刀
- 基本标签
- star标签
- random标签
- srai标签
- set和get标签
- that标签
- topic标签
- think标签
- condition标签
前言:
之前有写过关于 AIML初探的文章,
链接: https://blog.csdn.net/weixin_42250835/article/details/86766776
AIML框架—>分词
中文分词库-Jieba
安装Jieba中文分词库:pip install jieba / pip3 install jieba (全自动安装)
目前 Jieba 是几个主流的中文分词库之一,下面是几个主流的分词工具包
分词工具 词库中词的数量 最后更新时间
| jieba | 16.6万 | 2015年 |
| IK | 27.5万 | 2012年 |
| mmseg | 15万 | 2014年 |
| word | 64.2万 | 2015年 |
以上分词工具、词库中词的数量、最后更新时间 信息来自网络搜集。
中英文分词的方式
my name is Fiarter: my name is Fiarter
我的名字是张三: 我 的 名字 是 张三
以上的中英文分词特点,我们可以看到中文分词与英文分词有很大的不同,对英文而言,一个单词就是一个词,而汉语是以字为基本的书写单位,词语之间没有明显的区分标记,需要人为的切分才可以达到中文分词的目的。
在NLP中,分词是一块比较大的知识要点,自然语言处理汉语的时候,中文分词技术是相当重要的,这里关于分词技术不做太多深入的详解,先带大家初步了解分词,形成一种简单直观的分词感觉。
jieba 支持三种分词模式:全模式、精确模式、搜索模式。
全模式:将句子中所有的可能成词的词语都扫描出来,速度非常快,但是不能解决歧义。
精确模式:试图将句子最精确地切开,适合文本分析。
搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适用于搜索引擎分词。
全模式分词
使用全模式分词需要添加 cut_all 参数,将其设置为 True,代码如下:
import jieba #导入jieba#全模式 while True:my_in = input("") #input手动输入的内容,赋值给变量 my_ins = jieba.cut(my_in,cut_all = True) #input手动输入的内容,通过jieba.cut函数调用,匹配cut_all全模式z = " ".join(s) #使用空格把 jieba 分词的结果区分开。" ":引号中就是普通的字符串print(z) #输出 分词 的结果#例句:早上吃了一个茶叶蛋 #分词结果:早上 吃 了 一个 茶叶 茶叶蛋精确模式分词
精确模式分词,默认情况下使用精确模式。同样的也可使用cut()方法进行精确模式分词的操作,cut()方法的参数改为 False 即可。代码如下:
#精确模式while True:my_in = input("")#s = jieba.cut(my_in) #默认的情况下使用的就是精确模式s = jieba.cut(my_in,cut_all = False) z = " ".join(s) print(z) #例句:早上吃了一个茶叶蛋 #分词结果:早上 吃 了 一个 茶叶蛋搜索模式
使用搜索引擎模式分词需要调用 cut_for_search() 方法,代码如下:
#搜索模式(也叫‘搜索引擎模式’) while True:my_in = input("") s = jieba.cut_for_search(my_in) z = " ".join(s) print(z)#例句:早上吃了一个茶叶蛋 #分词结果:早上 吃 了 一个 茶叶 茶叶蛋AIML框架—>基本标签
小试牛刀
“Project”下新建一个 aiml_main.py 文件,代码如下:
import aiml import jiebakernel = aiml.Kernel() kernel.learn("std-startup.xml") kernel.respond("load aiml b")while True: print(kernel.respond(" ".join(jieba.cut_for_search(input("请输入你的内容>>>")))))new —> file —> std-startup.xml 创建 “std-startup.xml”文件,代码如下:
<aiml version="1.0.1" encoding="UTF-8"><category><pattern>我 老 了</pattern> <!--加空格的原因是因为需要加入分词--><template>好像是的</template>></category></aiml>
运行 aiml_main
基本标签
<aiml> : 定义AIML文档的开头和结尾
<category> : 定义机器人的知识库中的知识单元。
附:可以理解为所有的对话都由category组成
<pattern> : 定义模式以匹配用户可以输入到机器人中的模式
附:其实就是问题
<template> : 定义机器人对用户输入的响应
附:其实就是机器人对用户的回答
举例:
<aiml version="1.0.1" encoding="UTF-8"><category><pattern>HELLO</pattern><template>Hello User</template></category> </aiml>star标签
使用方法 <star index = “n”/> n 表示<pattern>标签中用户输入中 * 的位置
附:这样说可能不是很直观,我们结合下面的代码来看一下
第一个 * 对应的是苹果,第二个行对应的是水果。
附:也可以通过正则表达式这样理解,* 匹配的是苹果和水果。
random标签
用于获取随机响应。此标记使AIML能够针对相同的输入做出不同的响应。
<random>标签与<li>标签一起使用,<li>标签带有不同的响应,这些响应将随机传递给用户。
代码实例:
<category><pattern>我 想 你 了</pattern><template><random><li>我也想你了</li><li>不要脸,想我干啥</li><li>你真奔放啊,上来就说想人家</li><li>上旁边想去</li></random></template> </category>srai标签
<srai>标签是一个多功能标签。 此标记使AIML能够为同一模板定义不同的目标。
有很多时候,我们提出一系列的问题,但实际上只需要统一的回答,这个时候<srai>标签就有用武之地了。
<srai>标签实例:
<category><pattern>你好 *</pattern><template><srai>你好</srai></template> </category><category><pattern>你好</pattern><template><li>你好啊</li><li>很高兴见到你</li><li>好巧啊,你也来啦</li><li>是不是又想我了</li></template> </category>set和get标签
<set>和<get>标签用于处理AIML中的变量,变量可以是预定义变量或程序员创建的变量。
<set>标签用于设置变量的值
示例: <set name = “variable-name”>variable-value</set>
<get>标签用于从变量中获取值
示例: <get name = “variable-name”></get>
that标签
<that>template</that>: <that>标签在AIML中用于根据上下文进行响应
实例:
<category><pattern>你 喜欢 哪个 明星 吗</pattern><template>刘德华</template> </category><category><pattern>我 也 是</pattern><that>刘德华</that><template>太棒了,我也喜欢刘德华啊</template> </category><category><pattern>我 喜欢 * </pattern><that>刘德华</that><template>我也很喜欢他啊</template> </category>topic标签
<topic>标签在AIML中用于存储上下文,以便以后的对话可以基于该上下文完成。通常,
<topic>标签用于 是/否类型对话。它有助于AIML搜索在主题上下文中编写的类别
1、使用<set>标记定义主题
2、使用<topic>标记定义类别
<topic name="topic-name"><category>...</category> </topic>实例:
<category><pattern>我们 讨论一下 作业 吧</pattern><template>好啊,那就聊聊<set name="topic">作业</set>呗</template> </category> <topic name="作业"> <category><pattern>好难 啊</pattern><template>作业真是难,我也这么想的,太难啦</template> </category> <category><pattern>作业 怎么 做</pattern><template>你说什么呢?我不太理解</template> </category>think标签
<think>:用于AIML存储变量不通知用户。
实例:
<category><pattern>我的 名字 是 *</pattern><template>你好,欢迎来到贪心学院!<think><set name="username1"></set></think></template> </category><category><pattern>不聊 了</pattern><template>好啊,<get name="username1"/>,那下次聊。</template> </category>condition标签
<condition>标签类似于编程语言中的swich语句。也可以理解成多个 if else
<ondition name = “variable-name” value = “variable-value” />
实例:
<category><pattern>我 爱 *</pattern><template><think><set name="star"><star/></set></think>哇塞,你好<condition name="star"><li value="健身">帅啊</li><li value="读书">有内涵啊</li><li>666啊</li><condition></template> </category>总结
以上是生活随笔为你收集整理的AIML框架标签详解的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 附加:中半部分sql语句 区/县(数据表
- 下一篇: aiml java,聊天机器人与Alic