aitech-sd-lab/modules/NLG.py

106 lines
6.4 KiB
Python
Raw Normal View History

2022-05-25 13:14:24 +02:00
import json
2022-05-30 19:46:44 +02:00
from xml import dom
2022-06-08 08:19:10 +02:00
value_dict = json.load(open('value_dict.json'))
2022-06-08 01:06:07 +02:00
2022-05-30 12:00:09 +02:00
class NLG:
def __init__(self):
self.answer = ''
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-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-08 08:58:25 +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-08 08:58:25 +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-08 08:58:25 +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-08 08:58:25 +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-08 08:58:25 +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-08 08:58:25 +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-08 08:58:25 +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-05-30 12:00:09 +02:00
if value in ['Dziś','Jutro','Pojutrze']:
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 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-08 08:58:25 +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-08 08:58:25 +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-08 08:58:25 +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-08 08:58:25 +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-08 08:58:25 +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-08 08:58:25 +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-08 08:19:10 +02:00
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-08 08:58:25 +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-08 08:58:25 +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-08 08:58:25 +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-08 08:58:25 +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-08 08:58:25 +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-08 08:58:25 +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-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()
# print(nlg.update([['cinema', 'offer', 'Closestscreening', "1.02"],['cinema', 'request', 'name', ""]]))