Speech Recognition Grammar Specification (SRGS) es un estándar W3C sobre cómo se especifican las gramáticas de reconocimiento de voz . Una gramática de reconocimiento de voz es un conjunto de patrones de palabras y le dice a un sistema de reconocimiento de voz qué esperar que diga un humano. Por ejemplo, si llama a una aplicación de operadora automática , le pedirá el nombre de una persona (con la expectativa de que su llamada se transfiera al teléfono de esa persona). A continuación, iniciará un reconocedor de voz, dándole una gramática de reconocimiento de voz. Esta gramática contiene los nombres de las personas en el directorio del asistente automático y una colección de patrones de oraciones que son las respuestas típicas de las personas que llaman al mensaje.
SRGS especifica dos sintaxis alternativas pero equivalentes, una basada en XML y otra que usa formato BNF aumentado . En la práctica, la sintaxis XML se utiliza con mayor frecuencia.
Tanto la forma ABNF como XML tienen el poder expresivo de una gramática libre de contexto . Un procesador gramatical que no admite gramáticas recursivas tiene el poder expresivo de una máquina de estados finitos o un lenguaje de expresión regular .
Si el reconocedor de voz devuelve solo una cadena que contiene las palabras reales pronunciadas por el usuario, la aplicación de voz tendría que hacer el tedioso trabajo de extraer el significado semántico de esas palabras. Por esta razón, las gramáticas SRGS pueden decorarse con elementos de etiqueta , que cuando se ejecutan, construyen el resultado semántico. SRGS no especifica el contenido de los elementos de la etiqueta: esto se hace en un estándar complementario del W3C, Semantic Interpretation for Speech Recognition (SISR). SISR se basa en ECMAScript , y las declaraciones de ECMAScript dentro de las etiquetas SRGS crean un objeto de resultado semántico de ECMAScript que es fácil de procesar para la aplicación de voz.
Tanto SRGS como SISR son Recomendaciones del W3C, la etapa final de la pista de estándares del W3C. El estándar W3C VoiceXML , que define cómo se especifican los diálogos de voz, depende en gran medida de SRGS y SISR.
Ejemplos de
Aquí hay un ejemplo del BNF aumentado de SRGS, ya que podría usarse en una aplicación de operadora automática:
# ABNF 1.0 ISO-8859-1 ; // El idioma de gramática predeterminado es el idioma inglés de EE . UU . En-US ; // Adjunto de un solo idioma a los tokens // Tenga en cuenta que "fr-CA" (francés canadiense) se aplica solo // a la palabra "oui" debido a las reglas de precedencia $ yes = yes | oui! fr-CA ; // Adjunto en un solo idioma a una expansión $ people1 = ( Michel Tremblay | André Roy ) ! Fr-CA ; // Manejo de pronunciaciones específicas del idioma de la misma palabra // Un reconocedor de voz capaz escuchará las pronunciaciones en español mexicano y // en inglés de EE. UU. $ people2 = Jose! en-US | Jose! Es-MX ; / ** * Entrada multilingüe posible * @example ¿ puedo hablar con André Roy * @example puedo hablar con Jose * / public $ request = puedo hablar con ( $ people1 | $ people2 ) ;
Aquí está el mismo ejemplo de SRGS, usando el formulario XML:
xml version = "1.0" encoding = "ISO-8859-1"?> "http://www.w3.org/TR /speech-grammar/grammar.dtd "> 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" versión = "1.0" > archivo adjunto de un solo idioma a los tokens "yes" hereda el idioma inglés de EE. UU. "oui" es el idioma francés canadiense -> id = "yes" > yes xml : lang = "fr-CA" > oui id = "people1" > xml: lang = "fr-CA" > Michel Tremblay André Roy < / item> Manejo de pronunciaciones específicas del idioma de la misma palabra Un reconocedor de voz capaz escuchará las pronunciaciones del español mexicano y del inglés estadounidense. -> id = "people2" > xml: lang = "en-US" > Jose xml: lang = "es-MX" > Jose id = "request" scope = "public" > ¿ puedo hablar con André Roy puedo hablar con Jose Puedo hablar con -
uri = "# people1" /> -
uri = "# people2" /> < / gramática>