此文分析離線語音識別的語義規則檔案,即bnf檔案,一般放在android studio的assets資料夾下。本大俠使用的是科大訊飛的語音識別sdk,所以以下所有規則在此sdk下實測有效簡單的說,bnf檔案分為五個部分:
文件標示頭;(不要去改就對了)
語法名稱;
槽宣告;
主規則(可引用子規則);
文件主體(具體的定義槽、引用規則)
這個不細說,按預設來就好,它定義了文件的版本和編碼格式,注意文件的內容必須和這裡宣告的編碼格式統一。
#bnf+iat 1.0 utf-8;
乙個檔案只能有乙個語法名稱,作為這個bnf檔案的乙個識別名稱。
(借助此名稱可通過名稱識別介面在不同的場景呼叫不同的語法規則,此功能未實測)
!grammar name;//定義語法名稱
就是乙個個坑,理解為活字印刷時的那些小坑,裡面必須填入各種文字才行,非常方便動態修改識別命令。宣告完槽後在文件底部的底部部分具體去定義每個宣告過的槽的具體內容。這樣語音識別引擎就會根據槽的內容去動態匹配你的指令。
!slot ;
首先宣告乙個主規則名稱
!start
然後為這個規則定義詳細的識別規則,注意名稱要和剛才宣告的一樣。
:||;
//冒號後面都是一些引用規則,引用規則由一系列槽組成。
這個地方放兩樣東西,引用規則和槽定義。
看例子:
:;//引用規則
:電視|電視機;//槽的具體定義
:開啟|開了|開起來|開|開一下;
結構很簡單,基本就這五個部分,比較麻煩的是規則定義部分。文件規定只能定義乙個主規則,所以可以在主規則中引用子規則來減少**量。
特別注意:名稱不能超過15個字元,命名不能重複。
#bnf+iat 1.0 utf-8;
!grammar call;//定義語法名稱
!slot ;//被控制的物體和物體的某種屬性
!slot ;
!slot ;
!slot ;
!slot ;
!slot ;
!slot ;
//以下是想要讓物體達到的狀態
!slot ;
!slot ;
!slot ;
!slot ;
!slot ;
!start ;//定義開始規則,下面一行為規則的具體內容
//主規則,系統只認主規則
:|;//被引用的子規則,注意變數命名不能超過15個字元:|
||;:
|||;
:|||
;:||;:
|;
//為宣告過的槽,定義具體的名稱
:電視|電視機;
:空調;
:溫度;
:聲音|音量;
:把;:開啟|開了|開起來|開|開一下;
:關閉|關掉|關了|關|關一下;
:高點|調高;
:低點|調高;
:重點|重點|重一點|重一點|大點|大一點;
:輕點|小點|小一點|輕一點;
:關閉系統|退出;
plist檔案格式簡介
plist是property list的縮寫。plist中包括一些命名值和使用core foundation型別建立的值的列表。這些型別包括cfstring,cfnumber,cfboolean,cfdata,cfdate,cfarray,以及cfdictionary。利用這些型別建立的資料能夠高效...
BMP檔案格式簡介
bmp檔案是一種畫素檔案,它儲存了一幅圖象中所有的畫素。這種檔案格式可以儲存單色位圖 16色或256色索引模式畫素圖 24位真彩色圖象,每種模式種單一畫素的大小分別為1 8位元組,1 2位元組,1位元組和3位元組。目前最常見的是256色bmp和24位色bmp。這種檔案格式還定義了畫素儲存的幾種方法,...
yaml 檔案格式簡介
yaml 的意思其實是 yet another markup language 仍是一種置標語言 的縮寫。yaml的語法和其他高階語言類似,並且可以簡單表達清單 雜湊表,標量等資料形態 儘管它比較適合用來表達階層式 hierarchical model 的資料結構,不過也有精緻的語法可以表示關聯性 ...