铁观音

C++编程宝典

   ::  ::  ::  ::  :: 管理 ::
  1 随笔 :: 19 文章 :: 0 评论 :: 0 Trackbacks
第三章  User Input(Grammars)
 
第一节 Speech Grammars  
 
    <grammar>元素用于提供一个语音语法:
      ·该语法指定了一系列要匹配的短语,用户可能说出这些短语用于执行一个操作或提供一些信息。
      ·对于一个要匹配的短语,该语法返回一个相应的语义解释。返回的可以是一个简单的值(例如一个字符串),一组成对的属性――值(例如年、月、日),或一个嵌套的对象(对于复杂的请求)。
    <grammar>元素适用于满足上述要求的任意的语法格式。VoiceXML平台必须至少支持一种通用的格式,即W3C SRGS的XML格式。VoiceXML平台应该支持W3C SRGS的ABNF格式。VoiceXML平台可以选择支持SRGS以外的语法格式。例如,平台可能借助<grammar>元素对PCDATA的支持来嵌入一个专有的语法,或使用src或type属性引用一个外部的语法。
    VoiceXML平台必须是一个合格的XML格式的语法处理器,如W3C SRGS中定义的。虽然这样使得平台要处理文档中定义的一个或多个“xml:lang”属性,但是并不要求平台必须是多语言的。当遇到一种不支持的语言时,平台要抛出error.unsupported.language事件,该事件在它的"_message"变量中指定了这种不支持的语言。
    SRGS的XML格式的元素
    下面是在W3C SRGS的XML格式中定义的元素,它们在VoiceXML2.0中是可用的。本文档没有重复定义这些元素,请参考W3C SRGS中的定义和例子。
元素 作用 章节链接
<grammar> XML格式语法的根元素。 4.
<meta> 等价于HTTP元内容的头部声明。 4.11.1
<metadata> XML元数据内容的头部声明。 4.11.2
<lexicon> 发音词典的头部声明。 4.10
<rule> 定义一条语法展开规则。 3.
<token> 定义一个可作为输入的词或其他实体。 2.1
<ruleref> 引用一条本地或外部定义的规则。 2.2
<item> 定义一个可选的、重复的或可能的展开项。 2.3
<one-of> 定义一组可供选择的规则展开项。 2.4
<example> 包含在一个规则定义中的元素,该元素提供了一个匹配该规则的输入的例子。 3.3
<tag> 定义一个任意的字符串,该字符串可作为该展开规则的语义解释。 2.6
表27:SRGS(XML 格式)的元素
 
一、Inline Grammars
    <grammar>元素可用于指定一个联机语法或外部语法。联机语法由<grammar>元素的内容指定,它定义了一个完整的语法:
      <grammar type="media-type" mode="voice">
         inline speech grammar
      </grammar>
    在这种情况下,有必要把内容封装在XML的CDATA段中。对于联机语法,<grammar>元素的type属性指定了一个媒体类型,该媒体类型控制着<grammar>元素内容的解释。
    下面是一个联机语法的例子,是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>
    下面这个语法和上面的效果是一样的,不过它是W3C SRGS的ABNF格式的。因为VoiceXML平台不是必须支持这种格式的,所以这种格式的语法可移植性比较差。
      <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是可选的,因为如果没有指定该属性,解释器环境会试图动态的确定它的类型(例如,使用服务器特定的媒体类型,文件扩展名或内容自检)。
    如果指定了src属性,且有一个联机语法作为该<grammar>元素的内容,则抛出error.badfetch事件。
    下面的例子引用了一个W3C SRGS的XML格式的外部语法。
      <grammar type="application/srgs+xml" src="http://www.grammar.example.com/date.grxml"/>
    下面的例子引用了一个W3C SRGS的ABNF格式的外部语法。和上面的例子的效果是一样的。
      <grammar type="application/srgs" src="http://www.grammar.example.com/date.gram"/>
 
三、Grammar Weight
    <grammar>元素的weight属性指定了该语法的权重。
      <grammar weight="0.6" src="form.grxml" type="application/srgs+xml"/>
    <grammar>元素,包括<link>、<field>和<form>元素中的,都有这个属性,语法可以是联机语法、外部语法或内置语法。
    属性weight遵循W3C SRGS中关于weight的定义。属性weight的值是一个简单的没有指数的正的浮点数。合法的格式有“n”,“n.”,“.n” 和“n.n”,其中n是一位或多位数字的序列。
    在语音识别的搜索范围内,weight是影响语法被选中的可能性的一个因素。Weight属性的值为1.0时相当于没有指定weight属性。Weight属性值大于1.0时,该语法被选中的可能性就比较大。反之,weight属性值小于1.0时,可能性就比较小。如果没有指定该属性,则所有激活的语法的可能性一样。
       <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属性,请使用<grammar>元素代替隐式语法控制weight。
    语法的weight属性值只影响语法的处理,不会直接影响到语法结果的后期处理,包括当用户的输入匹配了多个激活的语法时的语法优先权(见3.1.4节)。
    Weight属性对DTMF语法没有影响(见3.1.2节)。在<grammar>元素中,如果属性mode为dtmf时,则该<grammar>元素指定的weight属性被忽略。
      <!-- weight will be ignored -->
      <grammar mode="dtmf" weight="0.3" src="http://www.example.org/dtmf/number"/>
    恰当的weight值是很难确定的。猜测的weight值对于提高识别的性能没有任何帮助。有效的weight值是通过对自然语言和特定平台上的原始数据长期研究得到的。此外,语法的weight是依赖于平台的。注意,不同的ASR引擎对于相同的weight值可能有不同的理解。因此,在一个特定平台上工作得好好的weight值在其他的平台上可能会得到不同的结果。
 
四、Grammar Element
    <grammar>元素从W3C SRGS继承的属性:
version 它定义了语法的版本号。
xml:lang 该语法的语言标识符(例如,“fr-CA”表示 加拿大法语)。如果缺省,将从文档中继承。
mode 其值为voice或dtmf。说明该语法是匹配语音的或是匹配 DTMF 的输入。
root 定义该语法的根规则。
tag-format 定义该语法中所有的<tag>元素的内容格式。
xml:base 定义一个基本URI,用于解析该语法中的相对URI。该属性的优先权高于<vxml>元素中的相应属性。如果缺省,则从文档中继承。
表28:<grammar>元素从SRGS中继承的属性
    上述属性的用法和解释由以下几个方面决定:
      1、SRGS的XML格式的联机语法:由SRGS决定。SRGS规定属性version是必须的,且它的值为"1.0";属性root是必须的,且它的值确定了要激活哪一条规则;其他的属性是可选的。
      2、SRGS的ABNF格式的联机语法:平台必须忽略上述任何指定的属性。
      3、SRGS的XML和ABNF格式的外部语法:平台必须忽略上述任何指定的属性。
      4、所有其他的语法类型:任何指定的属性的用法和解释是依赖于平台的。
    <grammar>元素中VoiceXML2.0增加的属性:
src 指定一个URI。如果引用一个外部语法,该属性指定了该语法的位置和该语法中的一个规则名(可选的)。该URI被作为一个规则引用来解释,详见SRGS的2.2节。但是,并不是所有的规则引用的形式都被VoiceXML允许。规则引用的能力将在后面详细描述。
scope 值为“document”或“dialog”。如果为“document”,则该语法在当前文档(和相关的应用叶文档)所有的dialog中都是激活的。如果值为“dialog”,则该语法只在该form中激活。如果缺省,则该语法的作用域由它的父元素决定。关于语法作用域和优先权的描述见3.1.3节。
type 该语法的媒体类型。该属性值的优先权高于其他可能存在的媒体类型(例如HTTP或RTSP交换中的“Content-type”,或文件扩展名)。如果该属性缺省,解释器环境将试图动态的确定它的媒体类型(例如,使用服务器特定的媒体类型、文件扩展名或内容自检)。如果语法的内容包含在该元素中,且没有指定该属性,就假定该媒体类型为一个XML语法。 如果该语法源没有包含选定媒体类型的正确的内容,当使用该语法时,抛出一个错误W3C的XML格式语法暂定的媒体类型为“application/srgs+xml”,ABNF格式语法暂定的媒体类型为“application/srgs”。
weight 指定该语法的weight。见3.1.1.3节。
fetchhint 见6.1节。默认为grammarfetchhint property。
fetchtimeout 见6.1节。默认为fetchtimeout property。
maxage 见6.1节。默认为grammarmaxage property。
maxstale 见6.1节。默认为grammarmaxstale property。
表29:<grammar>元素中VoiceXML2.0增加的属性
      必须指定属性src或一个联机语法(不是指定两个),否则会抛出一个error.badfetch事件。
    VoiceXML 2.0也扩展可<grammar>元素,允许在PCDATA中嵌入各种格式的语法,包括W3C SRGS的XML格式。
    当引用一个外部语法时,src属性值为一个URI,它指定了该语法的位置。URI可以带一个段,指定规则名。SRGS的2.2节定义了规则引用的几种形式。下面是VoiceXML中<grammar>元素允许的形式。
      · 在外部语法中引用一个规则:src属性的值是一个绝对或相对的URI,该URI带有一个段,它执行一个外部语法的相应规则。这种形式的规则引用遵循SRGS 2.2节中的定义。如果该URI不能被获取,或该规则名不存在,或该规则名在指定的语法中不是一个public(可激活的)规则,则抛出error.badfetch。
      · 引用外部语法的根规则:src属性的值是一个绝对或相对的URI,它引用了一个外部语法,但是没有指定一个规则名。这种形式隐式的引用了该语法的根规则,正如SRGS 2.2节中的定义。如果该URI不能被获取,或如果该语法不能被它得root引用(见SRGS的4.7节),则抛出一个error.badfetch事件。
      · 引用本地语法:只包含段的URI是不被允许的(见SRGS2.2.1中的定义)。如果src属性的值为一个段, 抛出一个error.semantic事件。
      · 引用特殊的规则:虽然联机语法可以引用SRGF的特殊规则(NULL,VOID,GARBAGE),但是VoiceXML并不支持<grammar>元素引用特殊的规则(见SRGS的2.2.3节)。因为没有任何句法支持这种形式,因此也不会产生任何错误。

第二节 DTMF Grammars  
 
    <grammar>元素也可以用来提供DTMF语法。
      ·它指定了一组按键,用户可以使用这些按键执行一个操作或提供一些信息。
      ·对于匹配的DTMF输入,它可以返回一个相应的语义解释。返回的可以是一个简单的值(例如一个字符串),一组成对的属性――值(例如年、月、日),或一个嵌套的对象(对于复杂的请求)。
    VoiceXML平台必须支持XML格式的DTMF语法,以提高程序的可移植性,如SRGS中的附录D定义的。
    <grammar>元素的mode属性用于区分DTMF语法和语音语法。<grammar>元素的xml:lang属性在DTMF语法的处理中无效的。在其他的方面,对DTMF语法和语音语法的处理都是一样的,包括定义联机语法,或引用外部语法。对于处理媒体类型,作用域和获取也是一样的。
    下面是一个简单的XML格式的DTMF联机语法,它只接受按键“1 2 3”或“#”。
      <grammar mode="dtmf" version="1.0" root="root">
         <rule id="root" scope="public">
           <one-of>
             <item>  1 2 3 </item>
             <item> # </item>
           </one-of>
         </rule>
      </grammar>
 
第三节 Scope of Grammars  
 
    input item的语法的作用域为包含该input item的元素。即只有该input item在FIA的选定阶段被选定时,它包含的语法才会被激活。包含在input item中的<grammar>不能指定scope属性,否则抛出error.badfetch事件。
    <link>元素中的语法的作用域为包含该<link>元素的元素。因此,如果该<link>元素是在应用根文档中,则该语法在该应用所有加载的文档中都是激活的。包含在<link>元素中的<grammar>不能指定scope属性,否则抛出error.badfetch事件。
    <form>元素的语法的作用域为dialog。因此只有用户在该form中时,语法才是激活的。如果此时<grammar>元素的scope属性值为document,则当用户在该文档中时,该语法也是激活的。如果<grammar>元素的scope属性值为document,且该文档为应用根文档,则无论用户在该应用加载的哪一个文档中,这些语法都是激活的。有两种方式可以使form中的语法的作用域为document:一种是指定<form>元素的scope属性为document,另一种是指定<grammar>元素的scope属性为document。如果两个元素都指定了scope属性,则以<grammar>元素中指定的为准。
    <menu>元素中的语法默认作用域为dialog,只有用户在该<menu>元素中,它的语法才被激活。但是也可以指定这些语法的作用域为document,使它们在整个文档中都是激活的。如果该文档是应用根文档,则语法在该应用所有加载的文档中都是激活的。在<choice>元素中的<grammar>元素不能指定它的scope属性,否则抛出一个error.badfetch事件。
    有时候,form可能需要一些语法在整个文档中都激活,而另一些语法只有在该form中激活,这样做的目的是最大限度的减少语法叠交的问题。如果<grammar>元素的scope属性值和form的scope属性值不同,应该单独指定自己的scope属性值。
      <?xml version="1.0" encoding="UTF-8"?>
      <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.w3.org/2001/vxml
               http://www.w3.org/TR/voicexml20/vxml.xsd">
        <form scope="document">
           <grammar type="application/srgs">
              #ABNF 1.0;
              language en-gb;
              mode voice;
              root $command;
              public $command = one | two | three;
          </grammar>
          <grammar type="application/srgs" scope="dialog">
              #ABNF 1.0;
              language en-gb;
              mode voice;
              root $command2;
              public $command2 = four | five | six;
          </grammar>
        </form>
      </vxml>
 
第四节 Activation of Grammars  
 
    当解释器访问一个input item,等待输入的时候,以下的语法被激活:
      ·该input item的语法,包括该input item包含的<link>元素中的语法。
      ·该form的语法,包括该form包含的<link>元素中的语法
      ·该文档包含的<link>元素中的语法,及该文档的<menu>元素和<form>元素中scope属性为document的<grammar>元素的语法。
      ·该应用根文档包含的<link>元素中的语法,及该应用根文档的<menu>元素和<form>元素中scope属性为document的<grammar>元素的语法。
      ·平台定义的默认事件处理的语法,例如help、exit和cancel。
    如果一个输入匹配了多个激活的语法,则语法的优先权按照上面定义的顺序。如果一个输入匹配了多个激活的同一优先权的语法,则语法的优先权由文档顺序决定。当平台期待一个输入却没有任何语法激活时,平台必须抛出一个error.semantic事件,该事件在所执行的元素的环境中抛出。menu中的语法激活机制和form中的一样(见2.2.1节)。
    如果form item的modal属性为true,则在等待输入的时候,除了该form item的语法外,其他的语法都是失效的。如果该输入匹配了另外一个form或menu中的语法,而不是当前form或menu,则控制交给那个被匹配的语法所在的form或menu,且当前form或menu中的数据丢失。
    Inputmodes property不会影响语法的激活,例如,如果inputmodes property要求输入只能是voice时,DTMF语法也会被激活,只是不能被匹配。

第五节 Semantic Interpretation of Input  
 
    SRGS定义了一个<tag>元素,它包含的内容可作为语音语法或DTMF语法的语义解释(见SRGS的2.6节)。
    SISR(The Semantic Interpretation for Speech Recognition specification)为<tag>元素描述了一个句法和语义,并说明了怎样使用被匹配的规则中<tag>元素的内容来计算用户输入的语义解释。有关于把语义解释映射到VoiceXML中的描述见3.1.6节。

第六节 Mapping Semantic Interpretation Results to VoiceXML forms  
 
    SRGS语法返回的语义解释必须映射到一个或多个VoiceXML ECMAScript变量中。映射form级别和field级别的语义解释的方法有少许不同,不同之处见下一节。使用推荐的NLSML(Natural Language Semantics Markup Language)或SISR类似ECMAScipt的输出的语义解释格式对本次讨论没有任何影响。为了本次讨论方便,我们假定识别器返回的实际的识别结果在application.lastresult$.interpretation中被完整的映射成类似ECMAScript格式(见5.1.5节)。
    有可能语法被匹配了,但没有返回一个语义解释。在这种情况下,平台将使用该短语的原始文本串作为语义结果。否则,就认为该语义解释由一个简单的值组成来处理。
    每个input item都由一个相应的slot名(只可能出现在<field>元素中),用于提取完整的语义解释中大的相应部分。如果有指定slot属性的话,slot名就是该slot属性的值。否则slot名为该input item的name属性的值。如果name和slot属性都没有指定,则该slot名为undefined。
    Slot名用于在FIA的处理阶段确定一个input item是否被匹配了。当该slot名和语义结果顶层的属性一样时,或slot名用于选定一个子属性时,即为该input item匹配。语义结果中值为undefined(ECMAScript的undefined)的属性即为不匹配。同样的值为undefined的slot名也为不匹配。3,1,6,3节给出了例子。
    下一小节谈论的是form级别和field级别的结果的映射。也简要的讨论了其他的问题。如NL语义到ECMAScript的映射,ASR结果到VoiceXML的跳转的信息,语义结果和VoiceXML中匹配出错的处理。
 
一、Mapping form-level results
    form级别的语法产生一个form级别的语义结果,该结果可以同时填充多个input item。用户的输入匹配了一个激活的form级别的语法,这种情况随时都可以出现,不管是在<initial>元素中,还是在一个input item中。
    设想一下“I would like a coca cola and three large pizzas with pepperoni and mushrooms.”这个句子的语义结果。该语义解释结果的结构如下,并被copy到application.lastresult$.interpretation中:
      {
        drink: "coke"
        pizza: {
             number: "3"
             size: "large"
             topping: [
                     "pepperoni"
                     "mushrooms"
                  ]
             }
      }
    下表说明了来自form级别的语法的结果在该form中怎样被赋给各个<field>元素。注意,所有能被该解释填充的input item是同时被填充的。Input item变量原来的值将被覆盖。这些input item将在FIA的处理阶段由<field>元素处理(见2.4节和附录C)。
VoiceXML field Assigned ECMAScript value Explanation
1、<field name="drink"/> "coke" 结果的顶层属性默认的赋给一个<field>元素,该<field>元素的name属性和该结果的顶层属性相匹配。
2、<field name="..." slot="drink"/> "coke" 如果指定了slot属性,则他代替name属性去选定该结果的属性。
3、<field name="pizza"/> --or--
<field name="..." slot="pizza"/>
{number: "3", size: "large", topping: ["pepperoni", "mushroom"]} 上面的例子选择了一个单纯的值,<field>的name和slot属性也可以用同样的方法选定一个ECMAScript对象变量。然而,在应用中必须要处理检查该对象的组成,这显然不是VoiceXML FFA(form-filling algorithm)的优势。在FFA中,语义结果中没有指定slot的,将不会自动的被提示。在服务器能够处理结构化对象的情况下,这是没有问题的。换句话说,使用下面描述的方法,对应用来说会更好。
4、<field name="..." slot="pizza.number"/>
<field name="..." slot="pizza.size"/>
"3"
"large"
Slot用于选定该结果的一个子属性。这种方法把该结果分配到几个<field>元素中。
5、<field name="..." slot="pizza.topping"/> ["pepperoni", "mushroom"] 被选定的属性可以是一个复合的对象。
表30:Form-level Grammar Assignments
    这些例子可以用以下几条规则来解释,这些规则是直接由VoiceXML1.0的name和slot属性扩展得到的,且与之兼容。
      1、<field>的slot属性是一个非常受限制的ECMAScript表达式,它选定结果中的某部分赋给该元素。除了能够选定结果的顶层元素外,该属性也能使用由点隔开的元素/属性名选定嵌套结构中任意级的属性。如使用“pizza.number”和“order.pizza.topping”。注意,如果几个<field>元素的slot属性值一样的话,一个特定的slot值有可能填充多个<field>元素。
      2、如果在结果中,以一个<field>元素的slot(或name)属性命名的那一部分没有一个给定的值,则不改变该field item的值。
 
二、Mapping a field-level result
    在一个input item中指定的语法产生一个field级别的语义解释结果,该结果只可以填充包含该语法的input item。这些语法只有在FIA访问该input item时才是激活的。这很有用。例如在引导型的dialog中,每个input item会单独的给用户播放提示语。
    Field级别的语义解释结果以下面的方式填充相应的input item:
      1、如果该语义解释是一个简单的结果,则直接赋给该input item变量。
      2、如果该语义解释是一个结构化的结果,且该slot名和该结果的一个属性匹配,则将该属性的值赋给相应的input item变量。
      3、在其他的情况下,整个语义解释的结果都赋给相应的input item变量。
    这个处理过程允许input item从语义解释结果中提取一个特定的属性。和<filled>元素集合使用可以取得更好的控制效果。
       <field name="getdate">
         <prompt>On what date would you like to fly?</prompt>
										
         <grammar src="http://server.example.com/date.grxml"/> 
         <!-- this grammar always returns an object containing
             string values for the properties day, month, and year -->
										
          <filled>
            <assign name="getdate.datestring" expr="getdate.year + getdate.month + getdate.day"/>
          </filled>
       </field>
 
三、Additional examples
    一个匹配的slot名允许input item提取语义解释中相应的部分。
      application.lastresult$.interpretation =
      { drink: { size: 'large', liquid: 'coke' }
         pizza: { number: '3', size: 'large', topping: ['pepperoni', 'mushroom' ] }
         sidedish: undefined
      }
    下表再次说明了当slot名匹配了结果中的一个属性时的定义:
slot name match or not?
undefined does not match
drink matches; top level property
pizza matches; top level property
sidedish does not match; no defined value
size does not match; not a top-level property
pizza.size matches; sub-property
pizza.liquid does not match
表31:Slot Name Matching
    下面的例子用于比较form级别和field级别的结果的行为:
      <?xml version="1.0" encoding="UTF-8"?>
      <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.w3.org/2001/vxml
               http://www.w3.org/TR/voicexml20/vxml.xsd">
        <form id="exampleForm">
           <grammar src="formlevel.grxml"/>
             <initial> Say something. </initial>
										
            <field name="x">
              <grammar src="fieldx.grxml"/>
            </field>
										
            <field name="z" slot="y">
              <grammar src="fieldz.grxml"/>
            </field>
        </form>
      </vxml>
    在这个例子中定义了两个input item变量,“x”和“z”,相应的slot名分别为“x”和“y”。下表描述的是,根据被识别的语法和返回的语义结果给这些变量赋值。ValueX表示属性x相应的结果值,可以是结构化的对象,也可以是简单的值。
application. lastresult$. interpretation form-level result
(formlevel.grxml)
field-level result in field x
(fieldx.grxml)
field-level result in field z
(fieldz.grxml)
= 'hello' no assignment; cycle FIA x = 'hello' z = 'hello'
= { x: valueX } x = valueX x = valueX z = { x: valueX }
= { y: valueY } z = valueY x = { y: valueY } z = valueY
= { z: valueZ } no assignment; cycle FIA x = { z: valueZ } z = { z: valueZ }
= { x: valueX, y: valueY, z: valueZ } x = valueX
z = valueY
x = valueX z = valueY
= { a: valueA,b: valueB } no assignment; cycle FIA x = { a: valueA,b: valueB } z = { a: valueA,b: valueB }
表32:Variable Assignments Depending on Grammar and Semantic Result
    在form级别,简单的结果,像字符串‘hello’,不能匹配任何input item;结构化对象给所有slot名能匹配的input item变量赋值。在field级别,简单的结果总是赋给相应的input item变量;在结构化对象中,如果存在和该input item的slot名匹配的属性,则把该对象中匹配的属性值赋给相应的input item,否则把整个语义解释结果赋给该input item。
 
四、Additional issues
    1、把NL语义映射到ECMAScript:如果使用NLSML,,需要定义NLSML表示法到ECMAScipt 对象的映射。由于这两种表示法有相近的嵌套结构,映射起来还算简单。NL语义技术规范详细的讨论了如何映射。
    2、把ASR的语义结果转换到VoiceXML:当所有相关的语义求值完毕,W3C ASR语法的语义标识符就是元素的rule属性值。另外,根规则(和所有的non-terminals一样)有一个相应的"text"变量,该变量包含了由non-terminal控制的utterance中的一组token。在把ASR结果转换到VoiceXML中的过程中,VoiceXML平台不仅要根据root属性值填充VoiceXML中相应的field,还要填充这些field的影子变量。该field的影子变量name$.utterance和ASR根规则的text变量的值应该要一样。平台还要根据ASR平台提供的信息实例化影子变量name$.confidence的值,同时根据所处理的DTMF或语音语法实例化影子变量name$.inputmode的值。除了平台用于设置整个utterance解释的confidence的application.lastresult$.confidence外,最后平台还有把上面提到的那些信息填充到application.lastresult$(见5.1.5节。特别的,“application.lastresult$.utterance”,“application.lastresult$.inputmode”和 “application.lastresult$.interpretation”)。
    3、语义结果和VoiceXML field之间的不配对:语义结果到VoiceXML的映射取决于ASR语法和VoiceXML标记之间严格的配对。由于当前的框架协议不能保证语法和相应的VoiceXML dialog之间的一致性,因此,开发者的疏忽可能导致出现不配对。由于这些不配对的情况和某些正确的情况很难分辨,信息一致性的检查就显得格外重要。不配对的一些例子:
      ·语义结果中包含了额外的信息,使得VoiceXML没有相应的field与之配对。开发者的疏忽或使用的语法比VoiceXML应用要求的语法包含更对的信息,都可能出现这种不配对。这些额外的信息将被忽略。
      ·语义结果中没有提供VoiceXML应用期望的信息。开发者的疏忽或因用户的输入太简单而没法提供一个值给某个特定的slot,都可能出现不配对。在这种情况下,FIA继续执行,没有提供的值将单独由用户提供。如果问题是由于开发者的疏忽引起的,且该语法实际上不能识别出正确的结果,FIA将继续让用户提供该丢失的值,直到达到平台和应用规定的失败次数。
      ·最后,VoiceXML和ASR的语义结果中都提供了配对的信息,但是两者的格式不一致。例如ASR语法可能提供的是一个结构化的对象,而VoiceXML中期望的却是一个字符串。在这种情况下,平台的行为取决于对该结果的处理。例如,该结构化的对象可能被提交给服务器端的脚本,转换成一个字符串。这样,平台的行为就取决于服务器端的脚本。
    为了解决这些潜在的问题,委员会这在考虑各种方法以确保语法和VoiceXML的一致性。
posted on 2006-09-16 22:25 铁观音 阅读(967) 评论(0)  编辑 收藏 引用 所属分类: VoiceXML2.0规范