我目前正在使用Microsoft Kinect SDK开发语音识别应用程序。该应用程序的目标是加载包含语法的任何(有效)XML文件,并使用它来处理语音。
我正在通过开发不那么简单的语法来测试应用程序,在此过程中我还没有想出如何返回特定的语义值,特别是名称。例如,在以下语法中:
<grammar version="1.0" xml:lang="en-US" root="rootRule" tag-format="semantics/1.0-literals" xmlns="http://www.w3.org/2001/06/grammar">
<!-- Ask for person's related information (age, location, name, etc.) -->
<rule id="rootRule">
<one-of>
<!-- Ask person name -->
<item>
<tag>AnswerToNameQuestion</tag>
<one-of>
<item> my name is </item>
<item> people call me </item>
</one-of>
<ruleref uri="#names"/>
</item>
<!-- Ask person location -->
<item>
<tag>QuestionOfLocation</tag>
<one-of>
<item> do you know where is </item>
<item> can you tell me where </item>
<item> where did </item>
</one-of>
<ruleref uri="#names"/>
</item>
</one-of>
</rule>
<!-- Answer person name -->
<rule id="names">
<item>
<one-of>
<item> peter </item>
<item> john </item>
<item> danny </item>
</one-of>
</item>
</rule>
</grammar>
当一个人说出他们的名字时,我希望语义是那个人的名字。例如,对于问题&#34;你的名字是什么&#34; (不包括在这个语法中)和回复&#34;我的名字是-insert name - &#34;,我希望语义结果是人的名字而不仅仅是&#34; AnswerToNameQuestion&#34;正在返回的语义结果。 任何帮助将不胜感激!
答案 0 :(得分:1)
在SpeechRecognized事件处理程序中。你可以得到&#34;文本句子&#34;如果查询event.Result.Text属性而不是event.Result.Semantics.Value。您可以使用此第二个属性从文本字符串中删除不相关的部分。 例如,如果有人说&#34;我的名字是彼得&#34;,在SpeechRecognized事件处理程序中你将拥有:
event.Result.Text =&#34;我的名字是Peter&#34;
event.Result.Semantics.Value =&#34; AnswerToNameQuestion&#34;