Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Costruire semplici grammatiche

Grammatiche in linea e grammatiche DTMF
Grammatiche in linea e grammatiche DTMF
Link copiato negli appunti

Nelle precedenti lezioni ci siamo occupati delle prime grammatiche da inserire all'interno del nostro progetto software scegliendole tra quelle predefinite, adesso vediamo come creare grammatiche specifiche per le nostre applicazioni.

Nelle attuali specifiche W3C vi sono due possibili formati per le grammatiche:

  • Augmented BNF syntax (ABNF): sono grammatiche di tipo plain-text, simili alle tradizionali grammatiche telefoniche (BNF), e a molte rappresentazione delle grammatiche usate nel campo della speech recognition tra cui le JSpeech Grammar Format [JSGF] dalle quali sono derivate.
  • XML: sono grammatiche che usano XML per rappresentare i costrutti delle grammatiche e sono quelle che useremo negli esempi del nostro corso,

Come già detto, una grammatica è un insieme di regole che definiscono un dizionario di riconoscimento per un determinato campo all'interno del form, o più genericamente, un insieme di comandi utilizzabili in un dato ambito, è, infatti, possibile riutilizzare la stessa grammatica in diversi contesti.

All'interno della grammatica dovremmo indicare:

  • le parole, o i comandi, che possono essere pronunciati dall'utente:supponiamo che la nostra grammatica abbia come scopo quello di scegliere la notizia del giorno tra determinati comandi: "indietro", "menu principale" e "operatore". La nostra grammatica dovrà contenere assolutamente questi tre comandi.
  • L'ordine nel quale queste parole possono essere pronunciate dall'utente: i tre comandi, non sempre sono sufficienti, dobbiamo pensare che spesso gli utenti si rivolgono ad un'applicazione in un linguaggio più articolato, quindi dovremo includere anche espressioni come "voglio parlare con l'operatore", "passami l'operatore" etc..
  • La pronuncia di ogni parola

Per fare questo cominciamo a vedere come inserire una grammatica in un form, partiamo dal codice 3.1, in quel listato abbiamo usato una grammatica di tipo "boolean", per chiedere all'utente una conferma. Questa grammatica prevedeva l'utilizzo del tasto "1" o del tasto "2", ma se volessimo dare all'utente, per esempio, la possibilità di tornare alla pagina precedente o di chiedere l'aiuto di un'operatore, avremmo bisogno di definire una nuova grammatica.

Per costruire la grammatica, anzitutto chiediamoci quali siano le opzioni possibili dell'utente, nel nostro caso possiamo accontentarci dei seguenti casi:

  • Tasto "1": conferma la scelta.
  • Tasto "2": non Conferma la scelta.
  • Tasto "9": torna al menu precedente.
  • Tasto "0": passa all'operatore.

Detto questo scriviamo subito il codice corrispondente.

Listato 3.4: Grammatica DTMF in linea

...
<form>
 <field name="field1" >
  <prompt> confermi la tua scelta? </prompt>
  
  <grammar type="application/srgs+xml" mode="dtmf" tag-format="Nuance">
   <rule id="myRule">
    <one-of>
     <item> 1 </item>
     <item> 2 </item>
     <item> 9 </item>
     <item> 0 </item>
    </one-of>
   </rule>
  </grammar>
  
  <filled>
  ...
  </filled>
 </field>
</form>
...

Una grammatica si apre con il tag <grammar>, all'interno del quale è previsto che siano esplicitati alcuni attributi tra cui:

  • mode: indica la modalitàdell'input che rendiamo disponibile all'utente, i valori che può assumere sono: "dtmf" per un input di tipo a toni e "voice" per grammatiche di tipo vocale.
  • tag-format: ci dice quali sono le specifiche per l'interpretazione semantica, che vedremo tra poco.

Sotto il tag troviamo <rule> che introduce il concetto di regola: ovvero un'insieme di espressioni (item) o di sotto-regole (altre rule). L'utilizzo di rule è fondamentale nel momento in cui comincieremo a costruire grammatiche di riconoscimento complesse.

Ogni regola deve essere associata ad un "id" che la possa identificare in modo univoco all'interno della grammatica. All'interno della regola troviamo l'elenco degli elementi possibili, tale elenco può essere composto da:

  • rule: altre regole che intendiamo richiamare.
  • Item: sono gli elementi che compongono la grammatica, ovvero le singole parole, o combinazioni di parole, e sono definiti dal tag <item>.
  • Regole speciali: sono regole che definiscono casi particolari di interpretazione. Le tre regole speciali sono: "null", "void" e "garbage".
    • Null definisce una regola che fa matching automaticamente, anche nel caso in cui l'utente non dica nulla.
    • Void indica una regola che contiene parole che non devono essere dette, l'uso di void all'interno di una sequenza fa si che la sequenza non possa essere riconosciuta.
    • Garbage indica una regola che fa matching con qualsiasi parola pronunciata dall'utente, fino al prossimo elemento valido.

All'interno di una regola possiamo inserire combinazioni di elementi, tali combinazioni possono essere di due tipi:

  • Lista di elementi che possono essere scelti in modo esclusivo, in questo caso, come nel caso del listato 3.4 usiamo il tag <one-of> per aprire una lista di elementi.
  • Serie di elementi in sequenza: in questo caso pensiamo ad una serie di parole che possono essere pronunciate una di seguito all'altra, per esempio: "vorrei", "parlare", "con", "l'operatore", in questo caso basta indicare i diversi elementi uno di seguito all'altro.

Vediamo un esempio di una serie di elementi in sequenza:

Listato 3.5: Serie di elementi

...
<form>
 <field name="field1" >
  <prompt> confermi la tua scelta? </prompt>
  
  <grammar type="application/srgs+xml" mode="dtmf" tag-format="Nuance">
   <rule id="myRule">
    <item> si </item>
    <item> sono </item>
    <item> sicuro </item>
   </rule>
  </grammar>
  
  <filled>
  ...
  </filled>
 </field>
</form>
...

In questo caso il sistema riconosce soltanto: "si sono sicuro".

Ti consigliamo anche