SRGS XML语法中的语义解释

时间:2011-11-04 02:51:23

标签: c# xml speech-recognition

我有以下XML语法来检测1000或2200等数字。

<rule id="rule1" scope="public">
 <one-of>
  <item>1</item>
  <item>2</item>
  <item>3</item>
 </one-of>
 <ruleref uri="#rule2"/>
</rule>

<rule id="rule2" scope="public">
 <one-of>
  <item>thousand<tag>out="000";</tag></item>
  <item>thousand 100<tag>out=100;</tag></item>
  <item>thousand 200<tag>out=200;</tag></item>
 </one-of>
</rule>

然而,当用户说例如2100时,我得到“2千100”而不是2100.看起来out = part不起作用。我在网上看过几个例子,不知道是否还需要添加其他内容才能使其正常工作。我正在使用tag-format =“semantics / 1.0”

2 个答案:

答案 0 :(得分:2)

我解决这个问题的方法是只使用一个规则并使用out.start,out.end等属性然后将它们连接起来。

<rule id="rule1" scope="public">
 <one-of>
  <item>1<tag>out.start="1";</tag></item>
  <item>2<tag>out.start="2";</tag></item>
  <item>3<tag>out.start="3";</tag></item>
 </one-of>

 <one-of> 
  <item>thousand<tag>out.end="000";</tag></item>
  <item>thousand 100<tag>out.end="100";</tag></item>
  <item>thousand 200<tag>out.end="200";</tag></item>
 </one-of>

 <tag>out=out.start+out.end;</tag>
</rule>

要从C#中检索语义值,您可以使用类似

的内容
private void sre_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
     MessageBox.Show(e.Results.Semantics.Value.ToString());
}

答案 1 :(得分:2)

Microsoft Speech SDK附带一个样本SRGS,可以很好地处理数字。例如,红衣主教&#34;规则可以处理高达1,000,000的数字。它可以在Samples目录中以各种语言提供(例如C:\ Program Files \ Microsoft SDKs \ Speech \ v11.0 \ Samples \ Sample Grammars \ en-US.grxml)。