vxml:定义具有等效输入的语法

时间:2010-07-07 17:10:07

标签: grammar voice-recognition vxml voicexml

我正在使用基于TellMe的引擎。我已经看过语法的例子,用户可以说一些被认为是相同的不同的东西。但是,我见过的所有例子都是用于内联语法(不能使用vxml引擎使用)。我想知道如何更改我的.grxml文件来执行此操作。这是文件:

<?xml version="1.0"?>
<!-- created by Matthew Murdock. Grammars for speech rec menus -->
<grammar xmlns="http://www.w3.org/2001/06/grammar" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/06/grammar      http://www.w3.org/TR/speech-grammar/grammar.xsd" xml:lang="en" version="1.0" mode="voice" scope="dialog" tag-format="semantics/1.0.2006">
   <rule id="keep">
      <one-of>
         <item>exit</item>
         <item>exit the system</item>
         <item>another</item>
         <item>another mailbox</item>
         <item>play</item>
         <item>play back</item>                      
      </one-of>
   </rule>
</grammar>

而不是有6个项目,我希望有3个项目,每个项目有两个可能的话语。关于我如何做到这一点的任何想法?

3 个答案:

答案 0 :(得分:2)

更紧凑的形式:

  <rule id="exit">
    exit <item repeat="0-1">the system</item>
    <tag>out.result = "exit"</tag>
  </rule>
  <rule id="play">
    play <item repeat="0-1">back</item>
    <tag>out.result = "play"</tag>
  </rule>

答案 1 :(得分:0)

您想要的答案在SISR规范中,该规范提供了将意义附加到输入路径的机制。重写你的例子:

<?xml version="1.0"?>
<grammar xmlns="http://www.w3.org/2001/06/grammar" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/06/grammar      http://www.w3.org/TR/speech-grammar/grammar.xsd" xml:lang="en" version="1.0" mode="voice" scope="dialog" tag-format="semantics/1.0-literals">
   <rule id="keep">
      <one-of>
       <item>
        <one-of>
         <item>exit</item>
         <item>exit the system</item>
        </one-of>
        <tag>exit</tag>
        </item>

       <item>
        <one-of>
         <item>another</item>
         <item>another mailbox</item>
        </one-of>
        <tag>another</tag>
       </item>

       <item>
        <one-of>
         <item>play</item>
         <item>play back</item>                      
        </one-of>
        <tag>play</tag>
       </item>
      </one-of>
   </rule>
</grammar>

要了解的几件事:

  • 我选择了文字标签格式(注意语法元素的tag-format属性)。它也可以使用“semantics / 1.0”实现,标签的内容看起来像:out =“exit”;
  • TellMe标记格式值可能需要不同,但是development guide表示它们符合标准。
  • 一旦你有了它的工作,不要犹豫,创建填充语法(在SRGS说,规则)。填充规则将是没有任何SI(没有标记元素)的规则,并且包含人们添加到响应中的常用短语。例如,可以在语法结尾处添加的尾随规则:
      </one-of>
      <item repeat="0-1"><ruleref uri="#trailing"/></item>
   </rule>

   <rule id="trailing>
      <one-of>
         <item>please</item>
         <item>thank you</item>

      </one-of>
   </rule>

</grammar>

这将支持更自然的响应类型。根据您的呼叫基数,这可能重要也可能不重要。填充语法可能非常大,但往往是高度可重用的。您也可以在输入开头添加填充符。在富语音应用程序中,调优过程中最重要的收获包括更新语法以包含调用者所说的实际短语与开发人员或VUI设计者所认为的语言。

答案 2 :(得分:0)

我明白了。我改变了我的语法,看起来像这样:

<?xml version="1.0"?>
<grammar xmlns="http://www.w3.org/2001/06/grammar" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/06/grammar      http://www.w3.org/TR/speech-grammar/grammar.xsd" xml:lang="en" version="1.0" mode="voice" scope="dialog" tag-format="semantics/1.0-literals">
   <rule id="keep">
      <one-of>
         <item><ruleref id="#exit"/></item>
         <item><ruleref id="#play"/></item>
      </one-of>
   </rule>
   <rule id="exit">
      <one-of>
         <item>exit</item>
         <item>exit the system</item>
      </one-of>
      <tag>out.result = "exit"</tag>
   </rule>
   <rule id="play">
      <one-of>
         <item>play</item>
         <item>play back</item>
      </one-of>
      <tag>out.result = "play"</tag>
   </rule>
</grammar>

然后,回到我的脚本而不是将我的操作基于callerInput(<field>标签中指定的变量),我将它们基于callerInput $ .interpretation,它包含xml,包含我指定的任何内容。在语法的<tag>元素中。

我认为根据“解释”而不是调用者的文字输入进行操作是有意义的。

注意:因为我们正在使用自己的vxml引擎,所以我们能够创建一个从xml中提取解释值的方法。