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