Я создаю грамматику GRXML для программного обеспечения, которое будет использовать Microsoft Speech SDK от Microsoft для распознавания голоса.
Теги должны соответствовать формату тега "properties-ms / 1.0", о котором я не нашел никакой конкретной документации (кроме MSDN, который не отвечает на мой вопрос).
Мой основнойбеспокойство касается маркировки цифр, чтобы преобразовать распознанный текст типа «один два три четыре» в число «1234».Вот идея:
<rule id="CODE">
<item repeat="4">
<ruleref uri="#DIGIT"/>
</item>
</rule>
<rule id="DIGIT">
<one-of>
<item>
one
<tag>"1"</tag>
</item>
<item>
two
<tag>"2"</tag>
</item>
<item>
three
<tag>"3"</tag>
</item>
<item>
four
<tag>"4"</tag>
</item>
<item>
five
<tag>"5"</tag>
</item>
</one-of>
</rule>
Это не делает конкатенацию, но по крайней мере я получаю семантическое значение для каждой цифры.
Однако, когда я использую такое правило для цифр, во время выполненияпрограмма прерывается, вызывая исключение, в котором говорится, что «семантическое значение в правиле« КОД »уже установлено и не может быть изменено».
Как заставить семантическую пометку работать вместе с «повторением» правила DIGIT?Я не хочу разбивать мое правило CODE на 4 одинаковых элемента, каждый из которых имеет свой семантический ключ: в моей грамматике есть другие случаи, когда количество цифр не является фиксированным.
Кроме того, есть ли способобъединить теги, чтобы обеспечить общее семантическое значение числа.