Семантическая интерпретация в грамматике SRGS XML

#c# #xml #speech-recognition

#c# #xml #распознавание речи

Вопрос:

У меня есть следующая грамматика XML для определения числа, такого как 1000 или 2200 и т.д.

 <rule id="rule1" scope="public">
 <one-of>
  <item>1</item>
  <item>2</item>
  <item>3</item>
 </one-of>
 <ruleref uri="#rule2"/>
</rule>

<rule id="rule2" scope="public">
 <one-of>
  <item>thousand<tag>out="000";</tag></item>
  <item>thousand 100<tag>out=100;</tag></item>
  <item>thousand 200<tag>out=200;</tag></item>
 </one-of>
</rule>
  

Однако, когда пользователь говорит, например, 2100, я получаю «2 тысячи 100″ вместо 2100. Похоже, что часть out= не работает. Я видел несколько примеров в Интернете и не знаю, нужно ли мне добавить что-то еще, чтобы это сработало. Я использую tag-format=»семантика / 1.0»

Комментарии:

1. Это зависит от движка, с которым вы работаете, не так ли? Возможно, он не поддерживает теги. Какой из них вы используете? Также для полноты картины я бы добавил кавычки вокруг второго и третьего случая.

2. Я использую SpeechRecognitionEngine в C # для загрузки грамматики. Я пробовал это с кавычками и без них.

Ответ №1:

Способ, которым я решил эту проблему, заключался в том, чтобы использовать только одно правило и использовать такие свойства, как out.start , out.end, а затем объединить их.

 <rule id="rule1" scope="public">
 <one-of>
  <item>1<tag>out.start="1";</tag></item>
  <item>2<tag>out.start="2";</tag></item>
  <item>3<tag>out.start="3";</tag></item>
 </one-of>

 <one-of> 
  <item>thousand<tag>out.end="000";</tag></item>
  <item>thousand 100<tag>out.end="100";</tag></item>
  <item>thousand 200<tag>out.end="200";</tag></item>
 </one-of>

 <tag>out=out.start out.end;</tag>
</rule>
  

Чтобы извлечь семантическое значение из C #, вы можете использовать что-то вроде

 private void sre_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
     MessageBox.Show(e.Results.Semantics.Value.ToString());
}
  

Ответ №2:

Microsoft Speech SDK поставляется с образцом SRGS, который может обрабатывать числа довольно хорошо. Например, «Кардинальное» правило может обрабатывать числа до 1 000 000. Он доступен на разных языках в каталоге Samples (например C:Program FilesMicrosoft SDKsSpeechv11.0SamplesSample Grammarsen-US.grxml).