trailminator #1

Merged
s434624 merged 6 commits from trailminator into master 2022-05-18 12:39:33 +02:00
10 changed files with 140 additions and 46 deletions

View File

@ -1,20 +1,20 @@
user Dzień dobry user Dzień dobry hello()
system Dzień dobry, jestem systemem służącym do rezerwacji biletów kolejowych w Polsce.W czym mogę pomóc? 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 user chcę dowiedzieć się ilę zapłacę za bilet do Warszawy "request(price&to=""Warszawa"")"
system W jakim dniu/Kiedy podróż ma się odbyć? system W jakim dniu/Kiedy podróż ma się odbyć? request(date)
user jutro user jutro inform(date)
system Gdzie podróż miałaby się zacząć? system Gdzie podróż miałaby się zacząć? request(from)
user Poznań Główny 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ą? 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 user warszawa główna inform(to)
system Ile osób będzie podróżować? system Ile osób będzie podróżować? request(travelers_count)
user 1 user 1 inform(travelers_count)
system Ilu pasażerów będzie podróżować z ulgą? system Ilu pasażerów będzie podróżować z ulgą? request(travelers_discounts)
user 0 user 0 inform(travelers_discounts)
system Jakiej klasy wagon byłby najbardziej odpowiedni? (1/2) system Jakiej klasy wagon byłby najbardziej odpowiedni? (1/2) request(carriage_class)
user 2 user 2 inform(carriage_class)
system W jakim wagonie ma zostać wykonana rezerwacja? (przedziałowy / bezprzedziałowy) system W jakim wagonie ma zostać wykonana rezerwacja? (przedziałowy / bezprzedziałowy) request(carriage_type)
user bez przedziałowy 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 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? system Które połączenia pana / panią interesuje? request(connection)
user 14.15-18.45 user 14.15-18.45 inform(connection)
Can't render this file because it has a wrong number of fields in line 10.

View File

@ -1,8 +1,8 @@
user Cześć user "Cześć " hello()
system Cześć, Jestem jestem systemem służącym do rezerwacji biletów kolejowych w Polsce. "system " Cześć, Jestem jestem systemem służącym do rezerwacji biletów kolejowych w Polsce. welcomemsg()
system W czym mogę pomóc? "system " W czym mogę pomóc? welcomemsg()
user Chciałbym kupić bilet user Chciałbym kupić bilet request(ticket)
system W jakim dniu miała by się odbyć podróż? system W jakim dniu miała by się odbyć podróż? request(date)
user W najbliższą sobotę user W najbliższą sobotę inform(date)
system Gdzie chciał(a)by Pan(i) się udać? "system " Gdzie chciał(a)by Pan(i) się udać? request(to)
user Z Poznania do Krakowa user Z Poznania do Krakowa "inform(from=""Poznań""&to=""Kraków"")"
1 user Cześć Cześć hello()
2 system Cześć, Jestem jestem systemem służącym do rezerwacji biletów kolejowych w Polsce. Cześć, Jestem jestem systemem służącym do rezerwacji biletów kolejowych w Polsce. welcomemsg()
3 system W czym mogę pomóc? W czym mogę pomóc? welcomemsg()
4 user Chciałbym kupić bilet Chciałbym kupić bilet request(ticket)
5 system W jakim dniu miała by się odbyć podróż? W jakim dniu miała by się odbyć podróż? request(date)
6 user W najbliższą sobotę W najbliższą sobotę inform(date)
7 system Gdzie chciał(a)by Pan(i) się udać? Gdzie chciał(a)by Pan(i) się udać? request(to)
8 user Z Poznania do Krakowa Z Poznania do Krakowa inform(from="Poznań"&to="Kraków")

View File

@ -1,18 +1,18 @@
user Dzień dobry user Dzień dobry hello()
system Cześć, jestem jestem systemem służącym do rezerwacji biletów kolejowych w Polsce. system Cześć, jestem jestem systemem służącym do rezerwacji biletów kolejowych w Polsce. hellomsg()
system W czym mogę pomóc? system W czym mogę pomóc? hellomsg()
user Chciałbym kupić 2 bilety z Poznania do Krakowa. 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óż? system W jakim dniu miała by się odbyć podróż? request(date)
user W następną środę, najlepiej od rana user W następną środę, najlepiej od rana inform(date)
system Nie zrozumiałem system Nie zrozumiałem repeat()
user W środę 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ą? 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 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ą? 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 user Kraków nie główny "inform(to=""Kraków nie główny)"
system Ile osób będzie podróżować? system Ile osób będzie podróżować? request(travelers_count)
user 2 user 2 inform(travelers_count=2)
system Ilu pasażerów będzie podróżować z ulgą? system Ilu pasażerów będzie podróżować z ulgą? request(travelers_discount_count)
user 0 user 0 inform(travelers_discount_count=0)
system Jakiej klasy wagon byłby najbardziej odpowiedni? (1/2) system Jakiej klasy wagon byłby najbardziej odpowiedni? (1/2) request(carriage_class)
user 1 user 1 inform(carriage_class=1)
Can't render this file because it has a wrong number of fields in line 2.

BIN
requirements-analysis.pdf Normal file

Binary file not shown.

1
trailminator/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
__pycache__

14
trailminator/dp.py Normal file
View File

@ -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"

9
trailminator/dst.py Normal file
View File

@ -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

14
trailminator/nlg.py Normal file
View File

@ -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)]

44
trailminator/nlu.py Normal file
View File

@ -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)

View File

@ -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()}")