add first grammar and nlu from example

This commit is contained in:
Eugene 2023-05-03 21:42:35 +02:00
parent cfbb0317af
commit b2a2cd6b9f
2 changed files with 147 additions and 0 deletions

40
example_nlu.py Normal file
View 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
View 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 ;