Распознавание чисел от 1 до 999

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

Назначение

Представленная ниже грамматика предназначена для распознавания чисел от 1 до 999 включительно.

Механизм работы

Первое правило грамматики, к которому происходит обращение при распознавании речи, — main. Данное правило содержит ссылки на три других правила:

  • triad — распознавание трехзначных чисел;
  • pair — распознавание двузначных чисел;
  • oneDigit — распознавание однозначных чисел.

Правила triad и pair содержат ссылки на иные дополнительные правила: threeDigits, twoDigits, twoDigitsAnother. Схема взаимодействия правил грамматики представлена на Рисунке справа. Каждое правило с помощью элемента <tag> возвращает значение для интерпретации результата распознавания. В представленном ниже примере грамматики интерпретацией речи является число, записанное не словами, а цифрами. Описание правил грамматики представлено в Таблице ниже.

Правило Описание Результаты интерпретации
main основное правило 1 — 999
triad трехзначные числа 100 — 999
pair двузначные числа 10 — 99
threeDigits сотни 100, 200, ..., 900
twoDigits десятки 20, 30, ..., 90
twoDigitsAnother числа от 10 до 19 11, 12, ..., 19
oneDigit единицы, однозначные числа 1, 2, ..., 9

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

Семантическая интерпретация предназначена для присвоения одной или нескольким переменным определенных значений, заданных логикой алгоритма, в соответствии с результатами распознавания речи. Семантическая интерпретация определяется элементом <tag>, который присваивает указанной в нем переменной некоторое значение. Более подробно ознакомиться с механизмом работы семантической интерпретации можно на странице описания элемента <tag> и <grammar>. В представленной ниже грамматики результат семантической интерпретации — число, записанное цифрами.

Пример

Приложение, которое просит абонента назвать число, обрабатывает речь и сообщает результат распознавания (application.lastresult$.utterance) и семантическую интерпретацию (application.lastresult$.interpretation).

<?xml version="1.0" encoding="UTF-8"?> 
<vxml version="2.1" xmlns="http://www.w3.org/2001/vxml" xml:lang="ru-RU">
  <form id="form">
    <field>
 
      <!-- запрос числа -->
      <prompt>Назовите число.</prompt>	 
      <noinput>Говорите громче. <reprompt/> </noinput>
      <nomatch>Не удалось распознать сказанное слово. <reprompt/> </nomatch>
 
      <!-- ссылка на грамматику -->
      <grammar src="number_prompt.xml"/>
      <filled>
 
        <!-- озвучивание результата распознавания -->
        <prompt>
          Вы сказали: <value expr="application.lastresult$.utterance"/>.
          Интерпретация: <value expr="application.lastresult$.interpretation"/>.
        </prompt>
 
        <!-- запись результата распознавания в лог -->
        <log expr="application.lastresult$.utterance" label="utterance"/>
        <log expr="application.lastresult$.interpretation" label="interpretation"/>
      </filled>
    </field> 
  </form> 
</vxml>


Грамматика распознавания чисел (number_prompt.xml)

<grammar xmlns="http://www.w3.org/2001/06/grammar" version="1.0" mode="voice" root="main" xml:lang="ru-RU" tag-format="semantics/1.0">
 
  <!-- главное правило --> 
  <rule id="main">
    <one-of>
      <item><ruleref uri="#triad"/><tag>out=rules.triad;</tag></item>
      <item><ruleref uri="#pair"/><tag>out=rules.pair;</tag></item>
      <item><ruleref uri="#oneDigit"/><tag>out=rules.oneDigit;</tag></item>	
    </one-of>
  </rule>
 
  <!-- правило: трехзначные числа -->
  <rule id="triad">
    <tag>one=0; two=0;</tag>
    <one-of>
      <item>
        <item><ruleref uri="#threeDigits"/></item>
        <item repeat="0-1"><ruleref uri="#oneDigit"/><tag>one=rules.oneDigit;</tag></item>   
        <tag>out=rules.threeDigits+one;</tag>
      </item>
      <item>
        <item><ruleref uri="#threeDigits"/></item>
        <item><ruleref uri="#pair"/><tag>two=rules.pair;</tag></item>
        <tag>out=rules.threeDigits+two;</tag>
      </item>
    </one-of>
  </rule>
 
  <!-- правило: двузначные числа -->
  <rule id="pair">
    <tag>one=0;</tag>
    <one-of>
      <item><ruleref uri="#twoDigitsAnother"/><tag>out=rules.twoDigitsAnother;</tag></item>
      <item>
        <item><ruleref uri="#twoDigits"/></item>
        <item repeat="0-1"><ruleref uri="#oneDigit"/> <tag>one=rules.oneDigit;</tag></item>
        <tag>out=rules.twoDigits+one;</tag>
      </item>
    </one-of>
  </rule>
 
  <!-- правило: сотни -->
  <rule id="threeDigits">
    <one-of>
      <item>сто<tag>out=100;</tag></item>
      <item>двести<tag>out=200;</tag></item>
      <item>триста<tag>out=300;</tag></item>
      <item>четыреста<tag>out=400;</tag></item>
      <item>пятьсот<tag>out=500;</tag></item>
      <item>шестьсот<tag>out=600;</tag></item>
      <item>семьсот<tag>out=700;</tag></item>
      <item>восемьсот<tag>out=800;</tag></item>
      <item>девятьсот<tag>out=900;</tag></item>
    </one-of>
  </rule>
 
  <!-- правило: десятки -->
  <rule id="twoDigits">
    <one-of>
      <item>двадцать<tag>out=20;</tag></item>
      <item>тридцать<tag>out=30;</tag></item>
      <item>сорок<tag>out=40;</tag></item>
      <item>пятьдесят<tag>out=50;</tag></item>
      <item>шестьдесят<tag>out=60;</tag></item>
      <item>семьдесят<tag>out=70;</tag></item>
      <item>восемьдесят<tag>out=80;</tag></item>
      <item>девяносто<tag>out=90;</tag></item>
    </one-of>
  </rule>
 
  <!-- правило: от 10 до 19 -->
  <rule id="twoDigitsAnother">
    <one-of>
      <item>десять<tag>out=10;</tag></item>
      <item>одиннадцать<tag>out=11;</tag></item>
      <item>двенадцать<tag>out=12;</tag></item>
      <item>тринадцать<tag>out=13;</tag></item>
      <item>четырнадцать<tag>out=14;</tag></item>
      <item>пятнадцать<tag>out=15;</tag></item>
      <item>шестнадцать<tag>out=16;</tag></item>
      <item>семнадцать<tag>out=17;</tag></item>
      <item>восемнадцать<tag>out=18;</tag></item>
      <item>девятнадцать<tag>out=19;</tag></item>
    </one-of>
  </rule>
 
  <!-- правило: однозначные числа, единицы -->
  <rule id="oneDigit">
    <one-of>
      <item>один<tag>out=1;</tag></item>
      <item>два<tag>out=2;</tag></item>
      <item>три<tag>out=3;</tag></item>
      <item>четыре<tag>out=4;</tag></item>
      <item>пять<tag>out=5;</tag></item>
      <item>шесть<tag>out=6;</tag></item>
      <item>семь<tag>out=7;</tag></item>
      <item>восемь<tag>out=8;</tag></item>
      <item>девять<tag>out=9;</tag></item>
    </one-of>
  </rule>
</grammar>


Частные случаи работы грамматики представлены в Таблице ниже.

Запрос пользователя Результат распознавания Семантическая интерпретация
один один 1
шестнадцать шестнадцать 16
пятьдесят семь пятьдесят семь 57
сто сто 100
двести пятнадцать двести пятнадцать 215
пятьсот девяносто семь пятьсот девяносто семь 597

Файлы

Скачать файл с грамматикой


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

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

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