Velocity powered by Wavelink

語法檔案結構

語法檔案必須遵循 Speakeasy 的特定結構,才能正確解譯檔案的內容。

觀看相關視訊 (3:38)

下例為基本語法檔案:

#BNF+EM V2.1;

/*

GRAMMAR: usa_states.bnf

 

說明

這是識別美國部份州的語法檔案。

 

我能說什麼?

您可以說出美國的下列任何一州。

*/

 

!grammar usa_states;

!start <state>;

 

<state>:

阿拉巴馬

| 阿拉斯加

| 康乃迪克

| 佛羅里達

| 愛達荷

| 堪薩斯

|“紐澤西”

| "紐約";

#BNF+EM V1.1;

各個語法檔案都必須有陳述式為開頭,例如 #BNF+EM V1.1;,這會指出 Speakeasy 應該處理語法檔案的方式。您不需要修改這一行。

/* */ 或 //

若要建立備註,也就是引擎忽略的資訊,您可以在一行前面加上 //,或用 /* */ 標記括住文字。您可以編輯說明我能說什麼?區段說明您對於語法檔案所做的變更。

!grammar [filename]

如果您變更語法檔案的名稱,指令 !grammar 必須使用新的檔案名稱。例如,如果檔案名稱變更為 VoicePick.bnf,指令將為 !grammar VoicePick;

!start <state>;

!start 指令將指定使用語法時,語法中哪個群組的字詞可供使用。在上例中,引擎將監聽 <state> 規則中的所有字詞。如果有多個規則,但是指令僅參照其中一個,則將忽略其他所有規則。

<state>: Alabama | Connecticut |...

<state>: 與最後一個 ; 之間的字詞是語法將接受的字詞。每個字詞都必須以 | (OR 符號) 分隔。詞語可能全部列在同一行,也可能也可能垂直成排列出,以便於編輯。

為了加強辨識彼此類似的字詞,例如 New York 和 New Jersey,請用 "" (引號) 括住字詞。這會強制 Speakeasy 引擎更確實按照使用者回應比較接受的字詞。

多個規則

在部份語法檔案中,主要規則區分為多個子區段,以便於管理字詞。如果一個檔案有多個規則,務必包含 !start 行使用的全部規則。

!start <Speech>;

<Speech>: <YesNo> | <Maybe>;
<YesNo>: yes | no;
<Maybe>: maybe;

在此例中,<Speech> 規則包括 <YesNo><Maybe> 規則,因此引擎將聽取 <YesNo> 規則與 <Maybe> 規則中的所有字詞。

類似字詞

如果有聽起來類似的字詞,可能會得到不理想的辨識結果。若要改善辨識,請使用較長較明確的字詞。例如,不使用「faster」和「fastest」,改用「go faster」和「warp speed」之類的字詞。


本文章實用嗎?    

本主題:

不正確

不完整

不是我期望的內容

其他