Domanda

Sto usando un motore basato sulla TellMe. Ho visto esempi di grammatiche in cui l'utente può dire una delle poche cose diverse che sono considerati la stessa cosa. Tuttavia, tutti gli esempi che ho visto sono stati per le grammatiche in linea (che non funzionano con il motore di im VXML usando). Vorrei sapere come posso cambiare il mio file .grxml per fare questo. Questo è il file:

<?xml version="1.0"?>
<!-- created by Matthew Murdock. Grammars for speech rec menus -->
<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" version="1.0" mode="voice" scope="dialog" tag-format="semantics/1.0.2006">
   <rule id="keep">
      <one-of>
         <item>exit</item>
         <item>exit the system</item>
         <item>another</item>
         <item>another mailbox</item>
         <item>play</item>
         <item>play back</item>                      
      </one-of>
   </rule>
</grammar>

invece di avere 6 elementi, voglio avere 3 elementi, ciascuno con due possibili espressioni. Tutte le idee su come posso fare questo?

È stato utile?

Soluzione 3

ho capito. Ho cambiato la mia grammatica di simile a questa:

<?xml version="1.0"?>
<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" version="1.0" mode="voice" scope="dialog" tag-format="semantics/1.0-literals">
   <rule id="keep">
      <one-of>
         <item><ruleref id="#exit"/></item>
         <item><ruleref id="#play"/></item>
      </one-of>
   </rule>
   <rule id="exit">
      <one-of>
         <item>exit</item>
         <item>exit the system</item>
      </one-of>
      <tag>out.result = "exit"</tag>
   </rule>
   <rule id="play">
      <one-of>
         <item>play</item>
         <item>play back</item>
      </one-of>
      <tag>out.result = "play"</tag>
   </rule>
</grammar>

Poi, di nuovo nel mio script, invece di basare le mie azioni sul callerInput (variabile specificata nel tag <field>), li ho in base al largo di callerInput $ L'interpretazione che detiene XML contenente tutto ciò che ho assegnato out.result al nell'elemento <tag> della grammatica.

Credo che abbia senso basare le vostre azioni sulla "interpretazione" e non di input letterale del chiamante.

. NOTA: perché stiamo lavorando con il nostro proprio motore VXML siamo stati in grado di creare un metodo per estrarre il valore dell'interpretazione fuori dalla xml

Altri suggerimenti

Una forma più compatta:

  <rule id="exit">
    exit <item repeat="0-1">the system</item>
    <tag>out.result = "exit"</tag>
  </rule>
  <rule id="play">
    play <item repeat="0-1">back</item>
    <tag>out.result = "play"</tag>
  </rule>

Le risposte desiderate sono nella SISR specifica che fornisce un meccanismo per allegando significato di percorsi di ingresso. Riscrivere il tuo esempio:

<?xml version="1.0"?>
<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" version="1.0" mode="voice" scope="dialog" tag-format="semantics/1.0-literals">
   <rule id="keep">
      <one-of>
       <item>
        <one-of>
         <item>exit</item>
         <item>exit the system</item>
        </one-of>
        <tag>exit</tag>
        </item>

       <item>
        <one-of>
         <item>another</item>
         <item>another mailbox</item>
        </one-of>
        <tag>another</tag>
       </item>

       <item>
        <one-of>
         <item>play</item>
         <item>play back</item>                      
        </one-of>
        <tag>play</tag>
       </item>
      </one-of>
   </rule>
</grammar>

Molte cose da sapere:

  • ho scelto il formato di tag letterale (notare l'attributo di tag-formato dell'elemento grammaticale). Avrebbe potuto essere anche implementato usando "semantica / 1.0" e il contenuto del tag avrebbe guardato come: out = "uscita";
  • I valori tag formato Tellme possono avere bisogno di essere diversi, ma la loro Guida allo sviluppo implica che seguono gli standard.
  • Una volta che avete a lavorare, non esitate a creare grammatiche di riempimento (in SRGS parlare, regole). regole Filler sarebbero modalità senza SI (senza elementi tag) e contengono frasi comuni persone aggiungono a risposte. Ad esempio, una regola finale che potrebbe essere aggiunto alla fine della tua grammatica:
      </one-of>
      <item repeat="0-1"><ruleref uri="#trailing"/></item>
   </rule>

   <rule id="trailing>
      <one-of>
         <item>please</item>
         <item>thank you</item>

      </one-of>
   </rule>

</grammar>

Questa sosterrebbe tipi più naturali di risposte. Questo può o non può essere importante a seconda della base di chiamata. grammatiche Filler possono essere molto grandi, ma tendono ad essere altamente riutilizzabile. È inoltre possibile aggiungere riempitivo all'inizio di ingresso. Nelle applicazioni ricche di discorso, un guadagno più significativo nel processo di messa a punto prevede l'aggiornamento della grammatica per contenere le frasi effettive pronunciate dal chiamante rispetto a ciò che sarebbe parlato lo sviluppatore o VUI pensiero di design.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top