我是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文件中完成所有这些操作(不应该涉及编译的代码)。
我错过了什么?我真的被卡住了。
感谢。
答案 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文档中看不到。