SemanticResultKey 建構函式
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
建構SemanticResultKey的執行個體,並建立索引鍵與文法元件的關聯。
多載
SemanticResultKey(String, GrammarBuilder[]) |
指派語意索引鍵給一或多個用來建立語音辨識文法的GrammarBuilder物件。 |
SemanticResultKey(String, String[]) |
指派語意索引鍵給一或多個用來建立語音辨識文法的String執行個體。 |
備註
用於 SemanticResultKey 指定文字標記的建構函式 (語意索引鍵) 和一組要新增至語音辨識文法的文法元件。
文法元件可以指定為 物件的陣列 GrammarBuilder ,也可以指定為 實例的 String 陣列。
如果在辨識中使用文法元件,您可以使用提供給 建構 SemanticResultKey 函式的文字標記做為語意索引鍵來存取傳回 SemanticValue 的 。 實例 Value 的 SemanticValue 屬性將由 定義 SemanticResultKey 中使用的文法元件決定。
SemanticResultKey(String, GrammarBuilder[])
指派語意索引鍵給一或多個用來建立語音辨識文法的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
要當做語音索引鍵使用的標記會存取與 builders
引數所指定之 SemanticValue 物件相關聯的 GrammarBuilder 執行個體。
- builders
- GrammarBuilder[]
會和SemanticValue物件(可使用semanticResultKey
中所定義的標記來存取)相關聯的文法元件的陣列。
範例
下列範例會 Grammar 建立 來辨識 「My password is ...」格式的密碼輸入,其中實際輸入會與萬用字元相符。
萬用字元會以 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
引數也支援 SemanticResultValue 、 SemanticResultKey 、 Choices 和 String 物件。 如需隱含轉換的詳細資訊,請參閱 Implicit 。
執行辨識作業時, GrammarBuilder 引數中 builders
提供的物件會被視為循序。 例如,如果使用下列 SemanticResultValue 專案來建構 Grammar ,則辨識引擎的輸入必須包含要辨識的「the quick brown fox」 單字。
SemanticResultKey stringTest=new SemanticResultKey(
"stringTest", new GrammarBuilder[] {
new GrammarBuilder("the"),
new GrammarBuilder("quick"),
new GrammarBuilder("brown"),
new GrammarBuilder("fox")});
自 semanticResultKey
變數包含用來存取可能傳回之 SemanticValue 的標記。
Value的 SemanticValue 是由 參數所提供的 builders
實例所決定 GrammarBuilder 。
GrammarBuilder如果 物件未包含 的定義實例 SemanticResultValue ,則 的值 SemanticValue 為 null
。
GrammarBuilder如果 參數中 builders
提供的物件未標記 (與辨識邏輯所使用的物件) SemanticResultValue 實例相關聯 SemanticResultKey ,該實例 SemanticResultValue 將會定義 Value 產生的 屬性 SemanticValue 。
參數所指定的物件中 GrammarBuilder 應該只有一個且只有一個未標記 SemanticResultValue 的 builders
實例。 如果多個未標記 SemanticResultValue 的實例與 SemanticResultKey 相關聯,則每個實例都會嘗試設定辨識結果中產生的 值 SemanticValue 。 不允許這樣做,而且辨識器會在嘗試使用 Grammar 這類 SemanticResultKey 實例建立時產生例外狀況。
SemanticResultValue包含在 參數所指定 builders
之 物件中的 GrammarBuilder 實例,且已經與另一個 SemanticResultKey 物件相關聯,不會影響目前的 SemanticResultKey 實例。
適用於
SemanticResultKey(String, String[])
指派語意索引鍵給一或多個用來建立語音辨識文法的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 物件,其串連文字將會與 SemanticValue 物件相關聯,而此物件可透過 semanticResultKey
中所定義的標記進行存取。
範例
下列範例會 Grammar 從 GrammarBuilder 使用 SemanticResultKey 由 物件陣列 String 定義的 物件建立 。
使用所建立的 Grammar 辨識引擎會辨識片語「紅色綠色藍色零」。 辨識所傳回之 RecognizedPhrase 的語意將包含 SemanticValueValue 具有 「紅色綠色藍色」的 。 您可以使用 「code」 標記來存取 SemanticValue 。
因為 SemanticResultValue("zero", 5)
附加至 GrammarBuilder ,所以 中的 RecognizedPhrase 根 SemanticValue 物件會有 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 ,則辨識引擎的輸入必須包含要辨識的「the quick brown fox」 單字。
SemanticResultKey stringTest=new SemanticResultKey("stringTest",
new string[] {
"the",
"quick",
"brown",
"fox"});
自 semanticResultKey
變數會決定用來存取可能傳回之 的 SemanticValue 索引鍵。
如果您使用包含具有字串物件陣列之語意索引鍵的 物件來建構 GrammarGrammarBuilder , ValueSemanticValue 辨識作業所產生的 會是用於辨識的字串。 在上述範例中,這表示 Value 會是「the quick brown fox」。