3

我正在为将使用 Microsoft 的语音 SDK 进行语音识别的软件构建 GRXML 语法。

标签必须遵循标签格式“properties-ms/1.0”,我没有找到任何具体的文档(除了没有回答我问题的 MSDN)。

我主要关心的是标记数字,以便将识别的文本(如“一二三四”)转换为数字“1234”。这是想法:

<rule id="CODE">
    <item repeat="4">
        <ruleref uri="#DIGIT"/>
    </item>
</rule>

<rule id="DIGIT">
    <one-of>
        <item>
            one
            <tag>"1"</tag>
        </item>
        <item>
            two
            <tag>"2"</tag>
        </item>
        <item>
            three
            <tag>"3"</tag>
        </item>
        <item>
            four
            <tag>"4"</tag>
        </item>
        <item>
            five
            <tag>"5"</tag>
        </item>
    </one-of>
</rule>

这没有串联,但至少我得到了每个数字的语义值。

但是,当我对数字使用这样的规则时,程序在运行时会中断,抛出一个异常,指出“规则'CODE'中的语义值已经设置并且无法更改。”。

如何使语义标记与 DIGIT 规则的“重复”一起工作?我不希望将我的 CODE 规则分成 4 个相同的项目,每个项目都有不同的语义键:在我的语法中还有其他情况,其中位数不固定。

此外,有没有办法连接标签以便为数字提供一般语义含义。

4

2 回答 2

1

一个可能的解决方案是这样的

<rule id="numbers">
  <item repeat="4">
   <ruleref uri="#numbers_1to4"/>
   <tag>out += rules.numbers_1to4;</tag> 
  </item>
</rule>


<rule id="numbers_1to4">
    <one-of>
      <item>one<tag>out = "1"</tag></item>
      <item>two<tag>out = "2"</tag></item>
      <item>three<tag>out = "3"</tag></item>
      <item>four<tag>out = "4"</tag></item>
     </one-of>
  </rule>
于 2014-01-31T13:22:58.237 回答
0

我不熟悉tag-formatMicrosoft 语音 SDK 中使用的专有技术,但您可以通过标准的“semantics-1.0”格式来实现这一点:

<rule id="CODE">
   <tag>out.CODE = &quot;&quot;;</tag>
   <item repeat="4">
      <ruleref uri="#DIGIT"/>
      <tag>out.CODE += rules.latest();</tag>
   </item>
</rule>


<rule id="DIGIT">
   <one-of>
      <item>
         one
         <tag>out = &quot;1&quot;;</tag>
      </item>
      <item>
         two
         <tag>out = &quot;2&quot;;</tag>
      </item>
      <item>
         three
         <tag>out = &quot;3&quot;;</tag>
      </item>
      <item>
         four
         <tag>out = &quot;4&quot;;</tag>
      </item>
      <item>
         five
         <tag>out = &quot;5&quot;;</tag>
      </item>
</one-of>

于 2011-06-13T17:26:04.127 回答