2

音声認識で特定の文法を機能させようとしています。

私の文法の定義は次のとおりです。

<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コールバックで値を抽出しようとすると、最後の1桁しか話されません。

    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()

「ツー・ワン・ワン・セブン」と言うと、[「数字」]の数字は7だけです。同様に、「フォー・ファイブ」と言うと、返される数字は5だけです。

フライト番号の一部である、話されているすべての番号を抽出するにはどうすればよいですか?

また、「フォーファイブ」と「フォーティファイブ」の両方を簡単に認識できるようにするためにロードできる秘密の内部文法はありますか?

4

1 に答える 1

2

最後の「item」要素を次のように置き換えるだけです。

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

これにより、認識されたすべての数字がに連結されout.Numberます。

2番目の質問に関しては、残念ながらそのような「秘密の内部文法」はありません。自分でコーディングする必要があります。

于 2012-09-20T02:11:35.183 に答える