2015-07-10 9 views
2

Я новичок в SRGS, поэтому заранее прощайте меня, если это слишком очевидно для вас, эксперты, но я пока ничего не нашел по этому вопросу.не может вернуть символ слэш из MS ASR (грамматика Sgrs)

То, что я пытаюсь сделать, - это когда произносится «L four slash five», MS ASR должен возвращать «L4/5». Независимо от того, что я делаю, мне кажется, что символ «/» не отображается.


<grammar version="1.0" 
    xml:lang="en-US" 
    mode="voice" 
    xmlns="http://www.w3.org/2001/06/grammar" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.w3.org/2001/06/grammar 
         http://www.w3.org/TR/speech-grammar/grammar.xsd" 
    xmlns:sapi="http://schemas.microsoft.com/Speech/2002/06/SRGSExtensions" 
    sapi:alphabet="x-microsoft-ups" 
    root="medical" > 

<rule id="l45" scope="public"> 
     <item> 
    <token sapi:display="L4/5"> L four slash five </token> 
    </item> 
</rule> 

<rule id="medical" scope="public" sapi:dynamic="true"> 
    <one-of> 
     <item><ruleref uri="#l45"/></item> 
    </one-of> 
</rule> 

Я попытался SAPI: дисплей = "L4 / 5" вместо SAPI: дисплей = "L4/5" то же самое. ASR возвращает только «L4». Просто для этого я попытался удалить слэш, например. sapi: display = "L45" ASR быстро возвращает правильный текст: "L45". Требование здесь состоит в том, чтобы иметь возможность сделать это все в файле Srgs XML (в него не должно быть задействован компилируемый код).

Что мне не хватает? Я действительно застрял.
Спасибо.

ответ

0

После изучения спецификации SRGS SRGS spec, это, безусловно, непонятно. Самое близкое, что я нашел в нем, это теги и двусмысленность.

Вы можете попробовать тег и так, как описано в MSDN designing grammar rules

На примере они дают это:

<rule id="participants"> 
    <one-of> 
     <item> Nancy Anderson <tag> out="NanAnd" </tag> </item> 
     <item> Alan Brewer <tag> out="abrewer" </tag> </item> 
     <item> Oliver Lee <tag> out="olilee" </tag> </item> 
     <item> April Reagan <tag> out="areagan" </tag> </item> 
     <item> Cindy White <tag> out="cwhite" </tag> </item> 
     <item> Ken Kwok <tag> out="kkwok" </tag> </item> 
    </one-of> 
    </rule> 
0

<token sapi:display> является расширение Microsoft для ВКР-усиления, и я сильно подозреваю, что это реализуется путем преобразования токен в форме отображения/лексики/произношения, чья единственная документация, которую я могу найти, содержится в комментарии для атрибута LEXDELIMITER для SAPI grammar format:

LEXDELIMITER (необязательно): Атрибут LEXDELIMITER определяет разделитель для явных записей лексикона, указанных в грамматике. Авторы грамматики могут указать информацию о лексике, используя специальную последовательность символов . Последовательность символов:

 LEXDELIMITERDisplayFormLEXDELIMITERLexicalFormLEXDELIMITERPronunciation; 

и значение по умолчанию '/'. Форма произношения является необязательной и может быть опущена.

Таким образом, строка в грамматике, которая имеет форму /4/four/fo eh er; является один маркер, который будет возвращен в распознанный текст в качестве «4», будет найден в лексиконе через «четыре» и будет объявлен как " fo eh er '. Это часто используется на японском языке, где форма отображения находится в кандзи, а лексическая форма - в Хирагане или Катакана.

Теперь должно быть понятно, почему <token sapi:display="L4/5"> не совсем работает - элемент отображения становится разделенным, чтобы соответствовать синтаксису токена.

Для выполнения этой работы вам необходимо иметь эквивалент атрибута SAPI LEXDELIMITER в грамматике SRGS, и я не вижу его в документации Microsoft.