working jsgf
This commit is contained in:
parent
5c18bc5b9a
commit
6090d5d923
89
book.jsgf
89
book.jsgf
@ -2,6 +2,17 @@
|
|||||||
|
|
||||||
grammar book;
|
grammar book;
|
||||||
|
|
||||||
|
public <hello> = <hej_siema> <who_are_you> | witam system | dzien dobry | czesc | witam ;
|
||||||
|
|
||||||
|
public <welcomemsg> = czesc jestem agentem dialogowym przyjmujacym zamowienia w restauracji moge doradzic ci w wyborze odpowiedniej pozycji z menu w czym moge ci pomoc ;
|
||||||
|
|
||||||
|
public <ack> = potwierdzam | tak | tak potwierdzam | tak to wszystko | to poprosze | super to zatem wszystko | oki | to odbiore ;
|
||||||
|
|
||||||
|
<hej_siema> = hej | siema | czesc | witam ;
|
||||||
|
|
||||||
|
<who_are_you> = w czym mozesz mi pomoc | w czym mi mozesz pomoc | jakim botem jestes | czym sie zajmujesz ;
|
||||||
|
|
||||||
|
|
||||||
public <rezerwuj> = chcialbym zarezerwowac stolik <dzien_rezerwacji> <godzina_rezerwacji> <liczba_osob> ;
|
public <rezerwuj> = chcialbym zarezerwowac stolik <dzien_rezerwacji> <godzina_rezerwacji> <liczba_osob> ;
|
||||||
|
|
||||||
<dzien_rezerwacji> = (na | w) <dzien> {day};
|
<dzien_rezerwacji> = (na | w) <dzien> {day};
|
||||||
@ -19,81 +30,3 @@ public <rezerwuj> = chcialbym zarezerwowac stolik <dzien_rezerwacji> <godzina_re
|
|||||||
<liczba_osob> = (na | dla) <liczba> {size} osob;
|
<liczba_osob> = (na | dla) <liczba> {size} osob;
|
||||||
|
|
||||||
<liczba> = dwie | dwoch | trzy | trzech | cztery | czterech | piec | pieciu | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10;
|
<liczba> = dwie | dwoch | trzy | trzech | cztery | czterech | piec | pieciu | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10;
|
||||||
|
|
||||||
<menu> = <przystawki> | <zupy> | <dania_glowne> | <desery>;
|
|
||||||
|
|
||||||
<przystawki> = Tatar wolowy | Carpaccio z buraka | Salatka caprese;
|
|
||||||
|
|
||||||
<zupy> = Krem z dyni | Rosol z makaronem | Zupa grzybowa;
|
|
||||||
|
|
||||||
<dania_glowne> = Stek z poledwicy wolowej | Pieczona kaczka z jablkami | Lasagne | Ryba z grilla | Risotto z kurczakiem i grzybami | Pierogi ruskie | Placki ziemniaczane;
|
|
||||||
|
|
||||||
<desery> = Tiramisu | Szarlotka | Lody waniliowe;
|
|
||||||
|
|
||||||
<zamowienie> = <potrawa>* <potwierdzenie> [<oczekiwanie>];
|
|
||||||
|
|
||||||
<potrawa> = <menu> | <napoj>;
|
|
||||||
|
|
||||||
<napoj> = cola | woda | lemoniada | piwo;
|
|
||||||
|
|
||||||
<potwierdzenie> = (potwierdzam | ok | dobrze | zgoda);
|
|
||||||
|
|
||||||
<oczekiwanie> = (czekaj | prosze czekac | odbior za <minuty> minut);
|
|
||||||
|
|
||||||
<potrawa_dodatkowa> = z sosem smietanowym;
|
|
||||||
|
|
||||||
<potrawa_specjalna> = bez cebuli;
|
|
||||||
|
|
||||||
<potrawa_dieta_keto> = Tatar wolowy | Zupa grzybowa | Stek z poledwicy wolowej;
|
|
||||||
|
|
||||||
<godzina_zamowienia> = na <godzina>;
|
|
||||||
|
|
||||||
<dzien_zamowienia> = na <dzien>;
|
|
||||||
|
|
||||||
<liczba_porcji> = <liczba> porcje;
|
|
||||||
|
|
||||||
<informacja_dodatkowa> = Pamietajcie zeby bylo cieple;
|
|
||||||
|
|
||||||
<liczba_minut> = <liczba> minut;
|
|
||||||
|
|
||||||
<koniec_rozmowy> = Dziekuje | Dziekuje to wszystko | Okej to wszystko | To wszystko | Dziekuje za pomoc;
|
|
||||||
|
|
||||||
<komplement> = Pelen profesjonalizm | Swietnie;
|
|
||||||
|
|
||||||
<odmowa> = Za drogo | Jednak nie zjem | To nie to;
|
|
||||||
|
|
||||||
<oczekiwanie_35min> = z odbiorem osobistym | z dowozem | na wynos;
|
|
||||||
|
|
||||||
<oczekiwanie_pojutrze> = na pojutrze;
|
|
||||||
|
|
||||||
<zamowienie_gotowe> = Twoje zamowienie bedzie gotowe <liczba_minut> <oczekiwanie_35min>;
|
|
||||||
|
|
||||||
<zamowienie_na_pojutrze> = Wroc do nas pojutrze;
|
|
||||||
|
|
||||||
<dialog> = <pytanie_o_menu> | <zamowienie_pierwsze> | <pytanie_o_danie_specjalne> | <pytanie_o_cene> | <pytanie_o_pakowanie_na_wynos> | <pytanie_o_dowoz> | <pytanie_o_termin> | <pytanie_o_znizke> | <pytanie_o_pozostale_skladniki> | <potwierdzenie_zamowienia> | <negocjacja> | <pytanie_o_dowod> | <potwierdzenie_dowodu> | <podziekowanie> | <prosba_o_wiecej_informacji> | <koniec_rozmowy>;
|
|
||||||
|
|
||||||
<pytanie_o_menu> = <hello> | <help> | <informacja_o_menu>;
|
|
||||||
|
|
||||||
<zamowienie_pierwsze> = <informacja_o_menu> <prosba_o_zamowienie>;
|
|
||||||
|
|
||||||
<prosba_o_zamowienie> = <inform> <potrawa>+ <potwierdzenie>;
|
|
||||||
|
|
||||||
<pytanie_o_danie_specjalne> = <reqmore> <pytanie_o_specjalne>;
|
|
||||||
|
|
||||||
<pytanie_o_specjalne> = <potrawa> <potrawa_specjalna> <potwierdzenie>;
|
|
||||||
|
|
||||||
<pytanie_o_cene> = <reqmore> <pytanie_o_cene_zamowienia>;
|
|
||||||
|
|
||||||
<pytanie_o_cene_zamowienia> = <liczba_porcji> <potrawa> <potwierdzenie>;
|
|
||||||
|
|
||||||
<pytanie_o_pakowanie_na_wynos> = <reqmore> <pytanie_o_pakowanie>;
|
|
||||||
|
|
||||||
<pytanie_o_pakowanie> = <potrawa>+ <zamowienie_na_pojutrze> | <potrawa>+ <oczekiwanie_35min> <potwierdzenie>;
|
|
||||||
|
|
||||||
<pytanie_o_dowoz> = <reqmore> <pytanie_o_dowoz_zamowienia>;
|
|
||||||
|
|
||||||
<pytanie_o_dowoz_zamowienia> = <potrawa>+ <oczekiwanie_35min> <potwierdzenie>;
|
|
||||||
|
|
||||||
<pytanie_o_termin> = <reqmore> <pytanie_o_termin_zamowienia>;
|
|
||||||
|
|
||||||
<pytanie_o_termin_zamowienia> = <potrawa>+ <dzien_zamowienia> <godzina_zamowienia>;
|
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
from typing import Any
|
from typing import Any
|
||||||
import jsgf
|
import jsgf
|
||||||
|
from unidecode import unidecode
|
||||||
|
import string
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
|
|
||||||
@ -31,7 +33,7 @@ class NLU():
|
|||||||
def get_dialog_act(self, rule):
|
def get_dialog_act(self, rule):
|
||||||
slots = []
|
slots = []
|
||||||
self.get_slots(rule.expansion, slots)
|
self.get_slots(rule.expansion, slots)
|
||||||
return {'act': rule.grammar.name, 'slots': slots}
|
return {'act': rule.name, 'slots': slots}
|
||||||
|
|
||||||
def get_slots(self, expansion, slots):
|
def get_slots(self, expansion, slots):
|
||||||
if expansion.tag != '':
|
if expansion.tag != '':
|
||||||
@ -45,7 +47,14 @@ class NLU():
|
|||||||
self.get_slots(expansion.referenced_rule.expansion, slots)
|
self.get_slots(expansion.referenced_rule.expansion, slots)
|
||||||
|
|
||||||
def __call__(self, prompt) -> Any:
|
def __call__(self, prompt) -> Any:
|
||||||
matched = self.book_grammar.find_matching_rules(prompt)
|
book_grammar = jsgf.parse_grammar_file('book.jsgf')
|
||||||
|
|
||||||
|
prompt = unidecode(prompt)
|
||||||
|
translator = str.maketrans('', '', string.punctuation)
|
||||||
|
prompt = prompt.translate(translator)
|
||||||
|
|
||||||
|
matched = book_grammar.find_matching_rules(prompt)
|
||||||
|
|
||||||
if matched:
|
if matched:
|
||||||
return self.get_dialog_act(matched[0])
|
return self.get_dialog_act(matched[0])
|
||||||
else:
|
else:
|
||||||
@ -85,9 +94,20 @@ class NLG():
|
|||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
model = Model()
|
model = Model()
|
||||||
parser = argparse.ArgumentParser()
|
# parser = argparse.ArgumentParser()
|
||||||
parser.add_argument("--msg")
|
# parser.add_argument("--msg")
|
||||||
args = parser.parse_args()
|
# args = parser.parse_args()
|
||||||
|
|
||||||
ans = model(prompt=args.msg)
|
print(model(prompt="chcialbym zarezerwowac stolik na jutro na dziesiata dla trzech osob"))
|
||||||
print(ans)
|
print(model(prompt="Cześć"))
|
||||||
|
print(model(prompt="Hej, jakim botem jesteś?"))
|
||||||
|
print(model(prompt="Hej, w czym mi możesz pomóc?"))
|
||||||
|
print(model(prompt="Siema, w czym możesz mi pomóc?"))
|
||||||
|
print(model(prompt="Witam"))
|
||||||
|
print(model(prompt="Witam system"))
|
||||||
|
print(model(prompt="Hej, czym się zajmujesz?"))
|
||||||
|
print(model(prompt="Czesc, jestem agentem dialogowym przyjmujacym zamowienia w restauracji. Moge doradzic ci w wyborze odpowiedniej pozycji z menu. W czym moge ci pomoc?"))
|
||||||
|
print(model(prompt="oki"))
|
||||||
|
print(model(prompt="Potwierdzam!"))
|
||||||
|
print(model(prompt="Tak!"))
|
||||||
|
print(model(prompt="Tak to wszystko!"))
|
||||||
|
Loading…
Reference in New Issue
Block a user