我想建立我的语法以接受多个数字。当我重复这个数字时会有一个错误,比如说“二十一”。所以我不断减少我的代码以找到问题。我为语法构建器提供了以下代码:
string[] numberString = { "one" };
Choices numberChoices = new Choices();
for (int i = 0; i < numberString.Length; i++)
{
numberChoices.Add(new SemanticResultValue(numberString[i], numberString[i]));
}
gb[1].Append(new SemanticResultKey("op1", (GrammarBuilder)numberChoices), 1, 2);
现在,当我发出&#34;一个&#34;它仍然给我这个例外
当我用Google搜索时,它声明这是我的代码之外的例外,我想知道这是Microsoft.Speech dll中的错误还是我遗漏了某些内容
修改1:
我玩了代码,并将识别为Async,如下所示:
sre.RecognizeAsync(RecognizeMode.Multiple);
而不是
sre.Recognize();
现在当我说&#39;二十一时,例如它会得到这个例外: base = {&#34;重复的语义键&#39; op1&#39;在规则&#39; root。&#34;}
我知道问题出在语法上,但我确实重复了#op;&#39;。我错过了什么?
答案 0 :(得分:1)
我最后使用识别的文本自己解析它 在
void sre_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
我解析了识别的字符串:
e.Result
而不是
recoResult.Semantics["op1"].Value.ToString())
因为.Semantics对象抛出上面提到的异常。
我真的想知道解决方案,如果有人有经验的话