diff --git a/data/dialog-10-03-01.tsv b/data/dialog-10-03-01.tsv index 9931291..d11176b 100644 --- a/data/dialog-10-03-01.tsv +++ b/data/dialog-10-03-01.tsv @@ -1,20 +1,20 @@ -user Dzień dobry -system Dzień dobry, jestem systemem służącym do rezerwacji biletów kolejowych w Polsce.W czym mogę pomóc? -user chcę dowiedzieć się ilę zapłacę za bilet do Warszawy -system W jakim dniu/Kiedy podróż ma się odbyć? -user jutro -system Gdzie podróż miałaby się zacząć? -user Poznań Główny -system W Warszawie dostępne są stacje: Warszawa główny, Warszawa zachodni. Która z tych stacji będzie stacją końcową? -user warszawa główna -system Ile osób będzie podróżować? -user 1 -system Ilu pasażerów będzie podróżować z ulgą? -user 0 -system Jakiej klasy wagon byłby najbardziej odpowiedni? (1/2) -user 2 -system W jakim wagonie ma zostać wykonana rezerwacja? (przedziałowy / bezprzedziałowy) -user bez przedziałowy -system W dniu 24.03.2022 ze stacji Poznań główny do Warszawa główna są dostępne połączenia: 8:10 - 12:24, 10:20 - 14:30, 14:15-18:45 -system Które połączenia pana / panią interesuje? -user 14.15-18.45 \ No newline at end of file +user Dzień dobry hello() +system Dzień dobry, jestem systemem służącym do rezerwacji biletów kolejowych w Polsce.W czym mogę pomóc? wlcomemsg() +user chcę dowiedzieć się ilę zapłacę za bilet do Warszawy "request(price&to=""Warszawa"")" +system W jakim dniu/Kiedy podróż ma się odbyć? request(date) +user jutro inform(date) +system Gdzie podróż miałaby się zacząć? request(from) +user Poznań Główny inform(from) +system W Warszawie dostępne są stacje: Warszawa główny, Warszawa zachodni. Która z tych stacji będzie stacją końcową? request(to) +user warszawa główna inform(to) +system Ile osób będzie podróżować? request(travelers_count) +user 1 inform(travelers_count) +system Ilu pasażerów będzie podróżować z ulgą? request(travelers_discounts) +user 0 inform(travelers_discounts) +system Jakiej klasy wagon byłby najbardziej odpowiedni? (1/2) request(carriage_class) +user 2 inform(carriage_class) +system W jakim wagonie ma zostać wykonana rezerwacja? (przedziałowy / bezprzedziałowy) request(carriage_type) +user bez przedziałowy inform(carriage_class) +system W dniu 24.03.2022 ze stacji Poznań główny do Warszawa główna są dostępne połączenia: 8:10 - 12:24, 10:20 - 14:30, 14:15-18:45 "offer(date=""24.03.2022""&from=""Poznań główny&to=""Warszawa główna"")" +system Które połączenia pana / panią interesuje? request(connection) +user 14.15-18.45 inform(connection) \ No newline at end of file diff --git a/data/dialog-10-05-01.tsv b/data/dialog-10-05-01.tsv index e299649..6fe5b03 100644 --- a/data/dialog-10-05-01.tsv +++ b/data/dialog-10-05-01.tsv @@ -1,8 +1,8 @@ -user Cześć -system Cześć, Jestem jestem systemem służącym do rezerwacji biletów kolejowych w Polsce. -system W czym mogę pomóc? -user Chciałbym kupić bilet -system W jakim dniu miała by się odbyć podróż? -user W najbliższą sobotę -system Gdzie chciał(a)by Pan(i) się udać? -user Z Poznania do Krakowa \ No newline at end of file +user "Cześć " hello() +"system " Cześć, Jestem jestem systemem służącym do rezerwacji biletów kolejowych w Polsce. welcomemsg() +"system " W czym mogę pomóc? welcomemsg() +user Chciałbym kupić bilet request(ticket) +system W jakim dniu miała by się odbyć podróż? request(date) +user W najbliższą sobotę inform(date) +"system " Gdzie chciał(a)by Pan(i) się udać? request(to) +user Z Poznania do Krakowa "inform(from=""Poznań""&to=""Kraków"")" \ No newline at end of file diff --git a/data/dialog-10-07-01.tsv b/data/dialog-10-07-01.tsv index f8b47f1..1b1c095 100644 --- a/data/dialog-10-07-01.tsv +++ b/data/dialog-10-07-01.tsv @@ -1,18 +1,18 @@ -user Dzień dobry -system Cześć, jestem jestem systemem służącym do rezerwacji biletów kolejowych w Polsce. -system W czym mogę pomóc? -user Chciałbym kupić 2 bilety z Poznania do Krakowa. -system W jakim dniu miała by się odbyć podróż? -user W następną środę, najlepiej od rana -system Nie zrozumiałem -user W środę -system W poznaniu dostępne są stacje: Poznań główny, Poznań nie główny. Która z tych stacji będzie stacją początkową? -user Poznań główny -system W Krakowie dostępne są stacje: Kraków główny, Kraków nie główny. Która z tych stacji będzie stacją końcową? -user Kraków nie główny -system Ile osób będzie podróżować? -user 2 -system Ilu pasażerów będzie podróżować z ulgą? -user 0 -system Jakiej klasy wagon byłby najbardziej odpowiedni? (1/2) -user 1 \ No newline at end of file +user Dzień dobry hello() +system Cześć, jestem jestem systemem służącym do rezerwacji biletów kolejowych w Polsce. hellomsg() +system W czym mogę pomóc? hellomsg() +user Chciałbym kupić 2 bilety z Poznania do Krakowa. "request(ticket&travelers_count=2&from=""Poznań""&to=""Warszawa"")" +system W jakim dniu miała by się odbyć podróż? request(date) +user W następną środę, najlepiej od rana inform(date) +system Nie zrozumiałem repeat() +user W środę inform(date) +system W poznaniu dostępne są stacje: Poznań główny, Poznań nie główny. Która z tych stacji będzie stacją początkową? select(from) +user Poznań główny "inform(from=""Poznań główny"")" +system W Krakowie dostępne są stacje: Kraków główny, Kraków nie główny. Która z tych stacji będzie stacją końcową? select(to) +user Kraków nie główny "inform(to=""Kraków nie główny)" +system Ile osób będzie podróżować? request(travelers_count) +user 2 inform(travelers_count=2) +system Ilu pasażerów będzie podróżować z ulgą? request(travelers_discount_count) +user 0 inform(travelers_discount_count=0) +system Jakiej klasy wagon byłby najbardziej odpowiedni? (1/2) request(carriage_class) +user 1 inform(carriage_class=1) \ No newline at end of file diff --git a/requirements-analysis.pdf b/requirements-analysis.pdf new file mode 100644 index 0000000..7a6b610 Binary files /dev/null and b/requirements-analysis.pdf differ diff --git a/trailminator/.gitignore b/trailminator/.gitignore new file mode 100644 index 0000000..ed8ebf5 --- /dev/null +++ b/trailminator/.gitignore @@ -0,0 +1 @@ +__pycache__ \ No newline at end of file diff --git a/trailminator/dp.py b/trailminator/dp.py new file mode 100644 index 0000000..76d19a7 --- /dev/null +++ b/trailminator/dp.py @@ -0,0 +1,14 @@ +class Dp: + def __init__(self, act, param): + self.act = act + self.param = param + self.answers = { + 'request': {'imie': "welcomemsg"} + } + + def identify(self): + req = self.answers.get(self.act) + response = req.get(self.param[0]) if not req is None else "null" + return response if not response is None else "null" + + diff --git a/trailminator/dst.py b/trailminator/dst.py new file mode 100644 index 0000000..8bbf494 --- /dev/null +++ b/trailminator/dst.py @@ -0,0 +1,9 @@ +class Dst: + def __init__(self): + self.messages = [] + + def store(self, message): + self.messages.append(message) + + def get_messages(self): + return self.messages diff --git a/trailminator/nlg.py b/trailminator/nlg.py new file mode 100644 index 0000000..3586721 --- /dev/null +++ b/trailminator/nlg.py @@ -0,0 +1,14 @@ +import random +from urllib import response + +from scipy import rand + +class Nlg: + def __init__(self, response_type: str) -> None: + self._response_type = response_type + self.responses = {"welcomemsg": ["I AM TRAIlMinATor!", "Cześć, jestem TrailMinator"], + "null": "Can't hear you"} + + def response(self) -> str: + avail_resps = self.responses.get(self._response_type) + return avail_resps[random.randint(0, len(avail_resps)-1)] diff --git a/trailminator/nlu.py b/trailminator/nlu.py new file mode 100644 index 0000000..328e020 --- /dev/null +++ b/trailminator/nlu.py @@ -0,0 +1,44 @@ +import re + +class Nlu: + def __init__(self): + self.acts = { + "request": { + 'triggers': ['jak', 'kiedy'], + 'parameters': ['imie'] + } + } + + + def tokenize(self, string): + clean_string = self.get_str_cleaned(string) + + return clean_string.split() + + + def get_str_cleaned(self, str_dirty): + punctuation = '!"#$%&\'()*+,-./:;<=>?@[\\\\]^_`{|}~' + new_str = str_dirty.lower() + new_str = re.sub(' +', ' ', new_str) + + for char in punctuation: + new_str = new_str.replace(char,'') + + return new_str + + def parse(self, message): + tokens = self.tokenize(message) + act = None + param = [] + + for k, v in self.acts.items(): + if any(t in v['triggers'] for t in tokens): + act = k + + for t in tokens: + if t in v['parameters']: + param.append(t) + + + return (act, param) + diff --git a/trailminator/trailminator.py b/trailminator/trailminator.py new file mode 100644 index 0000000..5cc2adc --- /dev/null +++ b/trailminator/trailminator.py @@ -0,0 +1,12 @@ +import dst +import nlu +import dp +import nlg + +if __name__ == "__main__": + msg = "Jak masz na imie?" + dp_params = nlu.Nlu().parse(msg) + # print(dp_params) + nlg_params = dp.Dp(*dp_params).identify() + # print(nlg_params) + print(f"{msg}\n{nlg.Nlg(nlg_params).response()}")