Speech Recognition Grammar Specification

Speech Recognition Grammar Specification (SRGS) - это стандарт W3C на определение грамматики распознавания речи. Грамматика распознавания речи представляет собой набор шаблонов слов и указывает системе распознавания речи, что именно должен сказать человек. Например, если вы звоните в приложение автосекретаря, оно попросит вас назвать имя человека (с расчетом на то, что ваш звонок будет переведен на телефон этого человека). После этого запускается распознаватель речи, который выдает грамматику распознавания речи. Эта грамматика содержит имена людей в справочнике автосекретаря и набор шаблонов предложений, которые являются типичными ответами звонящих на запрос.

SRGS определяет два альтернативных, но эквивалентных синтаксиса: один основан на XML, а другой использует дополненный формат BNF. На практике чаще используется синтаксис XML.

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

Если бы распознаватель речи возвращал только строку, содержащую реальные слова, произнесенные пользователем, то голосовому приложению пришлось бы проделать утомительную работу по извлечению семантического смысла из этих слов. По этой причине грамматики SRGS могут быть украшены элементами-тегами, которые при выполнении формируют семантический результат.

Пример разметки

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE grammar PUBLIC "-//W3C//DTD GRAMMAR 1.0//EN"
                  "http://www.w3.org/TR/speech-grammar/grammar.dtd">
  
<!-- the default grammar language is US English -->
<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-US" version="1.0">
  
  <!--
     single language attachment to tokens
     "yes" inherits US English language
     "oui" is Canadian French language
  -->
  <rule id="yes">
    <one-of>
      <item>yes</item>
      <item xml:lang="fr-CA">oui</item>
    </one-of>
  </rule> 
  
  <!-- Single language attachment to an expansion -->
  <rule id="people1">
    <one-of xml:lang="fr-CA">
      <item>Michel Tremblay</item>
      <item>André Roy</item>
    </one-of>
  </rule>
  
  <!--
     Handling language-specific pronunciations of the same word
     A capable speech recognizer will listen for Mexican Spanish 
     and US English pronunciations.
  -->
  <rule id="people2">
    <one-of>
      <item xml:lang="en-US">Jose</item>
      <item xml:lang="es-MX">Jose</item>
    </one-of>
  </rule>
  
  <!-- Multi-lingual input is possible -->
  <rule id="request" scope="public">
    <example> may I speak to André Roy </example>
    <example> may I speak to Jose </example>
  
    may I speak to
    <one-of>
      <item> <ruleref uri="#people1"/> </item>
      <item> <ruleref uri="#people2"/> </item>
    </one-of>
  </rule>
</grammar>

Источники