WPF: грамматика речи с несколькими активными правилами не работает - PullRequest
1 голос
/ 14 октября 2019

Я создал Grammar с использованием XML для использования с типом SpeechRecognitionEngine.

Файл грамматики работает, когда у меня есть только ОДНО правило, на которое есть ссылка в правиле 'root', но НЕ работает, когдаУ меня есть более одного правила, на которое есть ссылка в правиле «root».

Насколько я вижу, я следовал инструкциям, изложенным в документации ЗДЕСЬ

ВотXML-файл Grammer:

<grammar version="1.0" xml:lang="en-US" root="topLevel"
 xmlns="http://www.w3.org/2001/06/grammar">

  <rule id="topLevel">
    <ruleref uri="#commandOne"/>
    <ruleref uri="#commandTwo"/>
  </rule>

  <rule id="commandOne">
    <one-of>
      <item> run tests </item>
    </one-of>
  </rule>

  <rule id="commandTwo">
    <one-of>
      <item> open </item>
      <item> goto </item>
    </one-of>
    <ruleref uri="#toolRule"/>
  </rule>

  <rule id="toolRule">
    <one-of>
      <item> spanner </item>
      <item> wrench </item>
    </one-of>
  </rule>

</grammar>

Вот код, который я использую для настройки и загрузки файла грамматики:

          speechRecogniser.SpeechRecognized += SpeechRecogniser_SpeechRecognized;
          speechRecogniser.LoadGrammar(new Grammar(@"Speech\TestGrammar.xml"));
          speechRecogniser.SetInputToDefaultAudioDevice();
          speechRecogniser.RecognizeAsync(RecognizeMode.Multiple);

Может кто-нибудь сказать мне, почему никакие правила не работают изXML, когда у меня> 1 правил, на которые ссылается правило topLevel?

1 Ответ

1 голос
/ 14 октября 2019

Не могли бы вы попробовать этот синтаксис:

<rule id="toplevel" scope="public">
  <one-of>
    <item> <ruleref uri="#commandOne"/> </item>
    <item> <ruleref uri="#commandTwo"/> </item>
  </one-of>
</rule>
...