Grammar

Материал из VXML
Перейти к: навигация, поиск


Элемент <grammar> используется для описания речевой или dtmf-грамматики, которая:

  1. определяет набор фраз и высказываний, которые пользователь может сказать для выполнения действия или предоставления информации;
  2. осуществляет семантическую интерпретацию фразы, получившую соответствие в данной грамматике (например, если пользователь сказал "январь", то грамматика может вернуть в основной документ численное или строковое значение "1").

Ниже предоставлены элементы определенные в XML форме SRGS и доступны в VXML 2.0

Элемент Предназначение
<grammar> Корневой элемент XML грамматики
<meta> Элемент, аналогичный идентичному элементу в html — содержит метаинформацию о документе
<metadata> Элемент, который хранит информацию документе, которую можно получить, использую метаинформационную схему (metadata schema)
<lexicon> Элемент, определяющий произношение слов грамматики
<rule> Правило, используемое в грамматике
<token> Элемент для описаний словосочетаний грамматики
<ruleref> Ссылка на другое правило
<item> Элемент для описания индивидуального правила распознавания с возможностью указания повторений.
<one-of> Элемент для описания альтернативных переходов
<example> Элемент для описания примера фразы, которое может быть распознано в грамматике.
<tag> Элемент для описания семантической интерпретации результата распознавания.

Элемент <grammar> может использоваться для указания внутренней или внешней грамматики. Внутренняя указывается внутри документа, а внешняя в отдельном файле.

Синтаксис

<grammar fetchhint="(prefetch|safe)" 
         fetchtimeout="CDATA" 
         mode="(dtmf|voice)" 
         root="IDREF" 
         scope="(dialog|document)" 
         src="string - URI" 
         srcexpr="CDATA" 
         tag-format="CDATA" 
         type="(application/grammar-xml|text/gsl)" 
         version="1.0"
         weight="CDATA" 
         xml:base="CDATA" 
         xml:lang="NMTOKEN" 
         xmlns="http://www.w3.org/2001/06/grammar">

Атрибуты

  • version — номер версии.
    (Необходимость указания: обязательно)
  • xml:lang — задает основной язык распознаваемого и синтезируемого текста.
    (Необходимость указания: обязательно.)
  • mode — задает тип входных данных для распознавания и может быть равен voice (голос) или dtmf (тональный набор цифр).
    (Необходимость указания: необязательно)
  • root — корневое правило, с которого начинается распознавание в грамматике.
    (Необходимость указания: обязательно)
  • tag-format — определяет тип содержимого всех заголовочных tag и правил, содержащихся внутри грамматики. Принимает значение “semantics-ms/1.0”
    (Необходимость указания: необязательно)
  • xmlns — атрибут, определяющий пространство имен. Все элементы и атрибуты относятся к этому пространству имен, и следует указывать значение "http://www.w3.org/2001/06/grammar"
    (Необходимость указания: обязательно для внешних грамматик)

Ниже перечислены атрибуты VoiceXML, которые поддерживаются в версия 2.1:

  • src — URI, определяющий местоположение грамматики и опционально имя правила внутри этой грамматики, в случае, если грамматика внешняя
    (Необходимость указания: обязательно, в случае внешней грамматики)
  • scope — может принимать значение document или dialog. В первом случае грамматика будет активна всем документе, а во втором — грамматика будет активна только в текущей форме.
    (Необходимость указания: необязательно)
  • type — определяет MIME тип грамматики. Возможные значения атрибута: 'application/grammar-xml' и 'text/gsl'
    (Необходимость указания: необязательно)
  • weight — атрибут, используемый только в XML грамматиках, задает вероятность распознавания.
    (Необходимость указания: необязательно)
  • fetchtimeout — время ожидания содержимого сценария, которое должно быть возвращено, до тех пор пока не произойдет ошибка error.badfetch.
    (Необходимость указания: необязательно)
    По умолчанию: 5s
  • fetchhint — используется, чтобы определить, когда данные должны быть получены во время выполнения работы приложения.Возможные значения и их описания:
  1. prefetch — данные получаются при первом выполнении документа
  2. safe — данные получаются, только когда они специально запрашиваются в приложении
    (Необходимость указания: необязательно)
    По умолчанию: safe
  • maxage — указывает максимально допустимое время выполнения сценария. Время указывается в секундах.
    (Необходимость указания: необязательно)
  • maxstale — указывает максимально допустимое "время жизни" сценария, то есть время в течение которого можно использовать сценарий. Время указывается в секундах.
    (Необходимость указания: необязательно)

DTMF-грамматики

Элемент <grammar> может использоваться для обеспечения DTMF-грамматики, которая:

  • определяет набор клавиш которые пользователь может использовать для выполнения действий или для обсечения информацией
  • если сочетание клавиш имеет совпадение в грамматике, то производится семантическая интерпретация.

Все VoiceXML платформы всегда поддерживают DTMF-грамматики. Эти грамматики отличаются от речевых атрибутом mode. Атрибут xml:lang не влияет на грамматическую обработку. В остальном речевые и DTMF-грамматики обрабатываются одинаково.

Область видимости грамматик

Грамматики элемента формы (input item grammars) всегда лежат в области видимости этого элемента. Таким образом, они активны только в случае, когда элемент форм был выбран в течение фазы выбора FIA. Для грамматик внутри определенного элемента формы не может быть указан атрибут scope. В противном случае выдается ошибка error.badfetch.

Ссылающиеся грамматики (link grammars) видны для элемента, который ссылается. То есть, если они определены в корневом документе, то грамматики также доступны во всех остальных документах, на который ссылается данный документ. У ссылающихся грамматик не может быть указан атрибут scope. В противном случае выдается ошибка error.badfetch.

У грамматик формы (form grammars) значение атрибута scope по умолчанию dialog. То есть они активны, только когда пользователь находится в данной форме. Если значение атрибута document и данный документ является корневым, они активны во всем документе и всех загружаемых документах данного приложения. Также задать видимость грамматики во всем документе можно с помощью атрибута scope элемента <form>. Если указаны в обоих элементах, грамматика предполагает область видимости, указанную в элементе <grammar>.

У грамматик меню (menu grammars) также значение атрибута scope по умолчанию dialog. И, соответственно, они тоже активны только, когда пользователь находится в меню. Аналогично, как и для грамматик формы, значение атрибута scope может быть document. В таком случае они будут видны во всем документе. Однако грамматики не могут быть указаны для элементов выбора меню. В противном случае выдается ошибка error.badfetch.

Активация грамматик

Когда интерпретатор ожидает ввод данных, следующие грамматики активны:

  • грамматики элемента формы, включая грамматики содержащиеся в ссылках в этом элементе.
  • грамматики форм, включая грамматики содержащиеся в ссылках в этом элементе.
  • грамматики, содержащиеся в ссылках на его документ, *грамматики меню и другие формы в его документе, у которых scope="document"

грамматики определенные платформой — стандартные обработчики событий такие как help, exit и cancel. В случае, если введенные данные могли совпасть сразу с несколькими активными грамматиками, то приоритет выбирается в соответствии со списком выше. Если введенные данные совпали, с грамматиками имеющими одинаковый приоритет, приоритет выбирается согласно порядку документа. Если ни одна из грамматик не активна при получении входных данных, то выдается ошибка error.semantic. Если элемент <form> имеет атрибут modal="true", то все грамматики, кроме грамматики формы, отключаются до тех пор, пока пользователь не ввел данные. Активация грамматики не зависит от метода ввода данных. Например, если указана только речевая грамматика, то DTMF-грамматика тем не менее активируется, но ничего не распознает.

Семантическая интерпретация

(см. также <tag>)
Семантическая интерпретация — отображение из распознанного текста в значение одной или нескольких переменных ECMAScropt, в соответствии с прописанной разработчиком логикой (например при распознавании фразы "ноль первый" разработчик может вернуть в диалог значение "январь"). Семантическая интерпретация не является обязательной процедурой. В этом случае, платформа воспринимает распознанный текст как строку. Это и является результатом семантической интерпретации. Каждый элемент ввода имеет ассоциированный с ним slot name, который может быть использован для извлечения какой-то части семантической интерпретации. slot name — это значение атрибута slot, если он присутствует (используется только для элементов <field>) или значение атрибута name (если в <field> не используется атрибут slot, а также для других элементов ввода). Если ни slot ни name не присутствуют, то значение slot name undefined. Slot name используется в течение фазы обработки в FIA для того, чтобы определить нашлись ли для введенных данных соответствия в грамматиках. Соответствие возникает, когда либо slot name полностью совпадает с основным свойством(например, основное свойство animal имеет значение "кот"), либо совпадает с подсвойством (подсвойство animal.AnimalName имеет значение "Тихон"). Свойство, имеющее значение undefined никогда не распознается. Обратите внимание, что возможно с помощью особого значения slot заполнить более одного элемента ввода, если имена элементов ввода одинаковы. Также для семантической интерпретации, помимо элемента <tag>, используются скрытые переменные.

Скрытые переменные

  • name$.utterance — переменная отвечающая за неинтерпретированный текст (то есть как пользователь произнес, так и возвращается значение). Токенизация зависит от данной конкретной платформы("5300" = "5 тысяч 300" = "пять тысяч триста" и т.д.). В случае DTMF-грамматики, переменной возвращается последовательность цифр
  • name$.inputmode — определяет как вводили данные. DTMF или речевые.
  • application.lastresult$.interpretation.VariableName — интерпретированное значение переменной VariableName. В данном случае не обязательно указывать VariableName. В этом случае вернется интерпретированное значение последних введенных данных
  • application.lastresult$.utterance.VariableName — переменная отвечающая за сказанный пользователем текст(как он его произнес), относящийся к переменной VariableName. В данном случае не обязательно указывать VariableName. В этом случае вернется распознанное значение последних введенных данных
  • application.lastresult$.confidence — переменная, поставляемая платформой распознавания, характеризующая качество распознавания текста. Значение переменной лежит в пределах [0; 1]. В случае DTMF значение переменной всегда равно 1.

Родители

<choice> <field> <link> <record> <transfer>

Потомки

<rule>

Пример

<?xml version="1.0" encoding="UTF-8"?> 
<vxml version="2.1" xmlns="http://www.w3.org/2001/vxml" xml:lang="ru-RU">
  <form id="f">
    <field>
      <prompt> Какой сегодня день? </prompt>	 
      <noinput>Говорите громче. <reprompt/> </noinput>
      <nomatch>Не удалось распознать сказанное слово. <reprompt/> </nomatch>
      <grammar xml:lang="ru-RU" root="main" mode="voice" version="1.0" tag-format="semantics/1.0">
        <rule id="main">
          <one-of>
            <item>понедельник</item>
            <item>вторник</item>
            <item>среда</item>
            <item>четверг</item>
            <item>пятница</item>
            <item>суббота</item>
            <item>воскресенье</item>
          </one-of>
        </rule>	   
      </grammar> 
      <filled>
        <prompt>
          Вы сказали: <value expr="application.lastresult$.utterance"/>.
        </prompt>
      </filled>	   
    </field> 
  </form> 
</vxml>



Добавить новый комментарий
Если не хотите писать от анонимного пользователя, зарегистрируйтесь или представьтесь системе.

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Статьи
Грамматики
Элементы VXML
Элементы SSML
Инструменты