Question

J'utilise un moteur basé sur TellMe. Je l'ai vu des exemples de grammaires où l'utilisateur peut dire l'un des quelques choses différentes qui sont considérés comme les mêmes. Cependant, tous les exemples que j'ai vu ont été pour les grammaires en ligne (qui ne fonctionnent pas avec le moteur VXML im en utilisant). Je veux savoir comment je peux changer mon dossier .grxml pour ce faire. Ceci est le fichier:

<?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>

au lieu d'avoir 6 points, je veux avoir 3 éléments, chacun ayant deux énoncés possibles. Toutes les idées sur la façon dont je peux le faire?

Était-ce utile?

La solution 3

Je compris. J'ai changé la grammaire à ressembler à ceci:

<?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>

Alors, dans mon script au lieu de baser mes actions sur callerInput (la variable spécifiée dans la balise <field>), je les ai basé sur des callerInput .interpretation $ qui détient xml contenant tout ce que je out.result dans affecté l'élément <tag> de la grammaire.

Je suppose qu'il est logique de baser vos actions sur la « interprétation » et non entrée littérale de l'appelant.

NOTE:. Parce que nous travaillons avec notre propre moteur VXML, nous avons pu créer une méthode pour extraire la valeur d'interprétation hors du xml

Autres conseils

Une forme plus compacte:

  <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>

Les réponses que vous voulez sont dans la spécification SISR qui fournit un mécanisme pour donnant un sens à des chemins d'entrée. Réécriture votre exemple:

<?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>

Plusieurs choses à savoir:

  • J'ai choisi le format de l'étiquette littérale (notez l'attribut balise format de l'élément de grammaire). Il aurait aussi pu être mis en œuvre en utilisant « la sémantique / 1.0 » et le contenu de la balise aurait ressemblé: out = « sortie »;
  • valeurs tag format TellMe peuvent doivent être différentes, mais leur guide de développement implique qu'ils suivent les normes.
  • Une fois que vous avez à travailler, ne pas hésiter à créer grammaires remplissage (en SRGS parler, règles). règles de remplissage seraient règles sans SI (aucun des éléments d'étiquette) et contiennent des phrases communes que les gens ajoutent des réponses. Par exemple, une règle de fuite qui pourrait être ajouté à la fin de votre grammaire:
      </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>

soutiendrait plusieurs types naturels de réponses. Cela peut ou peut ne pas être importante en fonction de votre base d'appel. grammaires charge peut être très grande, mais ont tendance à être très réutilisable. Vous pouvez également ajouter au remplissage au début de l'entrée. Dans les applications vocales riches, un plus un gain important dans le processus de mise au point consiste à mettre à jour la grammaire pour contenir les phrases réelles parlées par l'appelant par rapport à ce que le développeur ou la pensée designer VUI seraient parlées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top