add first grammar and nlu from example
This commit is contained in:
parent
cfbb0317af
commit
b2a2cd6b9f
40
example_nlu.py
Normal file
40
example_nlu.py
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
import jsgf
|
||||||
|
|
||||||
|
book_grammar = jsgf.parse_grammar_file('grammar1.jsgf')
|
||||||
|
book_grammar
|
||||||
|
|
||||||
|
|
||||||
|
def get_dialog_act(rule):
|
||||||
|
slots = []
|
||||||
|
get_slots(rule.expansion, slots)
|
||||||
|
return {'act': rule.grammar.name, 'slots': slots}
|
||||||
|
|
||||||
|
def get_slots(expansion, slots):
|
||||||
|
if expansion.tag != '':
|
||||||
|
slots.append((expansion.tag, expansion.current_match))
|
||||||
|
return
|
||||||
|
|
||||||
|
for child in expansion.children:
|
||||||
|
get_slots(child, slots)
|
||||||
|
|
||||||
|
if not expansion.children and isinstance(expansion, jsgf.NamedRuleRef):
|
||||||
|
get_slots(expansion.referenced_rule.expansion, slots)
|
||||||
|
|
||||||
|
def nlu(utterance):
|
||||||
|
matched = book_grammar.find_matching_rules(utterance)
|
||||||
|
|
||||||
|
if matched:
|
||||||
|
return get_dialog_act(matched[0])
|
||||||
|
else:
|
||||||
|
return {'act': 'null', 'slots': []}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
utterance = 'chciałbym zarezerwować stolik na jutro na godzinę dwunastą trzydzieści na pięć osób'
|
||||||
|
matched = book_grammar.find_matching_rules(utterance)
|
||||||
|
matched
|
||||||
|
|
||||||
|
nlu('chciałbym zarezerwować stolik na jutro na godzinę dziesiątą dla trzech osób')
|
||||||
|
|
||||||
|
get_dialog_act(matched[0])
|
107
grammar1.jsgf
Normal file
107
grammar1.jsgf
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
#JSGF V1.0;
|
||||||
|
|
||||||
|
/
|
||||||
|
* Polecenia użytkownika
|
||||||
|
*/
|
||||||
|
public <command> = (dodaj | usuń | zaktualizuj | przeczytaj | kontynuuj | przejdź_do | sprawdź | zakończ);
|
||||||
|
|
||||||
|
/
|
||||||
|
* Lista produktów
|
||||||
|
*/
|
||||||
|
public <products> = (jajka | chleb | mleko | ser | woda | cukier | sól | mięso_wołowe | mięso_kurczak | mięso_indyk | mięso_wieprzowe | bułka_tarta | kajzerka);
|
||||||
|
|
||||||
|
/
|
||||||
|
* Wszystkie produkty w sklepie
|
||||||
|
*/
|
||||||
|
public <all_products> = (<products>);
|
||||||
|
|
||||||
|
/
|
||||||
|
* Wszystkie typy mięsa mielonego
|
||||||
|
*/
|
||||||
|
public <meat_types> = (mięso_wołowe | mięso_kurczak | mięso_indyk | mięso_wieprzowe);
|
||||||
|
|
||||||
|
/
|
||||||
|
* Wszystkie jednostki miary
|
||||||
|
*/
|
||||||
|
public <units> = (kg | dag | g | sztuki);
|
||||||
|
|
||||||
|
/
|
||||||
|
* Komendy dotyczące koszyka
|
||||||
|
*/
|
||||||
|
public <cart_command> = (dodaj | usuń | zaktualizuj | przeczytaj | kontynuuj | przejdź_do | sprawdź | pusty_koszyk);
|
||||||
|
|
||||||
|
/
|
||||||
|
* Pytania użytkownika
|
||||||
|
*/
|
||||||
|
public <question> = (jaka_jest_cena | kiedy_mogę_odebrać | jakie_są_dostępne_produkty | jakie_jest_cena | jaki_jest_stan_magazynowy | czy_chcę_zapłacić_online | jakie_są_opłaty | jakie_są_promocje | jakie_są_godziny_otwarcia);
|
||||||
|
|
||||||
|
/
|
||||||
|
* Witamy użytkownika w systemie
|
||||||
|
*/
|
||||||
|
public <welcome> = (Witaj użytkowniku <number> w systemie zakupów sieci sklepów spożywczych "Galaktyczny Skład".);
|
||||||
|
|
||||||
|
/
|
||||||
|
* Powitanie użytkownika w sklepie
|
||||||
|
*/
|
||||||
|
public <greeting> = (Dzień dobry | Cześć | Witaj);
|
||||||
|
|
||||||
|
/
|
||||||
|
* Wszystkie pytania użytkownika
|
||||||
|
*/
|
||||||
|
public <all_questions> = (<question>)+;
|
||||||
|
|
||||||
|
/
|
||||||
|
* Wszystkie komendy dotyczące koszyka
|
||||||
|
*/
|
||||||
|
public <all_cart_commands> = (<cart_command>)+;
|
||||||
|
|
||||||
|
/
|
||||||
|
* Dialog
|
||||||
|
/
|
||||||
|
public <dialog> = <welcome> <greeting> <command> (<products> | <meat_types> | <units> | koszyk | żadne | <all_cart_commands> | <all_questions>)+;
|
||||||
|
|
||||||
|
|
||||||
|
public <request> = dla jakiego rodzaju sklepów działa system |
|
||||||
|
chcę kupić |
|
||||||
|
zamówienie |
|
||||||
|
potrzebuję zakupów |
|
||||||
|
jakie sklepy oferuje system ;
|
||||||
|
|
||||||
|
|
||||||
|
public <inform> = w naszej ofercie znajdują się produkty spożywcze |
|
||||||
|
dodano {<list>} do koszyka |
|
||||||
|
karta lojalnościowa założona pomyślnie |
|
||||||
|
na numer telefonu zostanie wysłany sms z informacją gdy zakupy będą gotowe do odbioru |
|
||||||
|
dziękujemy za skorzystanie ze sklepu {<shopname>} ;
|
||||||
|
|
||||||
|
|
||||||
|
public <deny> = nie |
|
||||||
|
nie ten |
|
||||||
|
zmień |
|
||||||
|
nie chcę |
|
||||||
|
nie teraz |
|
||||||
|
nie tak |
|
||||||
|
cofnij |
|
||||||
|
usuń <productname> <brandname> z listy;
|
||||||
|
|
||||||
|
|
||||||
|
public <inform> = dodaj do listy zakupów <brandname>;
|
||||||
|
|
||||||
|
public <reqalts> = ale może coś innego |
|
||||||
|
czy jest jakaś inna opcja ;
|
||||||
|
|
||||||
|
public <affirm> = tak |
|
||||||
|
zgoda |
|
||||||
|
oczywiście |
|
||||||
|
dokładnie |
|
||||||
|
pewnie |
|
||||||
|
jasne |
|
||||||
|
dobrze |
|
||||||
|
właśnie tak |
|
||||||
|
ok |
|
||||||
|
rozumiem ;
|
||||||
|
|
||||||
|
public <bye> = do widzenia |
|
||||||
|
dziękuję |
|
||||||
|
miłego dnia |
|
||||||
|
do zobaczenia ;
|
Loading…
Reference in New Issue
Block a user