AIML框架标签详解
文章目錄
- AIML框架--->分詞
- 中文分詞庫-Jieba
- 中英文分詞的方式
- 全模式分詞
- 精確模式分詞
- 搜索模式
- AIML框架--->基本標(biāo)簽
- 小試牛刀
- 基本標(biāo)簽
- star標(biāo)簽
- random標(biāo)簽
- srai標(biāo)簽
- set和get標(biāo)簽
- that標(biāo)簽
- topic標(biāo)簽
- think標(biāo)簽
- condition標(biāo)簽
前言:
之前有寫過關(guān)于 AIML初探的文章,
鏈接: https://blog.csdn.net/weixin_42250835/article/details/86766776
AIML框架—>分詞
中文分詞庫-Jieba
安裝Jieba中文分詞庫:pip install jieba / pip3 install jieba (全自動安裝)
目前 Jieba 是幾個主流的中文分詞庫之一,下面是幾個主流的分詞工具包
分詞工具 詞庫中詞的數(shù)量 最后更新時間
| jieba | 16.6萬 | 2015年 |
| IK | 27.5萬 | 2012年 |
| mmseg | 15萬 | 2014年 |
| word | 64.2萬 | 2015年 |
以上分詞工具、詞庫中詞的數(shù)量、最后更新時間 信息來自網(wǎng)絡(luò)搜集。
中英文分詞的方式
my name is Fiarter: my name is Fiarter
我的名字是張三: 我 的 名字 是 張三
以上的中英文分詞特點,我們可以看到中文分詞與英文分詞有很大的不同,對英文而言,一個單詞就是一個詞,而漢語是以字為基本的書寫單位,詞語之間沒有明顯的區(qū)分標(biāo)記,需要人為的切分才可以達(dá)到中文分詞的目的。
在NLP中,分詞是一塊比較大的知識要點,自然語言處理漢語的時候,中文分詞技術(shù)是相當(dāng)重要的,這里關(guān)于分詞技術(shù)不做太多深入的詳解,先帶大家初步了解分詞,形成一種簡單直觀的分詞感覺。
jieba 支持三種分詞模式:全模式、精確模式、搜索模式。
全模式:將句子中所有的可能成詞的詞語都掃描出來,速度非常快,但是不能解決歧義。
精確模式:試圖將句子最精確地切開,適合文本分析。
搜索引擎模式:在精確模式的基礎(chǔ)上,對長詞再次切分,提高召回率,適用于搜索引擎分詞。
全模式分詞
使用全模式分詞需要添加 cut_all 參數(shù),將其設(shè)置為 True,代碼如下:
import jieba #導(dǎo)入jieba#全模式 while True:my_in = input("") #input手動輸入的內(nèi)容,賦值給變量 my_ins = jieba.cut(my_in,cut_all = True) #input手動輸入的內(nèi)容,通過jieba.cut函數(shù)調(diào)用,匹配cut_all全模式z = " ".join(s) #使用空格把 jieba 分詞的結(jié)果區(qū)分開。" ":引號中就是普通的字符串print(z) #輸出 分詞 的結(jié)果#例句:早上吃了一個茶葉蛋 #分詞結(jié)果:早上 吃 了 一個 茶葉 茶葉蛋精確模式分詞
精確模式分詞,默認(rèn)情況下使用精確模式。同樣的也可使用cut()方法進(jìn)行精確模式分詞的操作,cut()方法的參數(shù)改為 False 即可。代碼如下:
#精確模式while True:my_in = input("")#s = jieba.cut(my_in) #默認(rèn)的情況下使用的就是精確模式s = jieba.cut(my_in,cut_all = False) z = " ".join(s) print(z) #例句:早上吃了一個茶葉蛋 #分詞結(jié)果:早上 吃 了 一個 茶葉蛋搜索模式
使用搜索引擎模式分詞需要調(diào)用 cut_for_search() 方法,代碼如下:
#搜索模式(也叫‘搜索引擎模式’) while True:my_in = input("") s = jieba.cut_for_search(my_in) z = " ".join(s) print(z)#例句:早上吃了一個茶葉蛋 #分詞結(jié)果:早上 吃 了 一個 茶葉 茶葉蛋AIML框架—>基本標(biāo)簽
小試牛刀
“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("請輸入你的內(nèi)容>>>")))))new —> file —> std-startup.xml 創(chuàng)建 “std-startup.xml”文件,代碼如下:
<aiml version="1.0.1" encoding="UTF-8"><category><pattern>我 老 了</pattern> <!--加空格的原因是因為需要加入分詞--><template>好像是的</template>></category></aiml>
運行 aiml_main
基本標(biāo)簽
<aiml> : 定義AIML文檔的開頭和結(jié)尾
<category> : 定義機器人的知識庫中的知識單元。
附:可以理解為所有的對話都由category組成
<pattern> : 定義模式以匹配用戶可以輸入到機器人中的模式
附:其實就是問題
<template> : 定義機器人對用戶輸入的響應(yīng)
附:其實就是機器人對用戶的回答
舉例:
<aiml version="1.0.1" encoding="UTF-8"><category><pattern>HELLO</pattern><template>Hello User</template></category> </aiml>star標(biāo)簽
使用方法 <star index = “n”/> n 表示<pattern>標(biāo)簽中用戶輸入中 * 的位置
附:這樣說可能不是很直觀,我們結(jié)合下面的代碼來看一下
第一個 * 對應(yīng)的是蘋果,第二個行對應(yīng)的是水果。
附:也可以通過正則表達(dá)式這樣理解,* 匹配的是蘋果和水果。
random標(biāo)簽
用于獲取隨機響應(yīng)。此標(biāo)記使AIML能夠針對相同的輸入做出不同的響應(yīng)。
<random>標(biāo)簽與<li>標(biāo)簽一起使用,<li>標(biāo)簽帶有不同的響應(yīng),這些響應(yīng)將隨機傳遞給用戶。
代碼實例:
<category><pattern>我 想 你 了</pattern><template><random><li>我也想你了</li><li>不要臉,想我干啥</li><li>你真奔放啊,上來就說想人家</li><li>上旁邊想去</li></random></template> </category>srai標(biāo)簽
<srai>標(biāo)簽是一個多功能標(biāo)簽。 此標(biāo)記使AIML能夠為同一模板定義不同的目標(biāo)。
有很多時候,我們提出一系列的問題,但實際上只需要統(tǒng)一的回答,這個時候<srai>標(biāo)簽就有用武之地了。
<srai>標(biāo)簽實例:
<category><pattern>你好 *</pattern><template><srai>你好</srai></template> </category><category><pattern>你好</pattern><template><li>你好啊</li><li>很高興見到你</li><li>好巧啊,你也來啦</li><li>是不是又想我了</li></template> </category>set和get標(biāo)簽
<set>和<get>標(biāo)簽用于處理AIML中的變量,變量可以是預(yù)定義變量或程序員創(chuàng)建的變量。
<set>標(biāo)簽用于設(shè)置變量的值
示例: <set name = “variable-name”>variable-value</set>
<get>標(biāo)簽用于從變量中獲取值
示例: <get name = “variable-name”></get>
that標(biāo)簽
<that>template</that>: <that>標(biāo)簽在AIML中用于根據(jù)上下文進(jìn)行響應(yīng)
實例:
<category><pattern>你 喜歡 哪個 明星 嗎</pattern><template>劉德華</template> </category><category><pattern>我 也 是</pattern><that>劉德華</that><template>太棒了,我也喜歡劉德華啊</template> </category><category><pattern>我 喜歡 * </pattern><that>劉德華</that><template>我也很喜歡他啊</template> </category>topic標(biāo)簽
<topic>標(biāo)簽在AIML中用于存儲上下文,以便以后的對話可以基于該上下文完成。通常,
<topic>標(biāo)簽用于 是/否類型對話。它有助于AIML搜索在主題上下文中編寫的類別
1、使用<set>標(biāo)記定義主題
2、使用<topic>標(biāo)記定義類別
<topic name="topic-name"><category>...</category> </topic>實例:
<category><pattern>我們 討論一下 作業(yè) 吧</pattern><template>好啊,那就聊聊<set name="topic">作業(yè)</set>唄</template> </category> <topic name="作業(yè)"> <category><pattern>好難 啊</pattern><template>作業(yè)真是難,我也這么想的,太難啦</template> </category> <category><pattern>作業(yè) 怎么 做</pattern><template>你說什么呢?我不太理解</template> </category>think標(biāo)簽
<think>:用于AIML存儲變量不通知用戶。
實例:
<category><pattern>我的 名字 是 *</pattern><template>你好,歡迎來到貪心學(xué)院!<think><set name="username1"></set></think></template> </category><category><pattern>不聊 了</pattern><template>好啊,<get name="username1"/>,那下次聊。</template> </category>condition標(biāo)簽
<condition>標(biāo)簽類似于編程語言中的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="讀書">有內(nèi)涵啊</li><li>666啊</li><condition></template> </category>總結(jié)
以上是生活随笔為你收集整理的AIML框架标签详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 附加:中半部分sql语句 区/县(数据表
- 下一篇: 备战数学建模14-熵权法确定指标权重系数