无法从MS ASR返回斜杠符号(Sgrs语法)

时间:2015-07-10 12:00:24

标签: speech-recognition grammar speech sapi

我是SRGS的新手,所以如果你对专家来说太明显了,请提前原谅我,但到目前为止我还没有找到任何关于这个主题的内容。

我想要做的就是说话时#4; L四减5" 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:display =&#34; L4 / 5&#34;而不是sapi:display =&#34; L4 / 5&#34;一样。 ASR仅返回&#34; L4&#34;。只是为了它,我尝试删除斜线,例如。 SAPI:显示=&#34; L45&#34; ASR迅速返回正确的文本:&#34; L45&#34;。 这里的要求是能够在Srgs XML文件中完成所有这些操作(不应该涉及编译的代码)。

我错过了什么?我真的被卡住了。
感谢。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

<token sapi:display>是SRGS的Microsoft扩展,我强烈怀疑它是通过将令牌转换为显示/词汇/发音形式来实现的,我可以找到的唯一文档是在评论中SAPI grammar format的LEXDELIMITER属性:

  

LEXDELIMITER(可选):LEXDELIMITER属性指定   语法中指定的显式词典条目的分隔符。   语法作者能够通过使用a来指定词典信息   特殊的字符序列。字符序列是:

        LEXDELIMITERDisplayFormLEXDELIMITERLexicalFormLEXDELIMITERPronunciation;

,默认值为&#39; /&#39;。发音形式是可选的,可以省略。

因此,语法中具有/4/four/fo eh er;形式的字符串是一个标记,将在识别的文本中返回为&#39; 4&#39;,将被找到在词典中通过&#39;四&#39;并将发音为&#39; fo e er&#39;。这通常用于日语,其中显示形式为汉字,词汇形式为平假名或片假名。

现在,应该直截了当地了解<token sapi:display="L4/5">为什么不起作用 - 显示元素被剥离以适应令牌语法。

要使其工作,您需要在SRGS语法中具有等效的SAPI LEXDELIMITER属性,并且我在Microsoft文档中看不到。