Как добавить слова в уже загруженную грамматику с помощью System.Speech и SAPI 5.3 - PullRequest
4 голосов
/ 29 ноября 2008

Учитывая следующий код,

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, но я предпочитаю использовать управляемую библиотеку.

Обновление: То, чего я хочу достичь, - это не загружать всю грамматику повторно из-за индивидуальных изменений. Для маленьких грамматик я получил хорошие результаты, позвонив

_recognition.RequestRecognizerUpdate()

и затем выгрузка старой грамматики и загрузка восстановленной грамматики в случае:

void Recognition_RecognizerUpdateReached(object sender, RecognizerUpdateReachedEventArgs e)

Для больших грамматик это становится слишком дорого.

Ответы [ 3 ]

1 голос
/ 17 марта 2009

Альтернативой, если у вас очень большие грамматики, будет использование опции грамматики диктовки. Существует стандартная грамматика диктовки, но вы также можете указать и свою. См. http://msdn.microsoft.com/en-us/library/system.speech.recognition.dictationgrammar.aspx, и его конструктор.

Вы бы не обновляли это. Содержит все возможные слова.

1 голос
/ 18 сентября 2009

В собственном SAPI я бы использовал ISpGrammarBuilder2 :: AddTextSubset ().

1 голос
/ 16 марта 2009

Звучит так, как будто вам нужно использовать некоторую косвенность через ссылку на правило грамматики. Это можно сделать с помощью метода GrammarBuilder.AppendRuleReference. Возможно, было бы проще сначала проверить свои грамматики с помощью некоторых файлов грамматики SRGS.

Принцип состоит в том, что вы загружаете основную большую грамматику, в которой есть некоторые ссылки, в меньшие пользовательские грамматики списков слов, которые вы динамически загружаете.

См. http://www.w3.org/TR/speech-grammar/#S2.2 для формата srgs и http://msdn.microsoft.com/en-us/library/system.speech.recognition.grammarbuilder.appendrulereference.aspx для программной версии.

...