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

StackOverflow https://stackoverflow.com/questions/3197157

Вопрос

Я использую двигатель на основе Tileme. Я видел примеры грамматиков, где пользователь может сказать одну из нескольких разных вещей, которые считаются одинаковыми. Тем не менее, все примеры, которые я видел, были для встроенных грамматиков (которые не работают с двигателем VXML IM, используя). Я хочу знать, как я могу изменить свой файл .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 предмета, каждый из которых имеет два возможных высказывания. Любые идеи о том, как я могу это сделать?

Это было полезно?

Решение 3

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

<?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> TAG), я насадил их от CallerInput $ .Interpretation, которая содержит XML, содержащую все, что я назначил. <tag> Элемент грамматики.

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

Примечание. Поскольку мы работаем с нашим собственным двигателем VXML, мы смогли создать метод для извлечения значения интерпретации из XML.

Другие советы

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

  <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>

Ответы, которые вы хотите, находятся в 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>

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

  • Я выбрал буквальный формат метки (обратите внимание на атрибут формата тегов грамматического элемента). Он также мог быть реализован с использованием «семантики / 1,0», а содержимое тега было бы выглядеть как: OUT = «выход»;
  • Значения формата TAGEME могут быть разные, но их Руководство по развитию подразумевает, что они следуют стандартам.
  • Как только у вас он работал, не стесняйтесь создавать наполнительные грамматики (в SRG, говорите, правила). Правила наполнителя были бы правилами без каких-либо 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top