SemanticResultKey 构造函数

定义

构造一个 SemanticResultKey 实例并将项与语法组件关联。

重载

SemanticResultKey(String, GrammarBuilder[])

分配一个语义密匙给一个或多个 GrammarBuilder 对象,用于创建语音识别语法。

SemanticResultKey(String, String[])

分配一个语义密匙给一个或多个 String 实例,用于创建语音识别语法。

注解

SemanticResultKey 构造函数指定一个文本标记 (语义键) ,以及一组要添加到语音识别语法的语法组件。

语法组件可以指定为对象的数组 GrammarBuilder ,也可以指定为实例数组 String

如果使用语法组件进行识别,则可以使用作为语义键提供给 构造函数SemanticResultKey的文本标记来访问返回SemanticValue的 。 Value实例的属性SemanticValue将由 的定义SemanticResultKey中使用的语法组件确定。

SemanticResultKey(String, GrammarBuilder[])

Source:
SemanticResultKey.cs
Source:
SemanticResultKey.cs

分配一个语义密匙给一个或多个 GrammarBuilder 对象,用于创建语音识别语法。

public:
 SemanticResultKey(System::String ^ semanticResultKey, ... cli::array <System::Speech::Recognition::GrammarBuilder ^> ^ builders);
public SemanticResultKey (string semanticResultKey, params System.Speech.Recognition.GrammarBuilder[] builders);
new System.Speech.Recognition.SemanticResultKey : string * System.Speech.Recognition.GrammarBuilder[] -> System.Speech.Recognition.SemanticResultKey
Public Sub New (semanticResultKey As String, ParamArray builders As GrammarBuilder())

参数

semanticResultKey
String

要用于作为语义关键访问 SemanticValue 与参数指定的对象 GrammarBuilder关联的实例 builders 的标记。

builders
GrammarBuilder[]

将与可用 semanticResultKey 中定义的标记访问的 SemanticValue 对象相关联的语法组件的数组。

示例

以下示例创建 一个 Grammar ,用于识别格式为“我的密码为...”的密码输入,其中实际输入与通配符匹配。

通配符由 SpeechRecognizer 键值为“Password”的 标记。 处理程序 SpeechRecognized 检查是否存在此标记,获取密码的音频输入,并验证密码。

private void pwdGrammar()
{
  GrammarBuilder pwdBuilder = new GrammarBuilder("My Password is");
  GrammarBuilder wildcardBuilder = new GrammarBuilder();
  wildcardBuilder.AppendWildcard();
  SemanticResultKey wildcardKey= new SemanticResultKey("Password", wildcardBuilder);
  pwdBuilder+=wildcardKey;
  Grammar grammar = new Grammar(pwdBuilder);
  grammar.Name = "Password input";

  grammar.SpeechRecognized +=
    delegate(object sender, SpeechRecognizedEventArgs eventArgs)
    {
      SemanticValue semantics = eventArgs.Result.Semantics;
      RecognitionResult result=eventArgs.Result;

      if (!semantics.ContainsKey("Password"))
      {
        SpeechUI.SendTextFeedback(eventArgs.Result, "No Password Provided", false);
      }
      else
      {
        RecognizedAudio pwdAudio = result.GetAudioForWordRange(
                  result.Words[3],
                  result.Words[result.Words.Count - 1]);
                  MemoryStream pwdMemoryStream = new MemoryStream();
                  pwdAudio.WriteToAudioStream(pwdMemoryStream);
        if (!IsValidPwd(pwdMemoryStream))
        {
          string badPwd = System.IO.Path.GetTempPath() + "BadPwd" + (new Random()).Next().ToString() + ".wav";
          FileStream waveStream = new FileStream(badPwd, FileMode.Create);
          pwdAudio.WriteToWaveStream(waveStream);
          waveStream.Flush();
          waveStream.Close();
          SpeechUI.SendTextFeedback(eventArgs.Result, "Invalid Password", false);
        }
      }
    };

  grammar.Enabled = true;
  _recognizer.LoadGrammar(grammar);
  UpdateGrammarTree(_grammarTreeView, _recognizer);

}

注解

由于隐式转换, builders 参数还支持 SemanticResultValueSemanticResultKeyChoicesString 对象。 有关隐式转换的详细信息,请参阅 Implicit

执行识别操作时, GrammarBuilder 参数中 builders 提供的对象被视为顺序。 例如,如果使用以下内容 SemanticResultValue 构造 , Grammar则识别引擎的输入必须按顺序包含要识别的单词“快速棕色狐狸”。

SemanticResultKey stringTest=new SemanticResultKey(
    "stringTest", new GrammarBuilder[] {
    new GrammarBuilder("the"),
    new GrammarBuilder("quick"),
    new GrammarBuilder("brown"),
    new GrammarBuilder("fox")});

参数 semanticResultKey 包含用于访问 SemanticValue 可能返回的 的 标记。

ValueSemanticValueGrammarBuilder 参数提供的builders实例确定。

GrammarBuilder如果 对象不包含 的定义实例SemanticResultValue,则 的SemanticValuenull值为 。

GrammarBuilder如果 参数中builders提供的对象提供的未标记 (与识别逻辑使用的对象) SemanticResultValue实例不关联SemanticResultKey,则 的SemanticResultValue实例将定义Value生成的 的属性SemanticValue

参数指定的 对象中GrammarBuilder应有一个且只有一个未标记SemanticResultValuebuilders实例。 如果未标记 SemanticResultValue 的多个实例与 相关联, SemanticResultKey则每个实例都将尝试设置在识别结果中生成的 的值 SemanticValue 。 不允许这样做,并且识别器在尝试使用 Grammar 此类 SemanticResultKey 实例创建的 时会生成异常。

SemanticResultValue参数所指定builders且已与另一个SemanticResultKey参数关联的 对象中包含的 GrammarBuilder 实例对当前SemanticResultKey实例没有影响。

适用于

SemanticResultKey(String, String[])

Source:
SemanticResultKey.cs
Source:
SemanticResultKey.cs

分配一个语义密匙给一个或多个 String 实例,用于创建语音识别语法。

public:
 SemanticResultKey(System::String ^ semanticResultKey, ... cli::array <System::String ^> ^ phrases);
public SemanticResultKey (string semanticResultKey, params string[] phrases);
new System.Speech.Recognition.SemanticResultKey : string * string[] -> System.Speech.Recognition.SemanticResultKey
Public Sub New (semanticResultKey As String, ParamArray phrases As String())

参数

semanticResultKey
String

要用于访问与由 phrases 参数指定的对象 String 相关联的 SemanticValue 实例的标记。

phrases
String[]

一个或多个 String 对象,其连接文本将与使用定义在 semanticResultKey 标记可访问的 SemanticValue 对象关联。

示例

以下示例从GrammarBuilder使用 SemanticResultKey的对象创建 Grammar ,该对象由 对象数组String定义。

使用 Grammar 创建的 识别引擎将识别短语“颜色红绿蓝零”。 识别返回的 RecognizedPhrase 的语义将包含 SemanticValue 具有 Value “红色绿色蓝色”的 。 可以使用“代码”标记访问 SemanticValue

SemanticResultValue("zero", 5)由于 追加到 ,GrammarBuilder因此 中的RecognizedPhraseSemanticValue对象的值将为 5。

private void keyTest()
{
  // Say "color red green blue zero"
  GrammarBuilder gb = new GrammarBuilder("color") +
                        new SemanticResultKey("code",
                          (new string[] {"red", "green", "blue"})) +
                        new SemanticResultValue("zero", 5);
  Grammar g = new Grammar(gb);
  g.Name = "keyTest";
  _recognizer.LoadGrammar(g);
}

注解

执行识别操作时, String 参数中使用的 phrases 对象被视为顺序对象。 例如,如果使用以下内容 SemanticResultValue 构造 , Grammar则识别引擎的输入必须按顺序包含要识别的单词“快速棕色狐狸”。

SemanticResultKey stringTest=new SemanticResultKey("stringTest",
                                new string[] {
                                               "the",
                                               "quick",
                                               "brown",
                                               "fox"});

参数 semanticResultKey 确定用于访问 SemanticValue 可能返回的 的键。

如果使用包含语义键的 对象和字符串对象的数组来构造 GrammarGrammarBuilderValueSemanticValue则识别操作生成的 将是用于识别的字符串。 在前面的示例中,这意味着 Value 将是“快速棕色狐狸”。

适用于