我想建立我的语法来接受多个数字。当我重复这个数字,比如说“二十一”时,它有一个错误。所以我不断地减少代码来发现问题。我找到了语法生成器的以下代码:

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

现在当我念“一个一”的时候,它还是给了我一个例外
当我在google上搜索它时,它指出这是我代码之外的一个异常,我想知道这是microsoft.speech dll中的一个错误还是我遗漏了一些东西
编辑1:
我对代码进行了修改,并将其识别为异步,如下所示:
sre.RecognizeAsync(RecognizeMode.Multiple);

而不是
sre.Recognize();

现在,当我说“21”时,例如,它得到了一个异常:
base={“规则'root'中重复的语义键'op1'。}
我知道问题出在语法上,但我确实为op1重复了一遍。我错过了什么?是吗?

最佳答案

最后我用识别出的文本自己解析
在里面

void sre_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)

我分析了识别的字符串:
e.Result

而不是
recoResult.Semantics["op1"].Value.ToString())

当.semantics对象抛出上述异常时。
我真的很想知道解决办法,如果有人有经验的话

07-24 09:55