考慮下面的代碼已加載的語法,如何將單詞添加到使用System.Speech和SAPI 5.3
Choices choices = new Choices();
choices.Add(new GrammarBuilder(new SemanticResultValue("product", "<product/>")));
GrammarBuilder builder = new GrammarBuilder();
builder.Append(new SemanticResultKey("options", choices.ToGrammarBuilder()));
Grammar grammar = new Grammar(builder) { Name = Constants.GrammarNameLanguage};
grammar.Priority = priority;
_recognition.LoadGrammar(grammar);
我如何添加額外的字來加載的語法?我知道這可以通過本地代碼和使用SpeechLib interop來實現,但我更喜歡使用託管庫。
更新:我想實現的是,由於個人的變化,不必重複加載整個語法。對於小的語法我通過調用
_recognition.RequestRecognizerUpdate()
,然後做在事件重建的語法的老語法和裝載卸載了良好的效果:
void Recognition_RecognizerUpdateReached(object sender, RecognizerUpdateReachedEventArgs e)
對於大型文法這變得過於昂貴。
我不確定我關注。假設我如AppendRuleReference中所述添加對外部語法的引用。在引用這個引用語法之後,它的內容就會改變。我現在如何更新語音引擎以使用修正的語法? (當然沒有重新加載) – 2009-03-16 17:31:37
您需要重新加載_referenced_語法,但不是主要語法。這應該是一個更小的加載/卸載操作。 如果每個用戶的差異很大,那麼另一個選項是讓它們全部加載,然後在運行中啓用/禁用它們。 – 2009-03-16 18:28:07
我會試着舉個例子。打開單詞並開始輸入。添加/刪除/更改的每個短語都應添加/刪除/更改(=刪除然後添加)到語法中。我需要支持大文件。 (在這裏我定義大的重新加載) – 2009-03-16 21:09:21