以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XML在语音技术中的应用 』   (http://bbs.xml.org.cn/list.asp?boardid=47)
----  ASR & SRGS  (http://bbs.xml.org.cn/dispbbs.asp?boardid=47&rootid=&id=47489)


--  作者:WanMingliang
--  发布时间:5/24/2007 5:28:00 PM

--  ASR & SRGS
zhu_rixian老大!  W3C Speech Interface Framework中讲Speech Grammar Markup Language是被ASR使用的.但我在OPENVXI中没有看到SRGS是如何被使用的.可能是我没看到,也可能是没实现.按我的愚见:如果是被ASR使用的话,那应该将语法传给ASR(比如说微软的SAPI).请帮我指点一下.谢谢!
--  作者:zhu_ruixian
--  发布时间:5/24/2007 9:06:00 PM

--  
<?xml version="1.0"?>
     <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">
<nomatch count="3">
<prompt> I'm sorry I still don't understand, Goodbye.</prompt>
<exit expr="'failure'"/>
</nomatch>

<noinput count="3">
<prompt> I'm sorry I still don't hear you, Goodbye</prompt>
<exit expr="'failure'"/>
</noinput>

 
 <menu id="menu1">
  <prompt> Please cast your vote for Ralph Nader, George Bush Or Al Gore </prompt>
  <choice dtmf="1" next="#form1"> Ralph_Nader </choice>
  <choice dtmf="2" next="#form2"> George_Bush </choice>
  <choice dtmf="3" next="#form3"> Al_gore </choice>  
 </menu>

 <!-- The grammar defined in the menu above should be active in the following form -->
 <!-- Therefore, no need to define a new grammar --> 
 <form id="form1">
  <block>
   <prompt> I think you said Ralph Nader </prompt>
    <exit expr="'success'"/>
  </block>
 </form>
 <form id="form2">
  <block>
   <prompt> I think you said George Bush </prompt>
   <exit expr="'success'"/>
  </block>
 </form>

 <form id="form3">
  <block>
   <prompt> I think you said Al Gore </prompt>
   <exit expr="'success'"/>
  </block>
 </form>

</vxml>


--  作者:zhu_ruixian
--  发布时间:5/24/2007 9:08:00 PM

--  
运行后:
D:\VoiceXML\OpenVXI\bin>VXIclient.exe -config SBclient.cfg -url election.vxml  -calls 1

Command-line arguments :
[-v ] [-version] [-url vxmlDocURL] [-channels nbChannels] [-config configFile]
[-calls maxCalls] [-delay nbSeconds] [-sbinet]
To show version specifiy either -v or -version
To run multiple channels, set nbChannels to desired number
To take unlimited calls, set maxCalls to -1
To simulate delay between call, set nbSeconds to desired seconds
-sbinet used by Vocalocity only to indicate sbinet is passed to OSR


===========================================================
vxmlDocURL: election.vxml
configFile: SBclient.cfg
nbChannels: 1, maxCalls: 1, nbSeconds: 0
===========================================================

Channel 0: Waiting for Call 1
May 24 21:05:23.71|2188|0|60001|testClient::ChannelThread|About to call VXIplatformWaitForCall

=====================VXItelWaitForCall===========================
May 24 21:05:23.71|2188|0|60001|testClient::ChannelThread|In a Call
Channel 0: In a Call
=====================语法文件内容=======================
<?xml version='1.0'?><grammar xmlns='http://www.w3.org/2001/06/grammar' version='1.0' root='_GRAMROOT_0' tag-format='swi
-semantics/1.0' xml:lang='en'>
<meta name="swirec_simple_result_key" content="MEANING"/><rule id='_GRAMROOT_0' scope='public'>
<one-of>
<item>1<tag>MEANING="1";</tag></item>
</one-of></rule></grammar>
=====================语法文件内容=======================
=====================语法文件内容=======================
<?xml version='1.0'?><grammar xmlns='http://www.w3.org/2001/06/grammar' version='1.0' root='_GRAMROOT_1' tag-format='swi
-semantics/1.0' xml:lang='en'>
<meta name="swirec_simple_result_key" content="MEANING"/><rule id='_GRAMROOT_1' scope='public'>
<one-of>
<item>Ralph_Nader<tag>MEANING="Ralph_Nader";</tag></item>
</one-of></rule></grammar>
=====================语法文件内容=======================
=====================语法文件内容=======================
<?xml version='1.0'?><grammar xmlns='http://www.w3.org/2001/06/grammar' version='1.0' root='_GRAMROOT_2' tag-format='swi
-semantics/1.0' xml:lang='en'>
<meta name="swirec_simple_result_key" content="MEANING"/><rule id='_GRAMROOT_2' scope='public'>
<one-of>
<item>2<tag>MEANING="2";</tag></item>
</one-of></rule></grammar>
=====================语法文件内容=======================
=====================语法文件内容=======================
<?xml version='1.0'?><grammar xmlns='http://www.w3.org/2001/06/grammar' version='1.0' root='_GRAMROOT_3' tag-format='swi
-semantics/1.0' xml:lang='en'>
<meta name="swirec_simple_result_key" content="MEANING"/><rule id='_GRAMROOT_3' scope='public'>
<one-of>
<item>George_Bush<tag>MEANING="George_Bush";</tag></item>
</one-of></rule></grammar>
=====================语法文件内容=======================
=====================语法文件内容=======================
<?xml version='1.0'?><grammar xmlns='http://www.w3.org/2001/06/grammar' version='1.0' root='_GRAMROOT_4' tag-format='swi
-semantics/1.0' xml:lang='en'>
<meta name="swirec_simple_result_key" content="MEANING"/><rule id='_GRAMROOT_4' scope='public'>
<one-of>
<item>3<tag>MEANING="3";</tag></item>
</one-of></rule></grammar>
=====================语法文件内容=======================
=====================语法文件内容=======================
<?xml version='1.0'?><grammar xmlns='http://www.w3.org/2001/06/grammar' version='1.0' root='_GRAMROOT_5' tag-format='swi
-semantics/1.0' xml:lang='en'>
<meta name="swirec_simple_result_key" content="MEANING"/><rule id='_GRAMROOT_5' scope='public'>
<one-of>
<item>Al_gore<tag>MEANING="Al_gore";</tag></item>
</one-of></rule></grammar>
=====================语法文件内容=======================
播放TTS: Please cast your vote for Ralph Nader, George Bush Or Al Gore
请输入: 1
播放TTS: I think you said Ralph Nader
comvert error

D:\VoiceXML\OpenVXI\bin>pause

中间就是语法文件,我是在VXIrec中将其打印出来的。


--  作者:zhu_ruixian
--  发布时间:5/24/2007 9:10:00 PM

--  
如果是被ASR使用的话,那应该将语法传给ASR(比如说微软的SAPI).  你说的很对。
打印的函数如下:
static VXIrecResult VXIrecLoadGrammarFromString(VXIrecInterface *pThis,
                                                const VXIMap *prop,
                                                const VXIchar *type,
                                                const VXIchar *str,
                                                VXIrecGrammar **gram)
{
  const wchar_t* fnname = L"VXIrecLoadGrammarFromString";
  VXIrecData* tp = GetRecData(pThis);
  if (tp == NULL) return VXIrec_RESULT_INVALID_ARGUMENT;
  LogBlock logger(tp->GetLog(), gblDiagLogBase, fnname, VXIREC_MODULE);

  // Check the arguments
  if (str == NULL) {
    logger = VXIrec_RESULT_INVALID_ARGUMENT;
    return VXIrec_RESULT_INVALID_ARGUMENT;
  }
  if (type == NULL) {
    logger = VXIrec_RESULT_UNSUPPORTED;
    return VXIrec_RESULT_UNSUPPORTED;
  }
  
  VXIrecGrammar * gp = NULL;
  vxistring srgsGram, mtype(type);
  
  logger.logDiag(DIAG_TAG_GRAMMARS, L"%s%s", L"TYPE: ", mtype.c_str());
  tp->ShowPropertyValue(prop);
  
  if( mtype == L"application/x-jsgf" || mtype == REC_MIME_CHOICE || mtype == REC_MIME_CHOICE_DTMF)
  {
    // first crack the srgs grammar
    JSGFInfo info;
    tp->ConvertJSGFType(str, info);
    // then try to convert to SRGS format
    if( !tp->JSGFToSRGS(info.contentStr, srgsGram, prop) ) return  VXIrec_RESULT_FAILURE;
    mtype = VXI_MIME_SRGS; // reset mime type
    logger.logDiag(DIAG_TAG_GRAMMARS, L"%s%s", L"Converted GRAMMAR: ", srgsGram.c_str());   
 printf("=====================语法文件内容=======================\n");
 for(int i=0;i<srgsGram.length();i++){
  printf("%c",srgsGram[i]);
 }
 printf("\n=====================语法文件内容=======================\n");
  }
  else if( mtype == VXI_MIME_SRGS ) {
    // processing below  
    srgsGram = str;
  }
  else {
    // Handle your own type here, return unsupported for now
    logger = VXIrec_RESULT_UNSUPPORTED;
    return VXIrec_RESULT_UNSUPPORTED;
  }
  
  // Parsing SRGS grammar.
  // NOTES: The parsing is very simple, therefore it may not work
  // for complex grammar.  As you know, this is a simulator!!!
  
  VXIrecGrammar * gramPtr = tp->ParseSRGSGrammar(srgsGram, prop);
  if( gramPtr == NULL ) return VXIrec_RESULT_FAILURE;
  tp->AddGrammar(gramPtr);
  *gram = ToVXIrecGrammar(gramPtr);
  return VXIrec_RESULT_SUCCESS;
}


--  作者:WanMingliang
--  发布时间:5/25/2007 10:47:00 AM

--  
谢谢朱老大!!!如你所说,我应该在你打印语法的位置将语法内容传递给ASR.老大你说对吗?

--  作者:zhu_ruixian
--  发布时间:5/25/2007 7:24:00 PM

--  
以下是引用WanMingliang在2007-5-25 10:47:00的发言:
谢谢朱老大!!!如你所说,我应该在你打印语法的位置将语法内容传递给ASR.老大你说对吗?


感觉不是。因为从函数名VXIrecLoadGrammarFromString上可以得出,这个函数完成语法的加载工作。我只是从这儿截取,并打印出来。不一定说明从这儿传给asr,要是语法是个语法文件,这个函数是不执行的。应该在别处截取语法内容,并传给asr(我的感觉就是调用VXIrecLoadGrammar××××××函数的地方)。


--  作者:WanMingliang
--  发布时间:5/26/2007 7:28:00 PM

--  
你有试过加载吗? 另外恭喜你荣任本版版主!

--  作者:zhu_ruixian
--  发布时间:5/26/2007 7:47:00 PM

--  
没有  谢谢


--  作者:whr528066
--  发布时间:2/19/2008 5:20:00 PM

--  
r
--  作者:zhu_ruixian
--  发布时间:2/23/2008 9:39:00 PM

--  
OpenVXI源代码看的不是很明白,如果有什么见解,欢迎讨论!


--  作者:taotao
--  发布时间:3/20/2010 8:04:00 PM

--  
楼主,请问您的OpenVXI是在哪下载的啊?我在这个网站上下载的安装说明说需要用Alcohol 120%等虚拟光驱工具载入它们。我按照这样做了,可是载入不了。你能不能提供个好的下载地址啊~十分感谢
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
78.125ms