第三章??User Input(Grammars)
|
|
? |
第一節(jié) Speech Grammars
|
? |
? |
????<grammar>元素用于提供一個(gè)語音語法: |
|
??????·該語法指定了一系列要匹配的短語,用戶可能說出這些短語用于執(zhí)行一個(gè)操作或提供一些信息。 |
|
??????·對(duì)于一個(gè)要匹配的短語,該語法返回一個(gè)相應(yīng)的語義解釋。返回的可以是一個(gè)簡(jiǎn)單的值(例如一個(gè)字符串),一組成對(duì)的屬性――值(例如年、月、日),或一個(gè)嵌套的對(duì)象(對(duì)于復(fù)雜的請(qǐng)求)。 |
|
????<grammar>元素適用于滿足上述要求的任意的語法格式。VoiceXML平臺(tái)必須至少支持一種通用的格式,即W3C SRGS的XML格式。VoiceXML平臺(tái)應(yīng)該支持W3C SRGS的ABNF格式。VoiceXML平臺(tái)可以選擇支持SRGS以外的語法格式。例如,平臺(tái)可能借助<grammar>元素對(duì)PCDATA的支持來嵌入一個(gè)專有的語法,或使用src或type屬性引用一個(gè)外部的語法。 |
|
????VoiceXML平臺(tái)必須是一個(gè)合格的XML格式的語法處理器,如W3C SRGS中定義的。雖然這樣使得平臺(tái)要處理文檔中定義的一個(gè)或多個(gè)“xml:lang”屬性,但是并不要求平臺(tái)必須是多語言的。當(dāng)遇到一種不支持的語言時(shí),平臺(tái)要拋出error.unsupported.language事件,該事件在它的"_message"變量中指定了這種不支持的語言。 |
|
????SRGS的XML格式的元素 |
|
????下面是在W3C SRGS的XML格式中定義的元素,它們?cè)赩oiceXML2.0中是可用的。本文檔沒有重復(fù)定義這些元素,請(qǐng)參考W3C SRGS中的定義和例子。 |
元素 |
作用 |
章節(jié)鏈接 |
<grammar> |
XML格式語法的根元素。 |
4.
|
<meta> |
等價(jià)于HTTP元內(nèi)容的頭部聲明。 |
4.11.1
|
<metadata> |
XML元數(shù)據(jù)內(nèi)容的頭部聲明。 |
4.11.2
|
<lexicon> |
發(fā)音詞典的頭部聲明。 |
4.10
|
<rule> |
定義一條語法展開規(guī)則。 |
3.
|
<token> |
定義一個(gè)可作為輸入的詞或其他實(shí)體。 |
2.1
|
<ruleref> |
引用一條本地或外部定義的規(guī)則。 |
2.2
|
<item> |
定義一個(gè)可選的、重復(fù)的或可能的展開項(xiàng)。 |
2.3
|
<one-of> |
定義一組可供選擇的規(guī)則展開項(xiàng)。 |
2.4
|
<example> |
包含在一個(gè)規(guī)則定義中的元素,該元素提供了一個(gè)匹配該規(guī)則的輸入的例子。 |
3.3
|
<tag> |
定義一個(gè)任意的字符串,該字符串可作為該展開規(guī)則的語義解釋。 |
2.6
|
|
表27:SRGS(XML 格式)的元素 |
? |
一、Inline Grammars |
|
????<grammar>元素可用于指定一個(gè)聯(lián)機(jī)語法或外部語法。聯(lián)機(jī)語法由<grammar>元素的內(nèi)容指定,它定義了一個(gè)完整的語法: |
|
<grammar type="media-type" mode="voice">
inline speech grammar
</grammar>
|
|
????在這種情況下,有必要把內(nèi)容封裝在XML的CDATA段中。對(duì)于聯(lián)機(jī)語法,<grammar>元素的type屬性指定了一個(gè)媒體類型,該媒體類型控制著<grammar>元素內(nèi)容的解釋。 |
|
????下面是一個(gè)聯(lián)機(jī)語法的例子,是W3C SRGS的XML格式的: |
|
<grammar mode="voice" xml:lang="en-US" version="1.0" root="command">
<!-- Command is an action on an object -->
<!-- e.g. "open a window" -->
<rule id="command" scope="public">
<ruleref uri="#action"/> <ruleref uri="#object"/>
</rule>
<rule id="action">
<one-of>
<item> open </item>
<item> close </item>
<item> delete </item>
<item> move </item>
</one-of>
</rule>
<rule id="object">
<item repeat="0-1">
<one-of> <item> the </item> <item> a </item> </one-of>
<one-of>
<item> window </item>
<item> file </item>
<item> menu </item>
</one-of>
</rule>
</grammar>
|
|
????下面這個(gè)語法和上面的效果是一樣的,不過它是W3C SRGS的ABNF格式的。因?yàn)閂oiceXML平臺(tái)不是必須支持這種格式的,所以這種格式的語法可移植性比較差。 |
|
<grammar mode="voice" type="application/srgs">
#ABNF 1.0;
language en-US;
mode voice;
root $command;
public $command = $action $object;
$action = open | close | delete | move;
$object = [the | a] (window | file | menu);
</grammar>
|
? |
二、External Grammars |
|
????外部語法是由form的<grammar>元素指定的。 |
|
<grammar src="URI" type="media-type"/>
|
|
????在這種情況下,屬性type是可選的,因?yàn)槿绻麤]有指定該屬性,解釋器環(huán)境會(huì)試圖動(dòng)態(tài)的確定它的類型(例如,使用服務(wù)器特定的媒體類型,文件擴(kuò)展名或內(nèi)容自檢)。 |
|
????如果指定了src屬性,且有一個(gè)聯(lián)機(jī)語法作為該<grammar>元素的內(nèi)容,則拋出error.badfetch事件。 |
|
????下面的例子引用了一個(gè)W3C SRGS的XML格式的外部語法。 |
|
<grammar type="application/srgs+xml" src="http://www.grammar.example.com/date.grxml"/>
|
|
????下面的例子引用了一個(gè)W3C SRGS的ABNF格式的外部語法。和上面的例子的效果是一樣的。 |
|
<grammar type="application/srgs" src="http://www.grammar.example.com/date.gram"/>
|
? |
三、Grammar Weight |
|
????<grammar>元素的weight屬性指定了該語法的權(quán)重。 |
|
<grammar weight="0.6" src="form.grxml" type="application/srgs+xml"/>
|
|
????<grammar>元素,包括<link>、<field>和<form>元素中的,都有這個(gè)屬性,語法可以是聯(lián)機(jī)語法、外部語法或內(nèi)置語法。 |
|
????屬性weight遵循W3C SRGS中關(guān)于weight的定義。屬性weight的值是一個(gè)簡(jiǎn)單的沒有指數(shù)的正的浮點(diǎn)數(shù)。合法的格式有“n”,“n.”,“.n” 和“n.n”,其中n是一位或多位數(shù)字的序列。 |
|
????在語音識(shí)別的搜索范圍內(nèi),weight是影響語法被選中的可能性的一個(gè)因素。Weight屬性的值為1.0時(shí)相當(dāng)于沒有指定weight屬性。Weight屬性值大于1.0時(shí),該語法被選中的可能性就比較大。反之,weight屬性值小于1.0時(shí),可能性就比較小。如果沒有指定該屬性,則所有激活的語法的可能性一樣。 |
|
<link event="help">
<grammar weight="0.5" mode="voice" version="1.0" root="help">
<rule id="help" scope="public">
<item repeat="0-1">Please</item> help
</rule>
</grammar>
</link>
<form>
<grammar src="form.grxml" type="application/srgs+xml"/>
<field name="expireDate">
<grammar weight="1.2" src="http://www.example.org/grammar/date"/>
</field>
</form>
|
|
????在上面的例子中,weight的語義等同于下面的XML語法: |
|
<grammar root="r1" type="application/srgs+xml">
<rule id="r1">
<one-of>
<item weight="0.5"> <ruleref uri="#help"/> </item>
<item weight="1.0"> <ruleref uri="form.grxml"/> </item>
<item weight="1.2"> <ruleref uri="http://www.example.org/grammar/date"/> </item>
</one-of>
</rule>
<rule id="help">
<item repeat="0-1">Please</item> help
</rule>
</grammar>
|
|
????隱式的語法,如<option>元素中的,不支持weight。如果需要用weight屬性,請(qǐng)使用<grammar>元素代替隱式語法控制weight。 |
|
????語法的weight屬性值只影響語法的處理,不會(huì)直接影響到語法結(jié)果的后期處理,包括當(dāng)用戶的輸入匹配了多個(gè)激活的語法時(shí)的語法優(yōu)先權(quán)(見3.1.4節(jié))。 |
|
????Weight屬性對(duì)DTMF語法沒有影響(見3.1.2節(jié))。在<grammar>元素中,如果屬性mode為dtmf時(shí),則該<grammar>元素指定的weight屬性被忽略。 |
|
<!-- weight will be ignored -->
<grammar mode="dtmf" weight="0.3" src="http://www.example.org/dtmf/number"/>
|
|
????恰當(dāng)?shù)膚eight值是很難確定的。猜測(cè)的weight值對(duì)于提高識(shí)別的性能沒有任何幫助。有效的weight值是通過對(duì)自然語言和特定平臺(tái)上的原始數(shù)據(jù)長期研究得到的。此外,語法的weight是依賴于平臺(tái)的。注意,不同的ASR引擎對(duì)于相同的weight值可能有不同的理解。因此,在一個(gè)特定平臺(tái)上工作得好好的weight值在其他的平臺(tái)上可能會(huì)得到不同的結(jié)果。 |
? |
四、Grammar Element |
|
????<grammar>元素從W3C SRGS繼承的屬性: |
version |
它定義了語法的版本號(hào)。 |
xml:lang |
該語法的語言標(biāo)識(shí)符(例如,“fr-CA”表示 加拿大法語)。如果缺省,將從文檔中繼承。 |
mode |
其值為voice或dtmf。說明該語法是匹配語音的或是匹配 DTMF 的輸入。 |
root |
定義該語法的根規(guī)則。 |
tag-format |
定義該語法中所有的<tag>元素的內(nèi)容格式。 |
xml:base |
定義一個(gè)基本URI,用于解析該語法中的相對(duì)URI。該屬性的優(yōu)先權(quán)高于<vxml>元素中的相應(yīng)屬性。如果缺省,則從文檔中繼承。 |
|
表28:<grammar>元素從SRGS中繼承的屬性 |
|
????上述屬性的用法和解釋由以下幾個(gè)方面決定: |
|
??????1、SRGS的XML格式的聯(lián)機(jī)語法:由SRGS決定。SRGS規(guī)定屬性version是必須的,且它的值為"1.0";屬性root是必須的,且它的值確定了要激活哪一條規(guī)則;其他的屬性是可選的。 |
|
??????2、SRGS的ABNF格式的聯(lián)機(jī)語法:平臺(tái)必須忽略上述任何指定的屬性。 |
|
??????3、SRGS的XML和ABNF格式的外部語法:平臺(tái)必須忽略上述任何指定的屬性。 |
|
??????4、所有其他的語法類型:任何指定的屬性的用法和解釋是依賴于平臺(tái)的。 |
|
????<grammar>元素中VoiceXML2.0增加的屬性: |
src |
指定一個(gè)URI。如果引用一個(gè)外部語法,該屬性指定了該語法的位置和該語法中的一個(gè)規(guī)則名(可選的)。該URI被作為一個(gè)規(guī)則引用來解釋,詳見SRGS的2.2節(jié)。但是,并不是所有的規(guī)則引用的形式都被VoiceXML允許。規(guī)則引用的能力將在后面詳細(xì)描述。 |
scope |
值為“document”或“dialog”。如果為“document”,則該語法在當(dāng)前文檔(和相關(guān)的應(yīng)用葉文檔)所有的dialog中都是激活的。如果值為“dialog”,則該語法只在該form中激活。如果缺省,則該語法的作用域由它的父元素決定。關(guān)于語法作用域和優(yōu)先權(quán)的描述見3.1.3節(jié)。 |
type |
該語法的媒體類型。該屬性值的優(yōu)先權(quán)高于其他可能存在的媒體類型(例如HTTP或RTSP交換中的“Content-type”,或文件擴(kuò)展名)。如果該屬性缺省,解釋器環(huán)境將試圖動(dòng)態(tài)的確定它的媒體類型(例如,使用服務(wù)器特定的媒體類型、文件擴(kuò)展名或內(nèi)容自檢)。如果語法的內(nèi)容包含在該元素中,且沒有指定該屬性,就假定該媒體類型為一個(gè)XML語法。 如果該語法源沒有包含選定媒體類型的正確的內(nèi)容,當(dāng)使用該語法時(shí),拋出一個(gè)錯(cuò)誤W3C的XML格式語法暫定的媒體類型為“application/srgs+xml”,ABNF格式語法暫定的媒體類型為“application/srgs”。 |
weight |
指定該語法的weight。見3.1.1.3節(jié)。 |
fetchhint |
見6.1節(jié)。默認(rèn)為grammarfetchhint property。 |
fetchtimeout |
見6.1節(jié)。默認(rèn)為fetchtimeout property。 |
maxage |
見6.1節(jié)。默認(rèn)為grammarmaxage property。 |
maxstale |
見6.1節(jié)。默認(rèn)為grammarmaxstale property。 |
|
表29:<grammar>元素中VoiceXML2.0增加的屬性 |
|
??????必須指定屬性src或一個(gè)聯(lián)機(jī)語法(不是指定兩個(gè)),否則會(huì)拋出一個(gè)error.badfetch事件。 |
|
????VoiceXML 2.0也擴(kuò)展可<grammar>元素,允許在PCDATA中嵌入各種格式的語法,包括W3C SRGS的XML格式。 |
|
????當(dāng)引用一個(gè)外部語法時(shí),src屬性值為一個(gè)URI,它指定了該語法的位置。URI可以帶一個(gè)段,指定規(guī)則名。SRGS的2.2節(jié)定義了規(guī)則引用的幾種形式。下面是VoiceXML中<grammar>元素允許的形式。 |
|
??????· 在外部語法中引用一個(gè)規(guī)則:src屬性的值是一個(gè)絕對(duì)或相對(duì)的URI,該URI帶有一個(gè)段,它執(zhí)行一個(gè)外部語法的相應(yīng)規(guī)則。這種形式的規(guī)則引用遵循SRGS 2.2節(jié)中的定義。如果該URI不能被獲取,或該規(guī)則名不存在,或該規(guī)則名在指定的語法中不是一個(gè)public(可激活的)規(guī)則,則拋出error.badfetch。 |
|
??????· 引用外部語法的根規(guī)則:src屬性的值是一個(gè)絕對(duì)或相對(duì)的URI,它引用了一個(gè)外部語法,但是沒有指定一個(gè)規(guī)則名。這種形式隱式的引用了該語法的根規(guī)則,正如SRGS 2.2節(jié)中的定義。如果該URI不能被獲取,或如果該語法不能被它得root引用(見SRGS的4.7節(jié)),則拋出一個(gè)error.badfetch事件。 |
|
??????· 引用本地語法:只包含段的URI是不被允許的(見SRGS2.2.1中的定義)。如果src屬性的值為一個(gè)段, 拋出一個(gè)error.semantic事件。 |
|
??????· 引用特殊的規(guī)則:雖然聯(lián)機(jī)語法可以引用SRGF的特殊規(guī)則(NULL,VOID,GARBAGE),但是VoiceXML并不支持<grammar>元素引用特殊的規(guī)則(見SRGS的2.2.3節(jié))。因?yàn)闆]有任何句法支持這種形式,因此也不會(huì)產(chǎn)生任何錯(cuò)誤。 |