You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

System.Speech语法使用顺序及识别引擎语法加载优先级咨询

在System.Speech中语法的使用顺序及优先级说明

1. 语法的基本使用流程

在System.Speech里搭建语音识别的语法体系,通常是按以下步骤推进的:

  • 构建语法规则:简单场景用GrammarBuilder快速拼接规则就行,复杂需求(比如带语义映射、规则嵌套/引用)可以用SrgsDocument来创建结构化语法。
  • 生成Grammar实例:把你做好的语法规则包装成Grammar对象,还能顺便给它设置名称、优先级这类属性。
  • 加载到识别引擎:调用SpeechRecognitionEngine.LoadGrammar()或LoadGrammarAsync()方法,把Grammar实例加入引擎的语法集合中。
  • 启动识别流程:先给引擎设置输入源(比如SetInputToDefaultAudioDevice()用默认麦克风),再启动RecognizeAsync()这类识别方法。
  • 匹配与结果触发:当有语音输入时,引擎会用已加载的语法逐一匹配内容,一旦匹配成功就会触发SpeechRecognized事件,返回对应的识别结果。

2. 多语法的优先级顺序

当你给识别引擎添加多个语法时,优先级遵循下面的规则:

  • 若未手动设置Grammar.Priority属性,那么最后添加的语法优先级更高。也就是说,如果一段语音同时符合多个已加载的语法规则,引擎会优先返回最后添加的那个语法的匹配结果。
  • 要是需要自定义优先级,直接给Grammar实例的Priority属性赋值即可——数值越高,优先级越高。比如把核心功能的语法Priority设为2,其他辅助语法设为1,那不管添加顺序如何,核心语法都会被优先评估。

举个简单的代码示例:

// 创建两个测试语法
var noteGrammar = new Grammar(new GrammarBuilder("打开记事本"));
var calcGrammar = new Grammar(new GrammarBuilder("打开计算器"));

// 先加载记事本语法,再加载计算器语法
engine.LoadGrammar(noteGrammar);
engine.LoadGrammar(calcGrammar);

// 若存在同时匹配两者的输入场景(示例中不会,但逻辑上),calcGrammar的结果会被优先返回

手动设置优先级的示例:

noteGrammar.Priority = 2;
calcGrammar.Priority = 1;
// 先加载计算器语法,再加载记事本语法
engine.LoadGrammar(calcGrammar);
engine.LoadGrammar(noteGrammar);
// 此时noteGrammar优先级更高,哪怕后加载,也会优先返回它的匹配结果

内容的提问来源于stack exchange,提问作者Stephen Walter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:53:34