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
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
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)
Can't render this file because it has a wrong number of fields in line 10.

View File

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