vxml: определение грамматик с эквивалентными входными данными

Я использую движок на основе TellMe. Я видел примеры грамматик, в которых пользователь может сказать одну из нескольких разных вещей, которые считаются одним и тем же. Тем не менее, все примеры, которые я видел, были для встроенных грамматик (которые не работают с движком vxml, который я использую). Я хочу знать, как я могу изменить свой файл .grxml, чтобы сделать это. Это файл:

<?xml version="1.0"?>
<!-- created by Matthew Murdock. Grammars for speech rec menus -->
<grammar 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" xml:lang="en" version="1.0" mode="voice" scope="dialog" tag-format="semantics/1.0.2006">
   <rule id="keep">
      <one-of>
         <item>exit</item>
         <item>exit the system</item>
         <item>another</item>
         <item>another mailbox</item>
         <item>play</item>
         <item>play back</item>                      
      </one-of>
   </rule>
</grammar>

вместо 6 элементов я хочу иметь 3 элемента, каждый из которых имеет два возможных высказывания. Любые идеи о том, как я могу это сделать?


person mtmurdock    schedule 07.07.2010    source источник
comment
Хотя в SO нет общих (если даже используемых) тегов, вероятно, стоит добавить SRGS и SISR в список тегов. Есть несколько других разработчиков VoiceXML, которые задают здесь вопросы, и кому-то это может быть полезно.   -  person Jim Rush    schedule 08.07.2010


Ответы (3)


Более компактная форма:

  <rule id="exit">
    exit <item repeat="0-1">the system</item>
    <tag>out.result = "exit"</tag>
  </rule>
  <rule id="play">
    play <item repeat="0-1">back</item>
    <tag>out.result = "play"</tag>
  </rule>
person gawi    schedule 24.08.2010

Ответы, которые вам нужны, содержатся в спецификации SISR, которая обеспечивает механизм придания значения входные пути. Переписывая свой пример:

<?xml version="1.0"?>
<grammar 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" xml:lang="en" version="1.0" mode="voice" scope="dialog" tag-format="semantics/1.0-literals">
   <rule id="keep">
      <one-of>
       <item>
        <one-of>
         <item>exit</item>
         <item>exit the system</item>
        </one-of>
        <tag>exit</tag>
        </item>

       <item>
        <one-of>
         <item>another</item>
         <item>another mailbox</item>
        </one-of>
        <tag>another</tag>
       </item>

       <item>
        <one-of>
         <item>play</item>
         <item>play back</item>                      
        </one-of>
        <tag>play</tag>
       </item>
      </one-of>
   </rule>
</grammar>

Несколько вещей, которые нужно знать:

  • Я выбрал литеральный формат тега (обратите внимание на атрибут tag-format элемента грамматики). Его также можно было бы реализовать с помощью "semantics/1.0", и содержимое тега выглядело бы так: out="exit";
  • Значения формата тега TellMe могут отличаться, но их руководство по разработке подразумевает, что они следуют стандартам.
  • Как только вы заработаете, не стесняйтесь создавать грамматики-заполнители (на языке SRGS, правила). Правила-заполнители будут правилами без каких-либо SI (без элементов тега) и содержать общие фразы, которые люди добавляют к ответам. Например, завершающее правило, которое можно добавить в конце вашей грамматики:
      </one-of>
      <item repeat="0-1"><ruleref uri="#trailing"/></item>
   </rule>

   <rule id="trailing>
      <one-of>
         <item>please</item>
         <item>thank you</item>

      </one-of>
   </rule>

</grammar>

Это поддержит более естественные типы ответов. Это может быть или не быть важным в зависимости от вашей абонентской базы. Грамматики-заполнители могут быть очень большими, но, как правило, их можно многократно использовать. Вы также можете добавить заполнитель в начале ввода. В приложениях с расширенной речью наиболее значительный выигрыш в процессе настройки заключается в обновлении грамматики, чтобы она содержала фактические фразы, произносимые вызывающим абонентом, а не то, что, по мнению разработчика или проектировщика VUI, будет произнесено.

person Jim Rush    schedule 08.07.2010
comment
Извините, но ваше предложение не работает. <one-of> не может быть потомком <one-of> в TellMe или в моем движке. Я использую Lumenvox для записи речи, если это помогает. - person mtmurdock; 08.07.2010
comment
Ты прав. Внутренние элементы ‹one-of› должны быть заключены в элементы ‹item›. - person Jim Rush; 09.07.2010

Я понял. Я изменил свою грамматику, чтобы она выглядела так:

<?xml version="1.0"?>
<grammar 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" xml:lang="en" version="1.0" mode="voice" scope="dialog" tag-format="semantics/1.0-literals">
   <rule id="keep">
      <one-of>
         <item><ruleref id="#exit"/></item>
         <item><ruleref id="#play"/></item>
      </one-of>
   </rule>
   <rule id="exit">
      <one-of>
         <item>exit</item>
         <item>exit the system</item>
      </one-of>
      <tag>out.result = "exit"</tag>
   </rule>
   <rule id="play">
      <one-of>
         <item>play</item>
         <item>play back</item>
      </one-of>
      <tag>out.result = "play"</tag>
   </rule>
</grammar>

Затем, вернувшись в свой сценарий, вместо того, чтобы основывать свои действия на callerInput (переменная, указанная в теге <field>), я основывал их на callerInput$.interpretation, который содержит xml, содержащий все, что я назначил out.result в элементе <tag> грамматики. .

Я думаю, имеет смысл основывать свои действия на «интерпретации», а не на буквальном вводе вызывающего абонента.

ПРИМЕЧАНИЕ. Поскольку мы работаем с нашим собственным движком vxml, мы смогли создать метод для извлечения значения интерпретации из xml.

person mtmurdock    schedule 13.07.2010