diff --git a/book.jsgf b/book.jsgf index b0561c5..8d51241 100644 --- a/book.jsgf +++ b/book.jsgf @@ -2,6 +2,17 @@ grammar book; +public = | witam system | dzien dobry | czesc | witam ; + +public = czesc jestem agentem dialogowym przyjmujacym zamowienia w restauracji moge doradzic ci w wyborze odpowiedniej pozycji z menu w czym moge ci pomoc ; + +public = potwierdzam | tak | tak potwierdzam | tak to wszystko | to poprosze | super to zatem wszystko | oki | to odbiore ; + + = hej | siema | czesc | witam ; + + = w czym mozesz mi pomoc | w czym mi mozesz pomoc | jakim botem jestes | czym sie zajmujesz ; + + public = chcialbym zarezerwowac stolik ; = (na | w) {day}; @@ -19,81 +30,3 @@ public = chcialbym zarezerwowac stolik = (na | dla) {size} osob; = dwie | dwoch | trzy | trzech | cztery | czterech | piec | pieciu | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10; - - = | | | ; - - = Tatar wolowy | Carpaccio z buraka | Salatka caprese; - - = Krem z dyni | Rosol z makaronem | Zupa grzybowa; - - = Stek z poledwicy wolowej | Pieczona kaczka z jablkami | Lasagne | Ryba z grilla | Risotto z kurczakiem i grzybami | Pierogi ruskie | Placki ziemniaczane; - - = Tiramisu | Szarlotka | Lody waniliowe; - - = * []; - - = | ; - - = cola | woda | lemoniada | piwo; - - = (potwierdzam | ok | dobrze | zgoda); - - = (czekaj | prosze czekac | odbior za minut); - - = z sosem smietanowym; - - = bez cebuli; - - = Tatar wolowy | Zupa grzybowa | Stek z poledwicy wolowej; - - = na ; - - = na ; - - = porcje; - - = Pamietajcie zeby bylo cieple; - - = minut; - - = Dziekuje | Dziekuje to wszystko | Okej to wszystko | To wszystko | Dziekuje za pomoc; - - = Pelen profesjonalizm | Swietnie; - - = Za drogo | Jednak nie zjem | To nie to; - - = z odbiorem osobistym | z dowozem | na wynos; - - = na pojutrze; - - = Twoje zamowienie bedzie gotowe ; - - = Wroc do nas pojutrze; - - = | | | | | | | | | | | | | | | ; - - = | | ; - - = ; - - = + ; - - = ; - - = ; - - = ; - - = ; - - = ; - - = + | + ; - - = ; - - = + ; - - = ; - - = + ; diff --git a/dialog_model.py b/dialog_model.py index 1823498..b1853df 100644 --- a/dialog_model.py +++ b/dialog_model.py @@ -1,5 +1,7 @@ from typing import Any import jsgf +from unidecode import unidecode +import string import argparse @@ -31,7 +33,7 @@ class NLU(): def get_dialog_act(self, rule): 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): if expansion.tag != '': @@ -45,7 +47,14 @@ class NLU(): self.get_slots(expansion.referenced_rule.expansion, slots) 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: return self.get_dialog_act(matched[0]) else: @@ -85,9 +94,20 @@ class NLG(): if __name__ == "__main__": model = Model() - parser = argparse.ArgumentParser() - parser.add_argument("--msg") - args = parser.parse_args() + # parser = argparse.ArgumentParser() + # parser.add_argument("--msg") + # args = parser.parse_args() - ans = model(prompt=args.msg) - print(ans) + print(model(prompt="chcialbym zarezerwowac stolik na jutro na dziesiata dla trzech osob")) + 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!"))