aiml 2 查詢記錄
https://github.com/voduytuan/restful-aiml-bot/blob/master/src/server.js

https://gist.github.com/onlurking/f6431e672cfa202c09a7c7cf92ac8a8b
https://github.com/penguinmenac3/alice-ai
https://github.com/pandorabots/rosie
https://github.com/hlcfan/active-alice
https://github.com/csu/ALICEChatAPI/blob/master/aiml-dir/pickup.aiml
https://github.com/AIMLang/aiml-bots/tree/master/bots/alice2/maps
https://github.com/AIMLang/aiml-java-interpreter
https://github.com/patrickschur/aiml2-chatbot-prototype
https://github.com/pandorabots/Free-AIML/blob/master/botcompare.aiml
https://github.com/pandorabots/pandorabots.github.io
https://github.com/hosford42/AIML_Sets/blob/master/aiml_sets/standard/std-hello.aiml
項目早期用的aiml1,這里主要看看aiml2
https://code.google.com/archive/p/program-ab/wikis
program-ab - TerminalInteraction.wiki
程序AB終端交互
對于聊天模式或模式建議模式,程序AB嘗試確定最后修改了哪個目錄:aiml或aimlif。如果aiml /中的文件較新,則從這些文件加載bot。如果aimlif /更新,它會加載它們。(在運行AB之前,請注意不要編輯兩個aiml和aimlif文件)如果使用它打開任何.csv文件,請務必關閉電子表格編輯器(Excel)。
交互式命令:
從聊天模式:
|?q |?退出而不保存|?| - |:--------------------- |?|?wq |?編寫AIML和AIMLIF(.csv)文件并退出|?|?ab |?輸入catgeory browser / pattern suggestor mde |
模式建議器(類別瀏覽器)模式:
Program AB的Pattern Suggestor(類別瀏覽器)功能掃描文件中的大量會話數據樣本(當前設置為c:/ab/data/sample.txt)并自動查找新模式,botmaster可以從中快速創建新的AIML類別。
注意:此數據文件未隨免提供程序AB。您可以創建自己的數據文件,也可以使用AIML Superbot Development Kit。
另請注意:要試驗提供的sample.txt文件,請創建一個名為(例如)blankbot的新機器人,并創建空目錄:?bots/blankbot/aiml bots/blankbot/aimlif bots/blankbot/sets bots/blankbot/maps bots/blankbot/config?您可以訓練一個空白機器人,并將模式建議應用于sample.txt。
提供的sample.txt文件是從每個Mobile Assistant應該能夠回答的1000個問題中復制的。機器人/超級中提供的機器人SUPER已經包含對sample.txt中大多數輸入的響應。
文件sample.txt包含1000個輸入,但更大的樣本通常更好。在我們的測試中,我們使用了500,000個輸入的樣本。應該對文件sample.txt進行預規范化,以減少運行模式建議器算法的時間。
請參閱配套文檔AIML類別瀏覽器 - 模式建議器。
|?q |?退出而不保存文件|?| - |:--------------------------- |?|?wq |?編寫AIML和AIMLIF文件并退出|?|?
編寫模板:
如果Catgeory瀏覽器的輸入不是上面列出的命令之一,則響應將被視為新的AIML模板。您無需輸入標簽。
程序AB嘗試猜測新類別的文件名。
|?模板conatins?|?類別保存在?|?|:---------------------- |:---------------------- |?|?
或者,你可以寫
它將創建一個帶有模式SOME PATTERN和模板“response”的類別。
program-ab - RunningAB.wiki
AB計劃
Program AB是ALICE AI Foundation提供的AIML 2.0的免費參考實現。
下載并安裝
注意:如果尚未安裝Java,則必須先安裝Java。請參閱Oracle Free Java Download。
在該項目主頁的“下載程序AB”鏈接下下載zip文件。您可以將此文件下載到您希望的任何目錄中,但是出于本文檔的目的,我們假設您將.zip文件擴展到名為c:/ ab的目錄中。如果您使用的是其他根目錄,請將以下文本中的c:/ ab替換為根目錄。
展開.zip文件時,您應該看到以下目錄和文件:
|?c:/ ab / bots |?AIML機器人進入這個目錄|?|:----------- |:----------------------------------- |?|?c:/ ab / lib |?運行此代碼所需的Java庫?|?c:/ ab / out |?Java類文件目錄|?|?c:/ab/run.bat |?批處理文件運行程序AB |
程序AB附帶了一個名為ALICE 2.0的樣本機器人,位于bots / alice2目錄中。
Bot目錄結構
c:/ ab / bots目錄包含您的AIML機器人。如果你有一個名為botname的機器人,那么你應該創建以下目錄:
|?c:/ ab / bots / botname / aiml |?將您的AIML文件存儲在此處|?|:------------------------ |:---------------------- ----- |?|?c:/ ab / bots / botname / aimlif |?程序AB在這里存儲AIMLIF文件?|?c:/ ab / bots / botname / config |?Bot配置文件|?|?c:/ ab / bots / botname / sets |?AIML集|?|?c:/ ab / bots / botname / maps |?AIML地圖|
有關為程序AB配置的示例AIML 2.0 bot,請參閱配套項目SUPER AIML Bot。
運行程序AB
視窗
根據需要修改run.bat文件。命令行選項是
|?action = chat |?運行機器人并聊天|?|:------------ |:---------------------------- |?|?action = ab |?運行實驗模式建議者|?|?action = csv2aiml |?將AIMLIF文件轉換為AIML |?|?action = aiml2csv |?將AIML文件轉換為AIMLIF |?|?bot = botname |?運行botname目錄中的bot?|?trace = true |?打印出有用的跟蹤信息|
Mac或Linux
與Windows相同,但使用run.sh而不是run.bat。
program-ab - SetsMaps.wiki
在程序AB中定義集合和映射
對于名為botname的bot,目錄bot / botname / sets和bot / botname / maps分別包含AIML集和映射的定義。
細節
有關詳細信息,請參閱AIML 2.0中的配套文檔集和映射。
program-ab - CompileAB.wiki
編譯和構建程序AB
程序AB定義了一個名為org.alicebot.ab的Java包。源文件存儲在src / org / alicebot / ab中。還提供了一個額外的類src / Main.java。
程序AB是作為JetBrains IntelliJ IDEA中的項目開發的。分發包括模塊文件Ab.iml和.idea目錄。
內存優化
程序AB中使用的內存優化,包括AIMLIF格式,節點升級和快捷方式,在配套文檔中進行了描述?。
編譯程序AB需要Java庫
編譯程序AB需要一些Java庫。這些庫不包含在此源代碼分發中。
JGoodies數據-common.jar
JGoodies數據,forms.jar
JSON-20090211.jar
sanmoku-0.0.5.jar
sanmoku-功能ex.0.0.1.jar
httpcomponents客戶端-4.2.1:
公地編解碼器1.6.jar
共享記錄-1.1.1.jar
流利-HC-4.2.1.jar
HttpClient的-4.2.1.jar
HttpClient的緩存-4.2.1.jar
的HttpCore-4.2.1.jar
httpmime-4.2.1.jar
program-ab - EditingAIMLIF.wiki
AIML中間格式
AIMLIF(AIML中間格式)目錄以電子表格格式包含存儲在AIML目錄中的信息的并行副本。您可以使用MS Excel,Google Docs或任何其他能夠讀取和寫入CSV格式的電子表格編輯器編輯此目錄中的CSV文件。
AIMLIF將每個AIML類別轉換為單行文本。這些行由以“,”字符分隔的字段組成。字段(或列)的順序是:
激活計數,輸入模式,該模式,主題模式,模板,文件名。
AIMLIF不是XML格式。輸入模式,該模式和主題模式的字段不包含AIML標記
但是,模板列確實包含XML格式的AIML模板。AIML是電子表格式數據(六列激活計數,輸入模式,該模式,主題模式,模板,文件名)和模板中的分層XML數據的混合體。
我們來看幾個例子。此AIML類別來自文件reductions.aiml:
有一個中間格式表示
0,DO YOU THINK YOU WILL *,*,*,
激活計數為0.模式是你認為你會。該模式和主題模式都是。模板是
如果文件personality.aiml包含該類別
它將在AIMLIF文件personality.aiml.csv中表示為
0,HI,*,*,
一切都在一條線上。
特殊字符
由于AIMLIF表示使用逗號分隔這些字段,因此避免在AIML模板中使用“,”字符非常重要。(注意:AIML模式,主題或文件名字段中不允許使用“,”)。如果您正在編輯AIMLIF文件,而不是在模板中編寫“,”,請使用宏#Comma。
由于AIMLIF表示每個類別僅使用一行文本,因此避免AIML模板中的換行也很重要。(注意:AIML模式,主題或文件名字段中不允許使用換行符)。如果您正在編輯AIMLIF文件,請使用宏#Newline而不是輸入換行符。
csv2aiml.bat程序將#Comma轉換為“,”并將#Newline轉換為換行符。相反,aiml2csv.bat程序將任何“,”轉換為#Comma和換行符為#Newline。
激活計數
激活計數列顯示樣本數據中每個類別的激活次數。程序AB不提供此數據。修改機器人的一個好策略是首先使用激活計數最高的類別。這將有助于快速區分您的機器人個性與其他機器人。
文件名
每個AIMLIF文件都包含一個文件名字段。最初,此字段值將與轉換AIMLIF文件的AIML文件相同。您可以更改AIMLIF文件中任何特定類別的文件名值。將CSV文件轉換回AIML時,類別將保存在最后一列值指定的文件名中,無論它來自哪個AIMLIF文件。
program-ab - ExtendingAIML.wiki
AIMLProcessorExtension
程序AB定義了一個名為AIMLProcessorExtension的Java接口,可用于定義新的AIML標記。
實現AIMLProcessorExtension的類必須提供:
一組標簽名稱。
用于遞歸評估與新標記關聯的每個節點的XML分析樹的函數。
Program AB源包括一個名為PCAIMLProcessorExtension的此接口的示例實現,它定義了一組模擬聯系人數據庫的標記。
細節
通過定義函數extensionTagSet()來為AIMLProcessor提供擴展標記名稱列表:?public Set
定義一個函數?public String recursEval(Node node, ParseState ps);?來遞歸計算XML解析樹。由于您的自定義標記本身可能包含普通的AIML 2.0標記,因此評估函數?AIMLProcessor.evalTagContent(node, parseState ignoreAttributes);?應用于評估任何標記或子標記內容。
public String recursEval(Node node, ParseState ps);?該函數應返回評估標記內容的結果。
如果定義AIMLProcessorExtension類,例如PCAIMLProcessorExtension,則需要在AIMLProcessor中設置靜態變量?擴展:
AIMLProcessorExtension.extension = new PCAIMLProcessorExtension();
program-ab - ProgrammingInterface.wiki
鏈接到Ab.jar
將Ab.jar庫添加到您的應用程序中。在Java文件中,使用
import org.alicebot.ab.*;
創建一個機器人
創建一個機器人
String botname="mybot"; Bot bot = new Bot(botname);
您還可以使用指定機器人文件的根路徑
String botname="mybot"; String path="c:/example"; Bot bot = new Bot(botname, path);
如果Program AB bot文件位于c:/ example目錄中,那么名為mybot的bot?應該使用以下目錄:
|?目錄|?內容|?|:---------- |:--------- |?|?c:/ example / bots / mybot / aiml |?AIML文件|?|?c:/ example / bots / mybot / aimlif |?AIMLIF格式文件|?|?c:/ example / bots / mybot / config |?Bot配置文件|?|?c:/ example / bots / mybot / sets |?AIML集|?|?c:/ example / bots / mybot / maps |?AIML地圖|
構造函數方法將加載所有bot的類別,替換,配置文件以及set和map定義。
創建聊天會話
使用創建客戶端聊天會話
Chat chatSession = new Chat(bot);
與機器人聊天
使用multisentenceResponse方法獲取機器人對多句(一個或多個句子)輸入的回復:
String request = "Hello. Are you alive? What is your name?" String response = chatSession.multisentenceRespond(request); System.out.println(response);
program-ab - Configuration.wiki
配置文件
正?;?/p>
對于名為botname的bot,規范化文件位于bots / botname / config / normal.txt中。
替換每行寫一個,雙引號圍繞這兩個術語。該程序正在尋找與正則表達式匹配的輸入,?"\"(.*?)\",\"(.*?)\""?例如?" haven't "," have not " " realy "," really " ".uk "," dot uk "?許多替換以空格開始和結束。這是為了確保全字替換。預處理器在每個句子的開頭和結尾附加一個空格,應用所有替換,然后修剪前導和結束空格。
一個特殊的例子是?"""," "
雙引號不必轉義以匹配正則表達式。
謂詞默認值
文件config / predicates.txt包含任何謂詞默認值。格式是
predicate:value
例如:
age:how many baby:who bestfriend:who birthday:when birthplace:where boyfriend:who brother:who cat:what city:which country:which county:which customname:unknown daughter:who dialnumber:unknown dog:who
機器人屬性
文件config / properties.txt包含bot屬性。格式與謂詞默認值的格式相同。例如:
url:http://www.alicebot.org name:SUPER email:callmom-info@pandorabots.com gender:male botmaster:Dr. Richard S. Wallace organization:ALICE AI Foundation version:0.0.4
換人
這些文件存儲某些AIML標記的替換。格式與規范化替換的格式相同。以下是person.txt的示例:
" with you "," with me2 " " with me "," with you2 " " to you "," to me2 " " to me "," to you2 " " of you "," of me2 " " of me "," of you2 "
從上到下依次應用替換。
下表總結了替換文件的組織:
|?檔案?|?AIML標簽?|?|:--------- |:------------- |?|?normal.txt |?
版權
|?宏|?擴張|?|:------ |:----------- |?|?[url]?|?由文件properties.txt |中的bot屬性url指定的URL?|?[date]?|?當前日期|?|?[YYYY]?|?當前日歷年|?|?[version]?|?來自properties.txt |的bot屬性版本?|?[botname]|?properties.txt中的botname屬性?|?[botmaster]?|?來自properties.txt |的botmaster屬性?|?[organization]|?來自properties.txt的組織屬性
API密鑰
如果您計劃使用Pannous Web服務有
config / pannous-login.txt config / pannous-apikey.txt
如果沒有這些文件,程序將分配默認值
pannous_api_key = "guest" pannous_login = "test-user"
AIML - 在AIML 2.0中設置和映射
AIML 2.0草案標準包括用于表示集合和地圖的新功能。AIML集是單詞和短語的集合,AIML映射是將一個集合的元素轉換為另一個集合的元素的函數。例如,我們可以定義一組動物{狗,蛇,袋鼠,馬}以及從動物到腿數的地圖{dog:4,snake:0,kangaroo:2,horse:4}。
集合和地圖功能對機器人學習和推理具有重要意義。它們還減少了botmaster的工作量。在
模式側
AIML 2.0定義了模式端
AIML 2.0草案標準沒有規定這些集合的定義。這個細節留給了AIML解釋器的實現。在程序AB中,每個機器人都有一個名為sets /的子目錄,其中集合在文本文件中定義。這些文件的格式為每行文本一個元素,例如文件color.txt以:
空軍藍色
愛麗絲藍
茜素深紅
杏仁
莧菜
琥珀色
美國玫瑰
紫晶
...
在模式匹配中,
-
- 如果在集合中找不到輸入的單詞,則匹配失敗。
- AIML匹配訂單修改如下:
首先嘗試下劃線_。
嘗試找到確切的單詞匹配。
嘗試找到
試試明星*最后。
- 與通配符匹配的情況一樣,AIML模式匹配器首先嘗試一個單詞集匹配,然后是兩個單詞匹配,然后是三個單詞,依此類推,直到沒有更多輸入單詞。這意味著當一個集合元素是另一個元素的前綴時,較短的匹配優先于較長的匹配。例如,應該注意一組包含“給”和“放棄”的動詞 - “給”將首先匹配。
- 匹配
讓我們使用
<模板>
模板>
類別>
我沒有將
類別>
類別>
類別>
這些類別允許以下示例對話框。
人:我最喜歡的顏色是紅色
機器人:紅色是一種很好的顏色。
注釋:?輸入匹配模式MY FAVORITE COLOR IS
人類:我最喜歡的顏色是空軍藍色
機器人:空軍藍色是一個很好的顏色。
注釋:該集可能包含多個單詞的短語。短語“Air Force Blue”在顏色集中。
人:我最喜歡的顏色是綠色
機器人:綠色也是我最喜歡的顏色!
評論:還有另一個類別,模式MY FAVORITE COLOR IS GREEN。由于精確單詞匹配優先于
人類:我最喜歡的顏色是春天的巴黎
機器人:我在春天不認識巴黎是一種顏色。
評論:?“春天的巴黎”這個短語不在顏色集中。
人:我喜歡紫藍色
機器人:紫羅蘭色是一種很好的顏色。
注釋:?只要用戶說“我喜歡X”并且X是顏色的名稱,最終類別就會應用縮減。
模板端
AIML
與模式端
state2capital set:
緬因州:奧古斯塔
加利福尼亞州:薩克拉門托
紐約:奧爾巴尼
伊利諾伊州:斯普林菲爾德
簡單的目標:
<類別>
類別>
模板側
如果命名映射不存在,
如果地圖存在且找到了domain元素,則
要了解
誰
模板>
pattern-side
地圖在maps /目錄中定義。
簡單的演示對話:
人:喬確實有效
機器人:誰工作?喬。
喬做什么?工作。
人類:簡似乎很累
機器人:誰似乎累了?簡。
簡看起來是什么?累。
人類:史蒂夫認為AIML設置和地圖很酷。
機器人:誰認為AIML套裝和地圖很酷?史蒂夫。
史蒂夫怎么想?AIML集和地圖很酷。
set verb2sp是
具有
不
說
得到
品牌
去
知道
需要
看到
來
想
容貌
希望
給
使用
認定
告訴
問
作品
似乎
感覺
嘗試
樹葉
電話
地圖verb2sp2verb1sp是
有:有
確實做
說:說
獲得:獲得
使得:使
云:走
知道:知道
需要:取
看:看
來自:來
認為:認為
看:看
希望:希望
給:給
用途:使用
發現:發現
講述:告訴
問:問
工作原理:工作
似乎是:似乎
感覺:感覺
嘗試:嘗試
葉:離開
電話:電話
上面的簡化類別不包含
逆轉AIML
Charles Chevallier創造了“Reversed AIML”一詞來指代機器人可以將事實陳述轉換為新的AIML類別的特征。例如,根據“Joe確實有效”的說法,機器人可以編寫新的AIML類別來回答“Joe做什么?”和“誰工作?”這一問題。新的AIML是輸入語句的“反向”。使用集合和映射,botmaster可以更輕松地編寫反向AIML類別。通過使用
人:喬做的。
機器人:我會記得喬做的。
人:誰工作?
機器人:喬。
人:喬做什么?
機器人:工作。
喬賺錢?!l賺錢?
梅賽德斯生產汽車?!鞘裁醋屍??
練習:將
答:這是一種方法:
<模板>誰模板>
類別>
<模板>誰模板>
類別>
<模板>什么模板>
類別>
<模板> <認為>
<類別>
類別>
LEARNF>
認為>
現在你可以問我:“
<認為>
<類別>
類別>
LEARNF>
認為>
和“
類別>
外部(遠程)設置和地圖
對于具有數千到數十萬成員的大型集合和地圖,可能不希望花費在小型設備上加載該集合所需的存儲器資源。作為替代方案,程序AB允許使用遠程服務器指定外部集和映射。
遠程設置
構建和使用外部集的步驟如下:
1.編寫一個AIML文件,其中包含set setName的每個成員setMember的類別,其中模式指定為
“?ISA?”?+ setName +?“?”?+ setMember
而模板是
“? true template>?”
例如,如果setName是“color”,則“red”的類別將是
true template>
category>
請注意,編寫一個可以讀取set成員文件并編寫AIML類別文件的程序(幾乎任何語言)都相當簡單。
2.再添加一個類別以指示集合中未找到的任何內容不是成員,例如:
false template>
category>
3.在Pandorabots服務器上創建Pandorabot并上傳AIML文件。發布機器人,并記下主機名和機器人ID。
4.在Program AB sets /目錄中,創建一個文本文件,其中包含該名稱,如color.txt。在該文件中添加一行,以“external:”開頭,其格式如下:
外部:www.pandorabots.com?:?8e3fc4b44e342400:4
“external”關鍵字表示這是一個外部集。
“?www.pandorabots.com?”指定主機名。
數字4是該組中任何成員的最大長度(以字為單位)。此參數通過省略對組中太長而無法進行檢查的短語來節省處理和網絡資源。
5.當程序AB加載sets /目錄中的集合時,它會檢測外部集合。
6.通常在模式表達式中使用
將檢查“IS”和“COLOR”之間的輸入詞是否是外部集的成員。
遠程地圖
定義遠程地圖的步驟幾乎與遠程地圖的步驟相同。
1.在map mapName中為每個對domainElement,rangeElement編寫一個包含類別的AIML文件,其中模式被指定為
mapName +?“?”?+ domainElement
而模板是
“??”?+ rangeElement +?“? template>?”
例如,如果setName是“zip2city”,則“94618”的類別將是
加利福尼亞州奧克蘭 template>
category>
請注意,與集合的情況一樣,編寫一個程序(幾乎任何語言)都可以讀取集合成員的文件并寫入AIML類別的文件。
2.再添加一個類別以指示對于域中未找到的任何內容,映射是未知的。
unknown template>
category>
3.在Pandorabots服務器上創建Pandorabot并上傳AIML文件。發布機器人,并記下主機名和機器人ID。(您可以使用與套裝相同的機器人)。
4.在Program AB maps /目錄中,創建一個帶有地圖名稱的文本文件,如zip2city.txt。在該文件中添加一行,以“external:”開頭,其格式如下:
外部:www.pandorabots.com:8e3fc4b44e342400
“external”關鍵字表示這是一個外部集。
“www.pandorabots.com”指定主機名。
請注意,不需要為映射指定最大元素長度,也不需要為集合指定。這是因為
5.當程序AB從maps /目錄加載地圖時,它會檢測外部地圖。
6.通常在模式表達式中使用
94618的城市是
將向“遠程服務器”發送“ZIP2CITY 94618”形式的請求,如果一切正常,遠程服務器將返回“Oakland,CA”。
內置集和地圖
解釋器內置了一些AIML集和映射:
number??- 自然數{0,1,2,...}的集合
后繼- 函數f(x)= x + 1.(如果x不是數字,則返回“unknown”)
前身?- 函數f(x)= x -1。(如果x不是數字,則返回“unknown”)
單數- 從復數名詞到其單數形式的映射(僅英文)
復數- 從單數名詞到復數形式的映射(僅英文)
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。