Speech Recognition Grammar Specification (SRGS) — это стандарт W3C для спецификации грамматик распознавания речи . Грамматика распознавания речи — это набор шаблонов слов, который сообщает системе распознавания речи, чего ожидать от человека. Например, если вы позвоните в приложение автосекретаря , оно запросит у вас имя человека (ожидая, что ваш звонок будет переведен на телефон этого человека). Затем оно запустит распознаватель речи, задав ему грамматику распознавания речи. Эта грамматика содержит имена людей в справочнике автосекретаря и набор шаблонов предложений, которые являются типичными ответами звонящих на запрос.
SRGS определяет два альтернативных, но эквивалентных синтаксиса, один из которых основан на XML , а другой использует расширенный формат BNF . На практике синтаксис XML используется чаще.
Форма ABNF и XML обладают выразительной силой контекстно -свободной грамматики . Грамматический процессор, не поддерживающий рекурсивные грамматики, обладает выразительной силой конечного автомата или языка регулярных выражений .
Если бы распознаватель речи возвращал только строку, содержащую фактические слова, произнесенные пользователем, голосовому приложению пришлось бы выполнять утомительную работу по извлечению семантического значения из этих слов. По этой причине грамматики SRGS могут быть украшены элементами тегов , которые при выполнении создают семантический результат. SRGS не определяет содержимое элементов тегов: это делается в сопутствующем стандарте W3C, семантической интерпретации для распознавания речи (SISR). SISR основан на ECMAScript , а операторы ECMAScript внутри тегов SRGS создают объект семантического результата ECMAScript, который легко обрабатывает голосовое приложение.
Оба документа SRGS и SISR являются рекомендациями W3C, заключительным этапом стандартного пути W3C. Стандарт W3C VoiceXML , определяющий, как специфицируются голосовые диалоги, в значительной степени зависит от SRGS и SISR.
Вот пример расширенной БНФ SRGS, которую можно использовать в приложении автосекретаря:
#ABNF 1.0 ISO-8859-1 ; // Язык грамматики по умолчанию — американский вариант английского языка en-US ; // Одноязычное присоединение к токенам // Обратите внимание, что "fr-CA" (канадский французский) применяется только к // слову "oui" из-за правил приоритета $yes = yes | oui!fr-CA ; // Одноязычное присоединение к расширению $people1 = ( Michel Tremblay | André Roy ) !fr-CA ; // Обработка произношений одного и того же слова, специфичных для разных языков // Эффективный распознаватель речи будет слушать произношения мексиканского испанского и // американского варианта английского языка. $people2 = Jose!en-US | Jose!es-MX ; /** * Возможен многоязычный ввод * @example могу ли я поговорить с Андре Роем * @example могу ли я поговорить с Хосе */ public $request = могу ли я поговорить с ( $people1 | $people2 ) ;
Вот тот же пример SRGS, использующий XML-форму:
<?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"> <!-- язык грамматики по умолчанию - американский английский --> <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" > <!-- одноязыковое вложение в токены "yes" наследует американский английский язык "oui" — канадский французский язык --> <rule id= "yes" > <one-of> <item> yes </item> <item xml:lang= "fr-CA" > oui </item> </one-of> </rule> <!-- Одноязыковое присоединение к расширению --> <rule id= "people1" > <one-of xml:lang= "fr-CA" > <item> Мишель Трембле </item> <item> Андре Руа </item> </one-of> </rule> <!-- Обработка произношений одного и того же слова, специфичных для разных языков Эффективный распознаватель речи будет слушать произношения на мексиканском испанском и американском английском. --> <rule id= "people2" > <one-of> <item xml : lang= "en-US" > Хосе </item> < item xml:lang= "es-MX" > Хосе </item> </one-of> </rule> <!-- Возможен многоязычный ввод --> <rule id= "request" scope= "public" > <example> могу ли я поговорить с Андре Руа ? </example> <example> могу ли я поговорить с Хосе? </example> могу ли я поговорить с <one-of> <item> <ruleref uri= "#people1" /> </item> <item> <ruleref uri= "#people2" /> </item> </one-of> </rule> </grammar>