2022-05-25 13:14:24 +02:00
import json
2022-05-30 19:46:44 +02:00
from xml import dom
2022-06-12 14:41:21 +02:00
value_dict = json . load ( open ( ' modules/value_dict.json ' ) )
2022-06-08 01:06:07 +02:00
2022-05-30 12:00:09 +02:00
class NLG :
2022-06-14 14:16:05 +02:00
def __init__ ( self , dst ) :
2022-05-30 12:00:09 +02:00
self . answer = ' '
2022-06-14 14:16:05 +02:00
self . dst = dst
2022-05-25 13:14:24 +02:00
2022-05-30 12:00:09 +02:00
def update ( self , system_act ) :
2022-06-08 01:06:07 +02:00
self . answer = ' '
2022-06-14 14:16:05 +02:00
self . dst . state [ ' system_action ' ] . append ( system_act )
2022-05-30 12:00:09 +02:00
for domain , intent , slot , value in system_act :
2022-06-08 01:06:07 +02:00
if domain == ' cinema ' and intent == ' inform ' and slot == ' seat ' :
2022-05-30 12:00:09 +02:00
if value == ' ' :
2022-06-12 14:41:21 +02:00
self . answer + = f ' Gdzie dokładnie chciałbyś/chciałabyś zarezerwować miejsce? '
2022-05-30 12:00:09 +02:00
elif value == " top " :
2022-06-12 14:41:21 +02:00
self . answer + = f ' Wolne miejsca na górze w rzędzie 10: miejsca od 5 do 10 i od 12 do 14. '
2022-05-30 12:00:09 +02:00
elif value < = " bottom " :
2022-06-12 14:41:21 +02:00
self . answer + = f ' Wolne miejsca na dole w rzędzie 1: miejsca od 2 do 10 i od 12 do 14. '
2022-05-30 12:00:09 +02:00
elif value < = " middle " :
2022-06-12 14:41:21 +02:00
self . answer + = f ' Wolne miejsca na środku w rzędzie 6: miejsca od 5 do 10. '
2022-05-30 19:46:44 +02:00
else :
self . answer + = f ' Nie znalazłem miejsca. '
2022-06-08 01:06:07 +02:00
elif domain == ' cinema ' and intent == ' inform ' and slot == ' cancel_book ' :
if len ( value ) :
2022-06-12 14:41:21 +02:00
self . answer + = f ' Rezerwacja na adres e-mail: { value } została anulowana. '
2022-06-08 01:06:07 +02:00
elif value == ' ' :
2022-06-12 14:41:21 +02:00
self . answer + = f ' Proszę podać e-mail na który dokonana została rezerwacja miejsce. '
2022-06-08 01:06:07 +02:00
else :
self . answer + = f ' Rezerwacja nie została anulowana. '
2022-06-08 08:19:10 +02:00
elif domain == ' cinema ' and intent == ' request ' and slot == ' movie ' :
if value == ' ' :
2022-06-12 14:41:21 +02:00
self . answer + = f ' Na jaki film chciałbyś/chciałabyś pójść? '
2022-06-08 01:06:07 +02:00
elif domain == ' cinema ' and intent == ' inform ' and slot == ' movie ' :
2022-05-30 19:46:44 +02:00
if value == ' ' :
2022-05-30 12:00:09 +02:00
self . answer + = f ' Nie znalazłem filmu. '
else :
self . answer + = f ' Film { value } będzie wyświetlany jutro o godzinie 21:30. '
2022-06-08 01:06:07 +02:00
elif domain == ' cinema ' and intent == ' offer ' and slot == ' closestscreening ' :
2022-06-12 14:41:21 +02:00
if value in [ ' Dziś ' , ' Jutro ' , ' Pojutrze ' ] :
2022-05-30 12:00:09 +02:00
self . answer + = f ' { value } prezentujemy Batmana o 18:30 i Ambulans o 21:00. '
elif value in value_dict [ ' train ' ] [ ' day ' ] :
self . answer + = f ' W { value } prezentujemy Ambulans o 18:30 i To nie wypanda o 20:00. '
elif value in value_dict [ ' train ' ] [ ' date ' ] :
self . answer + = f ' Dnia { value } prezentujemy Batmana o 18:00 i Sing 2 o 20:30. '
2022-06-08 09:26:02 +02:00
elif value == ' ' :
2022-06-15 11:56:24 +02:00
self . answer + = f ' W naszym kinie polecamy obejrzeć seans Batmana, który odbędzie się dzisiaj o 18:30. Wyświetlamy również Ambulans o 19:45 i Sing 2 o 22:00 '
2022-06-08 01:06:07 +02:00
elif domain == ' cinema ' and intent == ' request ' and slot == ' e-mail ' :
2022-05-30 12:00:09 +02:00
if value == ' ' :
2022-06-12 14:41:21 +02:00
self . answer + = ' Proszę podać adres e-mail. '
2022-06-08 01:06:07 +02:00
elif domain == ' cinema ' and intent == ' request ' and slot == ' date ' :
if value == ' ' :
2022-06-12 14:41:21 +02:00
self . answer + = ' Którego dnia chciałbyś/chciałabyś obejrzeć ten film? '
2022-06-08 01:06:07 +02:00
elif domain == ' cinema ' and intent == ' request ' and slot == ' name ' :
2022-05-30 12:00:09 +02:00
if value == ' ' :
2022-06-12 14:41:21 +02:00
self . answer + = ' Proszę podać imię i nazwisko. '
2022-06-08 01:06:07 +02:00
elif domain == ' cinema ' and intent == ' request ' and slot == ' phone ' :
2022-05-30 19:46:44 +02:00
if value == ' ' :
2022-06-12 14:41:21 +02:00
self . answer + = ' Proszę podać numer telefonu. '
2022-06-08 01:06:07 +02:00
elif domain == ' cinema ' and intent == ' request ' and slot == ' row ' :
2022-05-30 12:00:09 +02:00
if value in value_dict [ ' train ' ] [ ' seat_row ' ] :
self . answer + = f ' W rzędzie { value } są wolne miejsca od 1 do 4 i od 12 do 15. '
2022-06-08 01:06:07 +02:00
elif value == ' ' :
2022-06-12 14:41:21 +02:00
self . answer + = f ' W jakim rzędzie chciałbyś/chciałabyś zarezerwować miejsce? '
2022-05-30 12:00:09 +02:00
else :
2022-06-08 01:06:07 +02:00
self . answer + = f ' Nie ma wolnych miejsc w rzędzie { value } . '
elif domain == ' cinema ' and intent == ' request ' and slot == ' seat_place ' :
2022-05-30 12:00:09 +02:00
if value in value_dict [ ' train ' ] [ ' seat_place ' ] :
self . answer + = f ' W rzędzie 4 jest wolne miejsce { value } . '
else :
2022-06-12 14:41:21 +02:00
self . answer + = f ' W rzędzie 4 nie ma wolnego miejsca { value } . '
2022-06-08 08:19:10 +02:00
elif domain == ' cinema ' and intent == ' offer ' and slot == ' seat ' :
2022-06-08 01:25:36 +02:00
if value in value_dict [ ' train ' ] [ ' seat ' ] :
2022-06-12 14:41:21 +02:00
self . answer + = f ' Miejsce { value } jest wolne. '
elif value == ' ' :
self . answer + = ' Sala jest obłożona w 15 % . Głównie w rzędach 4, 5 i 6. '
2022-06-08 01:06:07 +02:00
elif domain == ' cinema ' and intent == ' request ' and slot == ' seat ' :
2022-05-30 12:00:09 +02:00
if value in value_dict [ ' train ' ] [ ' seat ' ] :
self . answer + = f ' Miejsce { value } jest wolne. '
2022-06-08 01:06:07 +02:00
elif value == ' ' :
2022-06-12 14:41:21 +02:00
self . answer + = f ' Jakie miejsce chciałbyś/chciałabyś zarezerwować? '
2022-05-30 12:00:09 +02:00
else :
self . answer + = f ' Miejsce { value } nie jest wolne. '
2022-06-08 01:06:07 +02:00
elif domain == ' cinema ' and intent == ' inform ' and slot == ' Location ' :
2022-06-12 14:41:21 +02:00
self . answer + = ' Kino znajduje się na ulicy Jana Pawła 2/40. '
2022-06-08 01:06:07 +02:00
elif domain == ' cinema ' and intent == ' inform ' and slot == ' cinema_name ' :
self . answer + = ' Kino nazywa sie Hellios '
elif domain == ' cinema ' and intent == ' offer ' and slot == ' time ' :
2022-05-30 19:46:44 +02:00
if value in [ ' 15:00 ' , ' 12:00 ' , ' 18:00 ' , ' 18:30 ' , ' 19:00 ' , ' 20:00 ' , ' 20:30 ' , ' 21:00 ' , ' 21:30 ' ] :
2022-06-12 14:41:21 +02:00
self . answer + = f ' Dostępny jest seans na godzinę { value } . '
2022-05-30 19:46:44 +02:00
else :
self . answer + = f ' Nie mamy aktualnie seansu na taką godzinę. '
2022-06-08 01:06:07 +02:00
elif domain == ' cinema ' and intent == ' request ' and slot == ' tickettype ' :
2022-05-30 19:46:44 +02:00
if value == ' ' :
2022-06-12 14:41:21 +02:00
self . answer + = ' Czy chciałbyś/chciałabyś bilet normalny czy ulgowy? '
2022-06-08 01:06:07 +02:00
elif domain == ' cinema ' and intent == ' request ' and slot == ' quantity ' :
2022-05-30 19:46:44 +02:00
if value == ' ' :
2022-06-12 14:41:21 +02:00
self . answer + = ' Ile biletów chciałbyś/chciałabyś zarezerwować? '
2022-06-08 01:06:07 +02:00
elif domain == ' cinema ' and intent == ' request ' and slot == ' hour ' :
if value == ' ' :
2022-06-12 14:41:21 +02:00
self . answer + = ' O jakiej godzinie chciałbyś/chciałabyś zobaczyć film? '
2022-06-08 01:06:07 +02:00
elif domain == ' cinema ' and intent == ' request ' and slot == ' payments ' :
2022-05-30 19:46:44 +02:00
if value == ' online ' :
self . answer + = ' Proszę dokonać płatność online. Dziękujemy za skorzystanie z naszych usług. '
else :
self . answer + = ' Proszę stawić się 30 minut przed seansem aby dokonać płatność. Dziękujemy za skorzystanie z naszych usług. '
2022-06-15 11:45:20 +02:00
self . dst . state [ ' history ' ] . append ( f ' system \t { self . answer } ' )
2022-05-30 12:00:09 +02:00
return self . answer
2022-05-25 13:14:24 +02:00
2022-06-08 01:06:07 +02:00
# nlg = NLG()
2022-06-12 14:41:21 +02:00
# print(nlg.update([['cinema', 'offer', 'seat', '']]))