Frage

Ich bin mit einem Motor basierend auf TellMe. Ich habe Beispiele von Grammatiken gesehen, wo der Benutzer eines von ein paar verschiedenen Dingen sagen kann, die die gleiche betrachtet werden. Allerdings sind alle Beispiele, die ich gesehen habe, haben für in-line Grammatiken gewesen (die Arbeit mit dem vxml Motor im nicht verwenden). Ich möchte wissen, wie kann ich meine .grxml Datei, dies zu tun ändern. Dies ist die Datei:

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

statt 6 Artikel zu haben, möchte ich drei Elemente haben, die jeweils mit zwei möglichen Äußerungen. Alle Ideen, wie kann ich das tun?

War es hilfreich?

Lösung 3

dachte ich es aus. Ich änderte meine Grammatik wie folgt aussehen:

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

Dann in meinem Skript zurück, anstatt zu stützen meine Handlungen auf callerInput (die Variable in der <field> Tag angegeben), i basiert sie von callerInput $ Die Interpretation aus, die xml hält enthält alles, was ich in dem <tag> Element zugeordnet out.result die Grammatik.

Ich denke, es macht Sinn Ihre Aktionen auf der „Interpretation“ zu gründen und nicht auf den wörtlichen Eingabe des Anrufers.

. Hinweis: Da wir mit unserem eigenen vxml Motor arbeiten wir in der Lage waren zum Extrahieren der Interpretation Wertes aus dem xml ein Verfahren zu schaffen

Andere Tipps

Eine kompaktere Form:

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

Die Antworten Sie sind in der SISR Spezifikation, die für einen Mechanismus bereit, Anbringen Bedeutung Eingangspfade. Umschreiben Ihr Beispiel:

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

Mehr Dinge zu wissen:

  • wählte ich das wörtliche Tag-Format (man beachte das Tag-Format-Attribut des Grammatik-Elements). Es könnte auch umgesetzt wurde „Semantik / 1.0“ und den Inhalt des Tags verwenden würde wie ausgesehen hat: out = „exit“;
  • TellMe-Tag-Formatwerte müssen möglicherweise anders sein, aber ihre -Entwicklung impliziert sie die Standards folgen.
  • Wenn Sie es haben arbeiten, zögern Sie nicht Füllstoff Grammatiken zu erstellen (in SRGS sprechen, Regeln). Filler Regeln würden Regeln werden ohne SI (keine Tag-Elemente) und enthalten allgemeine Phrasen Menschen Antworten hinzufügen. Zum Beispiel kann eine Nachlauf Regel, die am Ende Ihrer Grammatik hinzugefügt werden:
      </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>

Dies würde mehr natürliche Arten von Antworten unterstützen. Dies kann, je nach Ihrer Berufung Basis nicht wichtig sein. Filler Grammatiken können sehr groß sein, aber neigen dazu, sehr wiederverwendbar zu sein. Sie können auch Füllstoff zu Beginn der Eingabe hinzufügen. In der reichen Sprachanwendungen, beinhaltet eine der wichtigste Verstärkung im Abstimmungsprozess der Aktualisierung die Grammatik der tatsächlichen Sätze vom Anrufer gegenüber gesprochen enthalten, was würde der Entwickler oder VUI Designer Gedanken gesprochen werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top