Microsoft语音 - 识别和提取可变长度的数字

时间:2012-09-19 21:49:46

标签: c# speech-recognition sapi

我正试图在语音识别中使用某种语法。

我的语法定义如下:

<rule id="showFlight">
<example>Show me Alaska Airlines flight number 2117</example>
<example>Where is US Airways flight 45</example>
<item>
  <one-of>
    <item>show me</item>
    <item>where is</item>
  </one-of>
</item>
<item>
  <ruleref uri="#airline" />
  <tag>out.Carrier = rules.airline;</tag>
</item>
flight
<item repeat="0-1">number</item>
<item repeat="1-">
  <ruleref uri="#digit" />
  <tag>out.Number = rules.digit;</tag>
</item>
</rule>

我的问题在于最后一个 - 数字。我定义语法中可以存在1位或更多位数,这是有效的。但是当我在OnSpeechRecognized回调中提取值时,我只能说出最后一位数字。

    public override bool OnSpeechRecognized(object sender, Microsoft.Speech.Recognition.SpeechRecognizedEventArgs e)
    {
        String output = String.Format("Recognition Summary:\n" +
            "  Recognized phrase: {0}\n" +
            "  Confidence score {1}\n" +
            "  Grammar used: {2}\n",
            e.Result.Text, e.Result.Confidence, e.Result.Grammar.Name);
        Console.WriteLine(output);

        // Display the semantic values in the recognition result.
        Console.WriteLine("  Semantic results:");
        //Console.WriteLine(e.Result.Semantics["Flight"].Value);

        foreach (KeyValuePair<String, SemanticValue> child in e.Result.Semantics["ShowFlight"])
        {
            Console.WriteLine("    {0} is {1}",
              child.Key, child.Value.Value ?? "null");
        }
        Console.WriteLine();

...

或者,更直接地说:

e.Result.Semantics["ShowFlight"]["Number"].Value.ToString()

如果我说&#34;二 - 一 - 七&#34;,[&#34; Number&#34;]中的唯一数字是7.同样,如果我说&#34;四 - 五& #34;我得到的唯一数字是5。

如何提取作为航班号一部分的所有号码?

另外,是否有一个我可以加载的秘密内部语法,这将允许我识别&#34;四 - 五&#34;和#34;四十五岁&#34;容易吗?

1 个答案:

答案 0 :(得分:2)

您只需使用以下内容替换最后一个'item'元素:

  <tag>out.Number = &quot;&quot;</tag>
  <item repeat="1-">
    <ruleref uri="#digit" />
    <tag>out.Number += rules.digit;</tag>
  </item>

这会将所有已识别的数字连接到out.Number

关于第二个问题,不幸的是,没有这样的“秘密内部语法”。你必须自己编写代码。