当前位置:   article > 正文

AIML框架标签详解_python aiml库说明

python aiml库说明


前言:
之前有写过关于 AIML初探的文章,
链接: https://blog.csdn.net/weixin_42250835/article/details/86766776

AIML框架—>分词

中文分词库-Jieba

安装Jieba中文分词库:pip install jieba / pip3 install jieba (全自动安装)

目前 Jieba 是几个主流的中文分词库之一,下面是几个主流的分词工具包

分词工具 词库中词的数量 最后更新时间

分词工具词库中词的数量最后更新时间
jieba16.6万2015年
IK27.5万2012年
mmseg15万2014年
word64.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_in
	s = jieba.cut(my_in,cut_all = True)	#input手动输入的内容,通过jieba.cut函数调用,匹配cut_all全模式
	z = " ".join(s)						#使用空格把 jieba 分词的结果区分开。" ":引号中就是普通的字符串
	print(z)					  		#输出 分词 的结果

#例句:早上吃了一个茶叶蛋	
#分词结果:早上	吃	了	一个		茶叶		茶叶蛋
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

精确模式分词

精确模式分词,默认情况下使用精确模式。同样的也可使用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)
#例句:早上吃了一个茶叶蛋	
#分词结果:早上	吃	了	一个		茶叶蛋
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

搜索模式

使用搜索引擎模式分词需要调用 cut_for_search() 方法,代码如下:

#搜索模式(也叫‘搜索引擎模式’)
while True:
	my_in = input("")					
	s = jieba.cut_for_search(my_in)	
	z = " ".join(s)						
	print(z)

#例句:早上吃了一个茶叶蛋	
#分词结果:早上	吃	了	一个		茶叶		茶叶蛋
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

AIML框架—>基本标签

小试牛刀

“Project”下新建一个 aiml_main.py 文件,代码如下:

import aiml
import jieba

kernel = aiml.Kernel()
kernel.learn("std-startup.xml")
kernel.respond("load aiml b")

while True:
print(kernel.respond(" ".join(jieba.cut_for_search(input("请输入你的内容>>>")))))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

new —> file —> std-startup.xml 创建 “std-startup.xml”文件,代码如下:

<aiml version="1.0.1" encoding="UTF-8">

    <category>
        <pattern>我 老 了</pattern>    <!--加空格的原因是因为需要加入分词-->

        <template>
            好像是的
        </template>>
    </category>

</aiml>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述
运行 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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

star标签

使用方法 <star index = “n”/> n 表示<pattern>标签中用户输入中 * 的位置
附:这样说可能不是很直观,我们结合下面的代码来看一下

<category>
	<!--一个    苹果是一种水果 吗-->
    <pattern>一个 * 是 一种 * 吗</pattern>
    <template>
		第一个参数值是<star index="1"/>,第二个参数值是<star index="2">
	</template>
</category>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述
第一个 * 对应的是苹果,第二个行对应的是水果。
附:也可以通过正则表达式这样理解,* 匹配的是苹果和水果。

random标签

用于获取随机响应。此标记使AIML能够针对相同的输入做出不同的响应。
<random>标签与<li>标签一起使用,<li>标签带有不同的响应,这些响应将随机传递给用户。

代码实例:

<category>
	<pattern>我 想 你 了</pattern>
	<template>
	<random>
		<li>我也想你了</li>
		<li>不要脸,想我干啥</li>
		<li>你真奔放啊,上来就说想人家</li>
		<li>上旁边想去</li>
	</random>
	</template>
</category>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在这里插入图片描述

在这里插入图片描述

set和get标签

<set>和<get>标签用于处理AIML中的变量,变量可以是预定义变量或程序员创建的变量。

<set>标签用于设置变量的值
示例: <set name = “variable-name”>variable-value</set>
<get>标签用于从变量中获取值
示例: <get name = “variable-name”></get>

<category>
	<pattern>你好 我 是 *</pattern>
	<template>
		你好啊<set name="username"><star/></set>很高兴见到你
	</template>
</category>

<category>
	<pattern>晚安</pattern>
	<template>
		美梦,<get name="username"/>跟你聊天很愉快,期待下一次!
	</template>
</category>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在这里插入图片描述

topic标签

<topic>标签在AIML中用于存储上下文,以便以后的对话可以基于该上下文完成。通常,
<topic>标签用于 是/否类型对话。它有助于AIML搜索在主题上下文中编写的类别
1、使用<set>标记定义主题

<template>
	<set name="topic">topic-name</set>
</template>
  • 1
  • 2
  • 3

2、使用<topic>标记定义类别

<topic name="topic-name">
	<category>...</category>
</topic>
  • 1
  • 2
  • 3

实例:

<category>
	<pattern>我们 讨论一下 作业 吧</pattern>
	<template>好啊,那就聊聊<set name="topic">作业</set></template>
</category>
<topic name="作业">
<category>
	<pattern>好难 啊</pattern>
	<template>作业真是难,我也这么想的,太难啦</template>
</category>
<category>
	<pattern>作业 怎么 做</pattern>
	<template>你说什么呢?我不太理解</template>
</category>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述

think标签

<think>:用于AIML存储变量不通知用户。

实例:

<category>
	<pattern>我的 名字 是 *</pattern>
	<template>你好,欢迎来到贪心学院!<think><set name="username1"></set></think></template>
</category>

<category>
	<pattern>不聊 了</pattern>
	<template>
		好啊,<get name="username1"/>,那下次聊。
	</template>
</category>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/374710
推荐阅读
相关标签
  

闽ICP备14008679号