add nlu
This commit is contained in:
parent
a509445ce6
commit
9dffcd9369
99
book.jsgf
Normal file
99
book.jsgf
Normal file
@ -0,0 +1,99 @@
|
||||
#JSGF V1.0 UTF-8 pl;
|
||||
|
||||
grammar book;
|
||||
|
||||
public <rezerwuj> = chcialbym zarezerwowac stolik <dzien_rezerwacji> <godzina_rezerwacji> <liczba_osob> ;
|
||||
|
||||
<dzien_rezerwacji> = (na | w) <dzien> {day};
|
||||
|
||||
<dzien> = dzisiaj | jutro | poniedzialek | wtorek | srode | czwartek | piatek | sobote | niedziele;
|
||||
|
||||
<godzina_rezerwacji> = (na | o) [godzine] <godzina_z_minutami> {hour};
|
||||
|
||||
<godzina_z_minutami> = <godzina> [<minuty>];
|
||||
|
||||
<godzina> = dziewiata | dziesiata | jedenasta | dwunasta;
|
||||
|
||||
<minuty> = pietnas | trzydziesci;
|
||||
|
||||
<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;
|
||||
|
||||
<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,4 +1,6 @@
|
||||
from typing import Any
|
||||
import jsgf
|
||||
import argparse
|
||||
|
||||
|
||||
class Model():
|
||||
@ -11,9 +13,10 @@ class Model():
|
||||
dp = DP()
|
||||
nlg = NLG()
|
||||
|
||||
msg = prompt
|
||||
msg = prompt.lower()
|
||||
|
||||
rama_nlu = nlu(msg)
|
||||
print(rama_nlu)
|
||||
rama_dst = dst(rama_nlu)
|
||||
rama_dp = dp(rama_dst)
|
||||
text = nlg(rama_dp)
|
||||
@ -25,10 +28,31 @@ class NLU():
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def get_dialog_act(self, rule):
|
||||
slots = []
|
||||
self.get_slots(rule.expansion, slots)
|
||||
return {'act': rule.grammar.name, 'slots': slots}
|
||||
|
||||
def get_slots(self, expansion, slots):
|
||||
if expansion.tag != '':
|
||||
slots.append((expansion.tag, expansion.current_match))
|
||||
return
|
||||
|
||||
for child in expansion.children:
|
||||
self.get_slots(child, slots)
|
||||
|
||||
if not expansion.children and isinstance(expansion, jsgf.NamedRuleRef):
|
||||
self.get_slots(expansion.referenced_rule.expansion, slots)
|
||||
|
||||
def __call__(self, prompt) -> Any:
|
||||
msg = prompt
|
||||
if "imie" in msg:
|
||||
return "jakie imie"
|
||||
book_grammar = jsgf.parse_grammar_file('book.jsgf')
|
||||
|
||||
matched = book_grammar.find_matching_rules(prompt)
|
||||
|
||||
if matched:
|
||||
return self.get_dialog_act(matched[0])
|
||||
else:
|
||||
return {'act': 'null', 'slots': []}
|
||||
|
||||
|
||||
class DST():
|
||||
@ -64,6 +88,9 @@ class NLG():
|
||||
|
||||
if __name__ == "__main__":
|
||||
model = Model()
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--msg")
|
||||
args = parser.parse_args()
|
||||
|
||||
ans = model(prompt="Jak masz na imie")
|
||||
ans = model(prompt=args.msg)
|
||||
print(ans)
|
||||
|
0
evaluate.py
Normal file
0
evaluate.py
Normal file
Loading…
Reference in New Issue
Block a user