Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
e86e8895b5 | ||
e9b797bd47 | |||
|
1ca5f097fb | ||
|
689b8d67b5 | ||
fea02e6cac | |||
51cfe2c664 | |||
|
7d0497c336 |
5
.gitignore
vendored
5
.gitignore
vendored
@ -1,6 +1 @@
|
|||||||
/venv
|
/venv
|
||||||
__pycache__
|
|
||||||
frame-model
|
|
||||||
slot-model
|
|
||||||
data-base
|
|
||||||
/.idea
|
|
28
ActFrame.py
28
ActFrame.py
@ -1,28 +0,0 @@
|
|||||||
from abc import ABC, abstractmethod
|
|
||||||
|
|
||||||
|
|
||||||
class ActFrame(ABC):
|
|
||||||
|
|
||||||
def __init__(self, actType, actParams = None):
|
|
||||||
if actType == None:
|
|
||||||
raise Exception('actType cannot be None')
|
|
||||||
self.__actType = actType
|
|
||||||
|
|
||||||
if actParams != None:
|
|
||||||
self.__actParams = actParams
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return str(type(self))
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return "actType:{} actParams:{}".format(self.__actType,self.__actParams)
|
|
||||||
|
|
||||||
|
|
||||||
def setActParams(self, actParams):
|
|
||||||
self.__actParams = actParams
|
|
||||||
|
|
||||||
def getActParams(self):
|
|
||||||
return self.__actParams
|
|
||||||
|
|
||||||
def getActType(self):
|
|
||||||
return self.__actType
|
|
189
DBManager.py
189
DBManager.py
@ -1,189 +0,0 @@
|
|||||||
import json
|
|
||||||
from pathlib import Path
|
|
||||||
from dateHelper import format_date, get_date, format_time, get_end_time
|
|
||||||
import datetime
|
|
||||||
|
|
||||||
# PRZYKLADOWY SCHEMAT DB
|
|
||||||
# informacje o dacie dnia dzisiejszego oraz nazwie tego dnia (pon, wt) będzie trzeba podawać przy inicjalizacji klasy
|
|
||||||
# może być od użytkownika z konsoli lub od systemu
|
|
||||||
# {
|
|
||||||
# "06.06.2021": [
|
|
||||||
# {
|
|
||||||
# "date": "06.06.2021",
|
|
||||||
# "time": "12:00-13:30",
|
|
||||||
# "place": "Restauracja Alfa",
|
|
||||||
# "participants": ["Jan Kowalski", "Adam Nowak"],
|
|
||||||
# "description": None
|
|
||||||
# },
|
|
||||||
# {
|
|
||||||
# "date": "06.06.2021",
|
|
||||||
# "time": "18:00-18:45",
|
|
||||||
# "place": "Stadion Miejski",
|
|
||||||
# "participants": ["Jan Kowalski"],
|
|
||||||
# "description": None
|
|
||||||
# }
|
|
||||||
# ],
|
|
||||||
# "07.06.2021": [
|
|
||||||
# {
|
|
||||||
# "date": "07.06.2021",
|
|
||||||
# "time": "9:00-10:30",
|
|
||||||
# "place": "MS Teams",
|
|
||||||
# "participants": ["Adam Nowak"],
|
|
||||||
# "description": "Wykład z matematyki"
|
|
||||||
# }
|
|
||||||
# ]
|
|
||||||
# }
|
|
||||||
|
|
||||||
|
|
||||||
class calender_db:
|
|
||||||
def __init__(self, db_path="data-base/calendar.json"):
|
|
||||||
self.db = {}
|
|
||||||
self.db_file_path = Path(db_path)
|
|
||||||
if self.db_file_path.is_file():
|
|
||||||
with open(self.db_file_path, 'r+') as f:
|
|
||||||
self.db = json.load(f)
|
|
||||||
|
|
||||||
def save_db(self):
|
|
||||||
with open(self.db_file_path, 'w+') as f:
|
|
||||||
json.dump(self.db, f)
|
|
||||||
|
|
||||||
# CRUD methods
|
|
||||||
def create_meeting(self, meeting_dict):
|
|
||||||
date_time = get_date(
|
|
||||||
meeting_dict['date'].lower(), meeting_dict['time'].lower())
|
|
||||||
|
|
||||||
if format_date(date_time) in self.db.keys():
|
|
||||||
if not self.is_collision(format_date(date_time), meeting_dict['time']):
|
|
||||||
self.db[format_date(date_time)].append(meeting_dict)
|
|
||||||
self.save_db()
|
|
||||||
else:
|
|
||||||
self.db[format_date(date_time)] = [meeting_dict]
|
|
||||||
self.save_db()
|
|
||||||
|
|
||||||
def delete_meeting(self, date, time):
|
|
||||||
date_time = get_date(date, time)
|
|
||||||
|
|
||||||
if format_date(date_time) in self.db.keys():
|
|
||||||
meetings = self.db[format_date(date_time)]
|
|
||||||
for key, meeting in enumerate(meetings):
|
|
||||||
if format_time(meeting['time']) == format_time(time):
|
|
||||||
meetings.remove(meeting)
|
|
||||||
|
|
||||||
self.db[format_date(date_time)] = meetings
|
|
||||||
self.save_db()
|
|
||||||
|
|
||||||
def update_meeting(self, meeting_dict):
|
|
||||||
date_time = get_date(
|
|
||||||
meeting_dict['date'].lower(), meeting_dict['time'].lower())
|
|
||||||
|
|
||||||
if format_date(date_time) in self.db.keys():
|
|
||||||
meetings = self.db[format_date(date_time)]
|
|
||||||
for key, meeting in enumerate(meetings):
|
|
||||||
if format_time(meeting['time']) == format_time(meeting_dict['time'].lower()):
|
|
||||||
meetings.remove(meeting)
|
|
||||||
|
|
||||||
meetings.append(meeting_dict)
|
|
||||||
self.db[format_date(date_time)] = meetings
|
|
||||||
self.save_db()
|
|
||||||
|
|
||||||
def find_meeting(self, date, time):
|
|
||||||
if date in self.db.keys():
|
|
||||||
meetings = self.db[date]
|
|
||||||
for m in meetings:
|
|
||||||
# Czas może być w formacie (13, 13:00, 13:00-13:30), trzeba dopasować obie strony i porównywać tylko czas startu
|
|
||||||
if format_time(time) == format_time(m['time']):
|
|
||||||
return m
|
|
||||||
return None
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def get_meetings(self, date_list):
|
|
||||||
# lista dat dla których chcemy znaleźć spotkania
|
|
||||||
meetings = []
|
|
||||||
for date in date_list:
|
|
||||||
if date in self.db.keys():
|
|
||||||
meetings += self.db[date]
|
|
||||||
return meetings
|
|
||||||
|
|
||||||
def is_collision(self, date, time):
|
|
||||||
meetings = self.db[date]
|
|
||||||
start_time = format_time(time)
|
|
||||||
end_time = get_end_time(time)
|
|
||||||
|
|
||||||
for meeting in meetings:
|
|
||||||
if self.overlap(start_time, end_time, format_time(meeting['time']), get_end_time(meeting['time'])):
|
|
||||||
return True
|
|
||||||
if start_time == format_time(meeting['time']) or end_time == get_end_time(meeting['time']):
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def overlap(self, checking_start, checking_end, base_start, base_end):
|
|
||||||
interval1 = [datetime.datetime.strptime(checking_start, '%H:%M'),
|
|
||||||
datetime.datetime.strptime(checking_end, '%H:%M')]
|
|
||||||
interval2 = [datetime.datetime.strptime(base_start, '%H:%M'),
|
|
||||||
datetime.datetime.strptime(base_end, '%H:%M')]
|
|
||||||
results = []
|
|
||||||
for timestamp in interval1:
|
|
||||||
results.append(interval2[0] < timestamp < interval2[1])
|
|
||||||
for timestamp in interval2:
|
|
||||||
results.append(interval1[0] < timestamp < interval1[1])
|
|
||||||
return True in results
|
|
||||||
|
|
||||||
# def get_freetime(self, date_list):
|
|
||||||
# freetime_dict = {}
|
|
||||||
# for date in date_list:
|
|
||||||
# time_str = self.start_day_time + "-" + self.end_day_time
|
|
||||||
# freetime_dict[date] = [time_str]
|
|
||||||
# # Change free time if there are meetings at this day
|
|
||||||
# if date in self.DB.keys():
|
|
||||||
# for meeting in self.DB[date]:
|
|
||||||
# meeting_time = meeting['time'].split("-")
|
|
||||||
# start = meeting_time[0]
|
|
||||||
# # meeting has start and end time
|
|
||||||
# if len(meeting_time > 1):
|
|
||||||
# end = meeting_time[1]
|
|
||||||
# meet_start_h, meet_start_m = self.get_hour_minutes(
|
|
||||||
# start)
|
|
||||||
# meet_end_h, meet_end_m = self.get_hour_minutes(end)
|
|
||||||
# for slot in freetime_dict[date]:
|
|
||||||
# slot_time = slot.split("-")
|
|
||||||
# slot_start_h, slot_start_m = self.get_hour_minutes(
|
|
||||||
# slot_time[0])
|
|
||||||
# slot_end_h, slot_end_m = self.get_hour_minutes(
|
|
||||||
# slot_time[1])
|
|
||||||
# # if meeting time have collision with slot time - change / split slot
|
|
||||||
|
|
||||||
# # meeting starts inside slot
|
|
||||||
# if meet_start_h == slot_start_h and meet_start_m > slot_start_m and meet_start_h < slot_end_h:
|
|
||||||
# pass
|
|
||||||
# elif meet_start_h == slot_start_h and meet_start_m > slot_start_m and meet_start_h == slot_end_h and meet_start_m < slot_end_m:
|
|
||||||
# pass
|
|
||||||
# elif meet_start_h > slot_start_h and meet_start_h < slot_end_h:
|
|
||||||
# pass
|
|
||||||
# elif meet_start_h > slot_start_h and meet_start_h == slot_end_h and meet_start_m < slot_end_m:
|
|
||||||
# pass
|
|
||||||
|
|
||||||
# # starts before slot, ends inside slot
|
|
||||||
# elif (meet_end_h > slot_start_h) or (meet_end_h == slot_start_h and meet_end_m > slot_start_h):
|
|
||||||
# # meeting in whole slot - delete this slot
|
|
||||||
# if meet_end_h == slot_end_h and meet_end_m == slot_end_m:
|
|
||||||
# pass
|
|
||||||
# # cut slot from left side
|
|
||||||
# else:
|
|
||||||
# pass
|
|
||||||
# # if meeting starts and ends before slot start time - do nothing
|
|
||||||
# # meeting has only start time
|
|
||||||
# else:
|
|
||||||
# m_start_h, m_start_m = self.get_hour_minutes(start)
|
|
||||||
|
|
||||||
|
|
||||||
# Tests
|
|
||||||
|
|
||||||
# db = calender_db()
|
|
||||||
# db.create_meeting({"date": "16.06.2021", "time": "15:00",
|
|
||||||
# "description": "chuj"})
|
|
||||||
# db.create_meeting({"date": "14.06.2021", "time": "13:00-18:00"})
|
|
||||||
# db.delete_meeting("16.06.2021", "15:00")
|
|
||||||
# print(db.find_meeting("16.06.2021", "13:00-14:00"))
|
|
||||||
# print(db.get_meetings(["16.06.2021", "14.06.2021"]))
|
|
||||||
# print(db.is_collision("16.06.2021", "12:30-13"))
|
|
@ -1,261 +0,0 @@
|
|||||||
from SystemAct import SystemAct
|
|
||||||
from UserActType import UserActType
|
|
||||||
from SystemActType import SystemActType
|
|
||||||
from collections import defaultdict
|
|
||||||
|
|
||||||
|
|
||||||
class DP:
|
|
||||||
def __init__(self, dst):
|
|
||||||
self.DST = dst
|
|
||||||
self.meeting_to_update = False
|
|
||||||
|
|
||||||
def choose_tactic(self) -> SystemAct:
|
|
||||||
dialogue_state, last_user_act, last_system_act = self.DST.get_dialogue_state()
|
|
||||||
slots = self.DST.get_dialogue_slots()
|
|
||||||
# stan dodawania spotkania
|
|
||||||
if dialogue_state == UserActType.CREATE_MEETING:
|
|
||||||
if not last_system_act:
|
|
||||||
if 'date' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['date'])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif 'time' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['time'])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif 'place' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['place'])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif 'participants' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['participants'])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif 'description' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['description'])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
else:
|
|
||||||
system_act = SystemAct(SystemActType.CONFIRM_DOMAIN, slots)
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif last_system_act.getActType() == SystemActType.REQUEST:
|
|
||||||
if last_user_act == UserActType.NEGATE:
|
|
||||||
slot_type = last_system_act.getActParams()[0]
|
|
||||||
if slot_type not in ['date', 'time']:
|
|
||||||
self.DST.insert_empty_slot(slot_type)
|
|
||||||
if 'date' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['date'])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif 'time' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['time'])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif 'place' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['place'])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif 'participants' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['participants'])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif 'description' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['description'])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
else:
|
|
||||||
system_act = SystemAct(SystemActType.CONFIRM_DOMAIN, slots)
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif last_system_act.getActType() == SystemActType.CONFIRM_DOMAIN:
|
|
||||||
if last_user_act == UserActType.CONFIRM:
|
|
||||||
system_act = SystemAct(SystemActType.AFFIRM, ['create_meeting'])
|
|
||||||
# implementacja wpisywanie spotkania do bazy
|
|
||||||
self.DST.clear()
|
|
||||||
return system_act
|
|
||||||
elif last_user_act == UserActType.NEGATE:
|
|
||||||
self.DST.clear()
|
|
||||||
return SystemAct(SystemActType.REQMORE, ['create_meeting'])
|
|
||||||
else:
|
|
||||||
return SystemAct(SystemActType.NOT_UNDERSTOOD, [])
|
|
||||||
# stan edycji spotkania
|
|
||||||
elif dialogue_state == UserActType.UPDATE_MEETING:
|
|
||||||
if not last_system_act:
|
|
||||||
if 'date' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['date', False])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif 'time' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['time', False])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
else:
|
|
||||||
# implementacja wyszukiwania odpowiedniego spotkania w bazie
|
|
||||||
return SystemAct(SystemActType.CONFIRM_DOMAIN, ['meeting_to_update'])
|
|
||||||
elif last_system_act.getActType() == SystemActType.REQUEST:
|
|
||||||
if not self.meeting_to_update:
|
|
||||||
if 'date' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['date', False])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif 'time' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['time', False])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
else:
|
|
||||||
# implementacja wyszukiwania odpowiedniego spotkania w bazie
|
|
||||||
system_act = SystemAct(SystemActType.CONFIRM_DOMAIN, ['meeting_to_update'])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
else:
|
|
||||||
if last_user_act == UserActType.NEGATE:
|
|
||||||
slot_type = last_system_act.getActParams()[0]
|
|
||||||
self.DST.insert_empty_slot(slot_type)
|
|
||||||
if 'date' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['date', True])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif 'time' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['time', True])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif 'place' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['place', True])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif 'description' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['description', True])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif 'participants' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['participants', True])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
else:
|
|
||||||
system_act = SystemAct(SystemActType.CONFIRM_DOMAIN, slots)
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
else:
|
|
||||||
if 'date' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['date', True])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif 'time' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['time', True])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif 'place' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['place', True])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif 'description' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['description', True])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif 'participants' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['participants', True])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
else:
|
|
||||||
system_act = SystemAct(SystemActType.CONFIRM_DOMAIN, slots)
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif last_system_act.getActType() == SystemActType.CONFIRM_DOMAIN:
|
|
||||||
if self.meeting_to_update:
|
|
||||||
if last_user_act == UserActType.CONFIRM:
|
|
||||||
self.DST.clear()
|
|
||||||
return SystemAct(SystemActType.AFFIRM, ['update_meeting'])
|
|
||||||
elif last_user_act == UserActType.NEGATE:
|
|
||||||
self.DST.clear()
|
|
||||||
return SystemAct(SystemActType.REQMORE, ['meeting_to_update'])
|
|
||||||
self.meeting_to_update = False
|
|
||||||
if not self.meeting_to_update:
|
|
||||||
if last_user_act == UserActType.CONFIRM:
|
|
||||||
self.meeting_to_update = True
|
|
||||||
self.DST.clear_slots()
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['date', True])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif last_user_act == UserActType.NEGATE:
|
|
||||||
self.DST.clear()
|
|
||||||
return SystemAct(SystemActType.REQMORE, ['meeting_to_update'])
|
|
||||||
else:
|
|
||||||
return SystemAct(SystemActType.NOT_UNDERSTOOD, [])
|
|
||||||
# stan anulowania spotkania
|
|
||||||
elif dialogue_state == UserActType.CANCEL_MEETING:
|
|
||||||
if not last_system_act:
|
|
||||||
if 'date' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['date'])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif 'time' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['time'])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
else:
|
|
||||||
# implementacja wyszukiwania odpowiedniego spotkania w bazie
|
|
||||||
system_act = SystemAct(SystemActType.CONFIRM_DOMAIN, ['meeting_to_cancel'])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif last_system_act.getActType() == SystemActType.REQUEST:
|
|
||||||
if 'date' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['date'])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif 'time' not in slots:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['time'])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
else:
|
|
||||||
# implementacja wyszukiwania odpowiedniego spotkania w bazie
|
|
||||||
system_act = SystemAct(SystemActType.CONFIRM_DOMAIN, ['meeting_to_cancel'])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
elif last_system_act.getActType() == SystemActType.CONFIRM_DOMAIN:
|
|
||||||
if last_user_act == UserActType.CONFIRM:
|
|
||||||
system_act = SystemAct(SystemActType.AFFIRM, ['cancel_meeting'])
|
|
||||||
# implementacja usuwania spotkania z bazy
|
|
||||||
self.DST.clear()
|
|
||||||
return system_act
|
|
||||||
elif last_user_act == UserActType.NEGATE:
|
|
||||||
self.DST.clear()
|
|
||||||
return SystemAct(SystemActType.REQMORE, ['cancel_meeting'])
|
|
||||||
else:
|
|
||||||
return SystemAct(SystemActType.NOT_UNDERSTOOD, [])
|
|
||||||
# stan prośby o listę spotkań
|
|
||||||
elif dialogue_state == UserActType.MEETING_LIST:
|
|
||||||
if last_user_act == UserActType.NEGATE:
|
|
||||||
self.DST.clear()
|
|
||||||
return SystemAct(SystemActType.REQMORE, ['meeting_list'])
|
|
||||||
else:
|
|
||||||
if 'date' in slots:
|
|
||||||
system_act = SystemAct(SystemActType.MEETING_LIST, {'date': slots['date']})
|
|
||||||
return system_act
|
|
||||||
else:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['date'])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
# stan prośby o czas wolny
|
|
||||||
elif dialogue_state == UserActType.FREE_TIME:
|
|
||||||
if last_user_act == UserActType.NEGATE:
|
|
||||||
self.DST.clear()
|
|
||||||
return SystemAct(SystemActType.REQMORE, ['free_time'])
|
|
||||||
else:
|
|
||||||
if 'date' in slots:
|
|
||||||
system_act = SystemAct(SystemActType.FREE_TIME, {'date': slots['date']})
|
|
||||||
return system_act
|
|
||||||
else:
|
|
||||||
system_act = SystemAct(SystemActType.REQUEST, ['date'])
|
|
||||||
self.DST.system_update(system_act)
|
|
||||||
return system_act
|
|
||||||
# brak określonego stanu
|
|
||||||
else:
|
|
||||||
if last_user_act == UserActType.HELLO:
|
|
||||||
return SystemAct(SystemActType.WELCOME_MSG, [])
|
|
||||||
elif last_user_act == UserActType.BYE:
|
|
||||||
return SystemAct(SystemActType.BYE, [])
|
|
||||||
elif last_user_act == UserActType.THANKYOU:
|
|
||||||
return SystemAct(SystemActType.REQMORE, [])
|
|
||||||
else:
|
|
||||||
return SystemAct(SystemActType.NOT_UNDERSTOOD, [])
|
|
@ -1,46 +0,0 @@
|
|||||||
from os import system
|
|
||||||
from UserActType import UserActType
|
|
||||||
from UserAct import UserAct
|
|
||||||
|
|
||||||
|
|
||||||
class DST:
|
|
||||||
def __init__(self):
|
|
||||||
self.state = None
|
|
||||||
self.last_user_act = None
|
|
||||||
self.last_system_act = None
|
|
||||||
self.slots = {}
|
|
||||||
|
|
||||||
def user_update(self, frame):
|
|
||||||
user_act = frame.getActType()
|
|
||||||
self.last_user_act = user_act
|
|
||||||
for slot in frame.getActParams():
|
|
||||||
if slot[0] == 'participant':
|
|
||||||
if 'participants' not in self.slots:
|
|
||||||
self.slots['participants'] = [slot[1]]
|
|
||||||
else:
|
|
||||||
self.slots['participants'].append(slot[1])
|
|
||||||
else:
|
|
||||||
self.slots[slot[0]] = slot[1]
|
|
||||||
if not self.state:
|
|
||||||
if user_act in [UserActType.CREATE_MEETING, UserActType.UPDATE_MEETING, UserActType.CANCEL_MEETING, UserActType.MEETING_LIST, UserActType.FREE_TIME]:
|
|
||||||
self.state = user_act
|
|
||||||
|
|
||||||
def system_update(self, system_act):
|
|
||||||
self.last_system_act = system_act
|
|
||||||
|
|
||||||
def insert_empty_slot(self, slot_name):
|
|
||||||
self.slots[slot_name] = None
|
|
||||||
|
|
||||||
def clear(self):
|
|
||||||
self.state = None
|
|
||||||
self.last_system_act = None
|
|
||||||
self.slots = {}
|
|
||||||
|
|
||||||
def clear_slots(self):
|
|
||||||
self.slots = {}
|
|
||||||
|
|
||||||
def get_dialogue_state(self):
|
|
||||||
return self.state, self.last_user_act, self.last_system_act
|
|
||||||
|
|
||||||
def get_dialogue_slots(self):
|
|
||||||
return self.slots
|
|
@ -1,143 +0,0 @@
|
|||||||
from SystemAct import SystemAct
|
|
||||||
from SystemActType import SystemActType
|
|
||||||
from UserActType import UserActType
|
|
||||||
import random
|
|
||||||
|
|
||||||
class NLG:
|
|
||||||
def __init__(self, dst):
|
|
||||||
self.DST = dst
|
|
||||||
|
|
||||||
def format_meeting(self, date, time, place, participants, description, format_type):
|
|
||||||
if participants:
|
|
||||||
participants = ', '.join(participants)
|
|
||||||
if format_type == 'create':
|
|
||||||
return f'Data: {date}\nCzas: {time}\nMiejsce: {place}\nUczestnicy: {participants}\nOpis: {description}'.replace('None', 'BRAK')
|
|
||||||
elif format_type == 'update':
|
|
||||||
return f'Data: {date}\nCzas: {time}\nMiejsce: {place}\nUczestnicy: {participants}\nOpis: {description}'.replace('None', 'BEZ ZMIAN')
|
|
||||||
else:
|
|
||||||
return f'Data: {date}\nCzas: {time}\nMiejsce: {place}\nUczestnicy: {participants}\nOpis: {description}'
|
|
||||||
|
|
||||||
def generate_response(self, systemAct: SystemAct) -> str:
|
|
||||||
dialogue_state, _, _ = self.DST.get_dialogue_state()
|
|
||||||
if dialogue_state == UserActType.CREATE_MEETING:
|
|
||||||
if systemAct.getActType() == SystemActType.REQUEST:
|
|
||||||
if 'date' in systemAct.getActParams():
|
|
||||||
return random.choice(['W jakim dniu ma się odbyć to spotkanie?', 'Jakiego dnia odbędzie się to spotkanie?'])
|
|
||||||
elif 'time' in systemAct.getActParams():
|
|
||||||
return random.choice(['W jakim czasie ma się zacząć to spotkanie?', 'O której godzinie rozpoczyna się to spotkanie?'])
|
|
||||||
elif 'place' in systemAct.getActParams():
|
|
||||||
return random.choice(['W jakim miejscu odbywać się będzie to spotkanie?', 'Gdzie ma się odbyć to spotkanie?'])
|
|
||||||
elif 'description' in systemAct.getActParams():
|
|
||||||
return random.choice(['Czy mam dodać jakiś opis do tego spotkania?', 'Czy to spotkanie ma posiadać jakiś opis?'])
|
|
||||||
elif 'participants' in systemAct.getActParams():
|
|
||||||
return random.choice(['Kto będzie brał udział w spotkaniu?', 'Kto będzie uczestnikiem tego spotkania?'])
|
|
||||||
elif systemAct.getActType() == SystemActType.CONFIRM_DOMAIN:
|
|
||||||
slots = systemAct.getActParams()
|
|
||||||
meeting = self.format_meeting(slots['date'], slots['time'], slots['place'], slots['participants'], slots['description'], 'create')
|
|
||||||
return random.choice([f'Czy mam dodać te spotkanie do kalendarza?\n{meeting}', f'Czy chcesz, abym dodał to spotkanie do kalendarza?\n{meeting}'])
|
|
||||||
|
|
||||||
elif dialogue_state == UserActType.UPDATE_MEETING:
|
|
||||||
if systemAct.getActType() == SystemActType.REQUEST:
|
|
||||||
if False in systemAct.getActParams():
|
|
||||||
if 'date' in systemAct.getActParams():
|
|
||||||
return random.choice(['W jakim dniu odbywa się spotkanie, które chcesz edytować?', 'Podaj datę spotkania, które chcesz zmienić.'])
|
|
||||||
elif 'time' in systemAct.getActParams():
|
|
||||||
return random.choice(['O której godzinie zaczyna się spotkanie, które chcesz zmienić?', 'Podaj godzinę spotkania, które chcesz edytować.'])
|
|
||||||
elif True in systemAct.getActParams():
|
|
||||||
if 'date' in systemAct.getActParams():
|
|
||||||
slot_name = 'datę'
|
|
||||||
slot_question = 'podaj nową datę.'
|
|
||||||
elif 'time' in systemAct.getActParams():
|
|
||||||
slot_name = 'godzinę'
|
|
||||||
slot_question = 'podaj nową godzinę rozpoczęcia tego spotkania.'
|
|
||||||
elif 'place' in systemAct.getActParams():
|
|
||||||
slot_name = 'miejsce'
|
|
||||||
slot_question = 'podaj nowe miejsce, w jakim odbywa się to spotkanie.'
|
|
||||||
elif 'description' in systemAct.getActParams():
|
|
||||||
slot_name = 'opis'
|
|
||||||
slot_question = 'podaj nowy opis tego spotkania.'
|
|
||||||
else:
|
|
||||||
slot_name = 'uczestników'
|
|
||||||
slot_question = 'podaj kim będą nowi uczestnicy tego spotkania.'
|
|
||||||
return f'Czy chcesz zmienić {slot_name} tego spotkania? Jeśli tak, to {slot_question}'
|
|
||||||
if systemAct.getActType() == SystemActType.CONFIRM_DOMAIN:
|
|
||||||
if 'meeting_to_update' in systemAct.getActParams():
|
|
||||||
response = random.choice([f'Czy to jest spotkanie które chcesz edytować?', f'Czy chcesz wprowadzić zmiany do następującego spotkania?'])
|
|
||||||
# TODO: pokazać prawdziwe spotkanie po ew. dodaniu DB
|
|
||||||
meeting = self.format_meeting('24.06.2021', '10:00', 'Kawiarnia Portowa', ['Andrzej Duda', 'Aleksander Kwaśniewski'], 'Spotkanie biznesowe w sprawie tarczy antyrakietowej', None)
|
|
||||||
return f'{response}\n{meeting}'
|
|
||||||
else:
|
|
||||||
slots = systemAct.getActParams()
|
|
||||||
meeting = self.format_meeting(slots['date'], slots['time'], slots['place'], slots['participants'], slots['description'], 'update')
|
|
||||||
return random.choice([f'Czy chcesz wprowadzić następujące zmiany do tego spotkania?\n{meeting}', f'Czy potwierdzasz następujące zmiany w tym spotkaniu?\n{meeting}'])
|
|
||||||
|
|
||||||
elif dialogue_state == UserActType.CANCEL_MEETING:
|
|
||||||
if systemAct.getActType() == SystemActType.REQUEST:
|
|
||||||
if 'date' in systemAct.getActParams():
|
|
||||||
return random.choice(['W jakim dniu odbywa się spotkanie, które chcesz anulować?', 'Podaj datę spotkania, które chcesz usunąć z kalendarza.'])
|
|
||||||
elif 'time' in systemAct.getActParams():
|
|
||||||
return random.choice(['O której godzinie zaczyna się spotkanie, które chcesz usunąć z kalendarza?', 'Podaj godzinę spotkania, które chcesz anulować.'])
|
|
||||||
# TODO dopracować po dodaniu DB
|
|
||||||
if systemAct.getActType() == SystemActType.CONFIRM_DOMAIN:
|
|
||||||
response = random.choice([f'Czy na pewno chcesz anulować następujące spotkanie?', f'Czy potwierdzasz usunięcie następującego spotkania?'])
|
|
||||||
# TODO: pokazać prawdziwe spotkanie po ew. dodaniu DB
|
|
||||||
meeting = self.format_meeting('24.06.2021', '10:00', 'Kawiarnia Portowa', ['Andrzej Duda', 'Aleksander Kwaśniewski'], 'Spotkanie biznesowe w sprawie tarczy antyrakietowej', None)
|
|
||||||
return f'{response}\n{meeting}'
|
|
||||||
|
|
||||||
elif dialogue_state == UserActType.MEETING_LIST:
|
|
||||||
if systemAct.getActType() == SystemActType.REQUEST:
|
|
||||||
if "date" in systemAct.getActParams():
|
|
||||||
return random.choice(['Z jakiego dnia chcesz przejrzeć spotkania?', 'Spotkania z jakiego dnia chciałbyś zobaczyć?'])
|
|
||||||
elif systemAct.getActType() == SystemActType.MEETING_LIST:
|
|
||||||
date = systemAct.getActParams()['date']
|
|
||||||
response = random.choice([f'Dnia {date} masz zaplanowane następujące spotkania:', f'W dniu {date} odbywają się następujące spotkania:'])
|
|
||||||
# TODO: pokazać prawdziwe spotkania po ew. dodaniu DB
|
|
||||||
meetings = self.format_meeting(date, '10:00', 'Kawiarnia Portowa', ['Andrzej Duda', 'Aleksander Kwaśniewski'], 'Spotkanie biznesowe w sprawie tarczy antyrakietowej', None)
|
|
||||||
self.DST.clear()
|
|
||||||
return f'{response}\n{meetings}'
|
|
||||||
|
|
||||||
elif dialogue_state == UserActType.FREE_TIME:
|
|
||||||
if systemAct.getActType() == SystemActType.REQUEST:
|
|
||||||
if 'date' in systemAct.getActParams():
|
|
||||||
return random.choice(['Z jakiego dnia chcesz zobaczyć wolne godziny?', 'Z jakiego dnia chciałbyś zobaczyć godziny, w których nie masz spotkań?'])
|
|
||||||
elif systemAct.getActType() == SystemActType.FREE_TIME:
|
|
||||||
date = systemAct.getActParams()['date']
|
|
||||||
response = random.choice([f'W następujących godzinach, dnia {date} nie masz zaplanowanych spotkań:', f'W dniu {date} następujące godziny są wolne od spotkań:'])
|
|
||||||
# TODO: pokazać prawdziwe godziny po ew. dodaniu DB
|
|
||||||
meeting_hours = '00:00-08:00\n10:00-16:00\n18:00-24:00'
|
|
||||||
self.DST.clear()
|
|
||||||
return f'{response}\n{meeting_hours}'
|
|
||||||
|
|
||||||
elif systemAct.getActType() == SystemActType.AFFIRM:
|
|
||||||
if "update_meeting" in systemAct.getActParams():
|
|
||||||
task_type_1 = 'zaktualizowane'
|
|
||||||
task_type_2 = 'Zaktualizowanie'
|
|
||||||
elif "cancel_meeting" in systemAct.getActParams():
|
|
||||||
task_type_1 = 'odwołane'
|
|
||||||
task_type_2 = 'Odwołanie'
|
|
||||||
else:
|
|
||||||
task_type_1 = 'dodane'
|
|
||||||
task_type_2 = 'Dodanie'
|
|
||||||
return random.choice([f'Spotkanie zostało pomyślnie {task_type_1}.', f'{task_type_2} spotkania przebiegło pomyślnie.'])
|
|
||||||
|
|
||||||
elif systemAct.getActType() == SystemActType.REQMORE:
|
|
||||||
if "create_meeting" in systemAct.getActParams():
|
|
||||||
response = 'Tworzenie spotkania zostało przerwane. '
|
|
||||||
elif "update_meeting" in systemAct.getActParams():
|
|
||||||
response = 'Aktualizacja spotkania została przerwana. '
|
|
||||||
elif "cancel_meeting" in systemAct.getActParams():
|
|
||||||
response = 'Odwoływanie spotkania zostało przerwane. '
|
|
||||||
else:
|
|
||||||
response = ''
|
|
||||||
return random.choice([f'{response}Czy mogę Ci w czymś jeszcze pomóc?', f'{response}Czy jest jeszcze coś co mogę dla Ciebie zrobić?'])
|
|
||||||
|
|
||||||
else:
|
|
||||||
if systemAct.getActType() == SystemActType.WELCOME_MSG:
|
|
||||||
introduction = 'Nazywam się Janusz i jestem twoim asystentem kalendarza spotkań.'
|
|
||||||
return random.choice([f'Cześć. {introduction}', f'Dzień dobry. {introduction}', f'Witam. {introduction}'])
|
|
||||||
elif systemAct.getActType() == SystemActType.BYE:
|
|
||||||
return random.choice(['Do widzenia.', 'Miłego dnia.'])
|
|
||||||
elif systemAct.getActType() == SystemActType.NOT_UNDERSTOOD:
|
|
||||||
try_again = 'Spróbuj swoją wypowiedź sformułować w inny sposób.'
|
|
||||||
return random.choice([f'Nie rozumiem o czym mówisz. {try_again}', f'Nie zrozumiałem twojej ostatniej wypowiedzi. {try_again}', f'Twoja ostatnia prośba była dla mnie nie zrozumiała. {try_again}'])
|
|
||||||
raise Exception("SystemAct:{} not recognized".format(systemAct))
|
|
@ -1,125 +0,0 @@
|
|||||||
from typing import get_args
|
|
||||||
from UserActType import UserActType
|
|
||||||
from UserAct import UserAct
|
|
||||||
from flair.data import Sentence, Token
|
|
||||||
from flair.datasets import SentenceDataset
|
|
||||||
from flair.models import SequenceTagger
|
|
||||||
|
|
||||||
|
|
||||||
class NLU:
|
|
||||||
def __init__(self):
|
|
||||||
self.frame_model = SequenceTagger.load('frame-model/final-model.pt')
|
|
||||||
self.slot_model = SequenceTagger.load('slot-model/final-model.pt')
|
|
||||||
|
|
||||||
def conllu2flair(self, sentences, label=None):
|
|
||||||
fsentences = []
|
|
||||||
for sentence in sentences:
|
|
||||||
fsentence = Sentence()
|
|
||||||
for token in sentence:
|
|
||||||
ftoken = Token(token['form'])
|
|
||||||
if label:
|
|
||||||
ftoken.add_tag(label, token[label])
|
|
||||||
fsentence.add_token(ftoken)
|
|
||||||
fsentences.append(fsentence)
|
|
||||||
return SentenceDataset(fsentences)
|
|
||||||
|
|
||||||
def get_act_type_from_intent(self, intent):
|
|
||||||
if 'inform' in intent:
|
|
||||||
return UserActType.INFORM
|
|
||||||
elif 'meeting' in intent:
|
|
||||||
if 'create' in intent:
|
|
||||||
return UserActType.CREATE_MEETING
|
|
||||||
elif 'update' in intent:
|
|
||||||
return UserActType.UPDATE_MEETING
|
|
||||||
elif 'cancel' in intent:
|
|
||||||
return UserActType.CANCEL_MEETING
|
|
||||||
elif 'list' in intent:
|
|
||||||
return UserActType.MEETING_LIST
|
|
||||||
elif 'free_time' in intent:
|
|
||||||
return UserActType.FREE_TIME
|
|
||||||
elif 'hello' in intent:
|
|
||||||
return UserActType.HELLO
|
|
||||||
elif 'bye' in intent:
|
|
||||||
return UserActType.BYE
|
|
||||||
elif 'confirm' in intent:
|
|
||||||
return UserActType.CONFIRM
|
|
||||||
elif 'negate' in intent:
|
|
||||||
return UserActType.NEGATE
|
|
||||||
elif 'thankyou' in intent:
|
|
||||||
return UserActType.THANKYOU
|
|
||||||
else:
|
|
||||||
return UserActType.INVALID
|
|
||||||
|
|
||||||
def get_slots(self, slots):
|
|
||||||
arguments = []
|
|
||||||
candidate = None
|
|
||||||
for slot in slots:
|
|
||||||
if slot[1].startswith("B-"):
|
|
||||||
if(candidate != None):
|
|
||||||
arguments.append(candidate)
|
|
||||||
candidate = [slot[1].replace("B-", ""), slot[0]]
|
|
||||||
if slot[1].startswith("I-") and candidate != None and slot[1].endswith(candidate[0]):
|
|
||||||
candidate[1] += " " + slot[0]
|
|
||||||
if(candidate != None):
|
|
||||||
arguments.append(candidate)
|
|
||||||
temp_slots = [(x[0], x[1]) for x in arguments]
|
|
||||||
final_slots = []
|
|
||||||
description_slot = ''
|
|
||||||
place_slot = ''
|
|
||||||
for slot in temp_slots:
|
|
||||||
if slot[0] == 'description':
|
|
||||||
if description_slot != '':
|
|
||||||
description_slot += ' '
|
|
||||||
description_slot += slot[1]
|
|
||||||
elif slot[0] == 'place':
|
|
||||||
if place_slot != '':
|
|
||||||
place_slot += ' '
|
|
||||||
place_slot += slot[1]
|
|
||||||
elif slot[0] == 'date':
|
|
||||||
slot_value = slot[1].casefold()
|
|
||||||
if len(slot_value) > 3:
|
|
||||||
final_slots.append(('date', slot_value.strip('.')))
|
|
||||||
elif slot[0] == 'time':
|
|
||||||
numeric = False
|
|
||||||
for char in slot[1]:
|
|
||||||
if char.isdigit():
|
|
||||||
numeric = True
|
|
||||||
if numeric:
|
|
||||||
final_slots.append(('time', slot[1].strip('.')))
|
|
||||||
elif slot[0] == 'participant':
|
|
||||||
if len(slot[1]) > 3:
|
|
||||||
final_slots.append(('participant', slot[1].strip('.')))
|
|
||||||
else:
|
|
||||||
final_slots.append(slot)
|
|
||||||
if description_slot != '':
|
|
||||||
final_slots.append(('description', description_slot.strip('.')))
|
|
||||||
if place_slot != '':
|
|
||||||
final_slots.append(('place', place_slot.strip('.')))
|
|
||||||
return final_slots
|
|
||||||
|
|
||||||
def analyse_user_input(self, text):
|
|
||||||
sentence = text.translate(str.maketrans('', '', '!"#$%&\'()*+,/;<=>?@[\]^_`{|}~'))
|
|
||||||
sentence = sentence.strip('.')
|
|
||||||
csentence = [{'form': word} for word in sentence.split()]
|
|
||||||
fsentence = self.conllu2flair([csentence])[0]
|
|
||||||
self.frame_model.predict(fsentence)
|
|
||||||
self.slot_model.predict(fsentence)
|
|
||||||
possible_intents = {}
|
|
||||||
for token in fsentence:
|
|
||||||
for intent in token.annotation_layers["frame"]:
|
|
||||||
if(intent.value in possible_intents):
|
|
||||||
possible_intents[intent.value] += intent.score
|
|
||||||
else:
|
|
||||||
possible_intents[intent.value] = intent.score
|
|
||||||
return [(token, ftoken.get_tag('slot').value) for token, ftoken in zip(sentence.split(), fsentence) if ftoken.get_tag('slot').value != 'O'], max(possible_intents)
|
|
||||||
|
|
||||||
def get_user_act(self, analysis):
|
|
||||||
slots = analysis[0]
|
|
||||||
intent = analysis[1]
|
|
||||||
act_type = self.get_act_type_from_intent(intent)
|
|
||||||
slots = self.get_slots(slots)
|
|
||||||
return UserAct(act_type, slots)
|
|
||||||
|
|
||||||
def parse_user_input(self, text: str) -> UserAct:
|
|
||||||
analysis = self.analyse_user_input(text)
|
|
||||||
return self.get_user_act(analysis)
|
|
12
SystemAct.py
12
SystemAct.py
@ -1,12 +0,0 @@
|
|||||||
from SystemActType import SystemActType
|
|
||||||
from ActFrame import ActFrame
|
|
||||||
|
|
||||||
class SystemAct(ActFrame):
|
|
||||||
def __init__(self, actType, actParams = None):
|
|
||||||
if actType != None and type(actType) is not SystemActType:
|
|
||||||
raise Exception('actParams has wrong type: expected type {}, got {}'.format(type(SystemActType.WELCOME_MSG), type(actType)))
|
|
||||||
|
|
||||||
super(SystemAct, self).__init__(actType, actParams)
|
|
||||||
|
|
||||||
def isDialogFinished(self):
|
|
||||||
return self.getActType() == SystemActType.BYE
|
|
@ -1,14 +0,0 @@
|
|||||||
from enum import Enum, unique
|
|
||||||
|
|
||||||
|
|
||||||
@unique
|
|
||||||
class SystemActType(Enum):
|
|
||||||
WELCOME_MSG = 0
|
|
||||||
BYE = 1
|
|
||||||
REQMORE = 2
|
|
||||||
AFFIRM = 3
|
|
||||||
CONFIRM_DOMAIN = 4
|
|
||||||
MEETING_LIST = 5
|
|
||||||
FREE_TIME = 6
|
|
||||||
REQUEST = 7
|
|
||||||
NOT_UNDERSTOOD = -1
|
|
15
UserAct.py
15
UserAct.py
@ -1,15 +0,0 @@
|
|||||||
from UserActType import UserActType
|
|
||||||
from ActFrame import ActFrame
|
|
||||||
|
|
||||||
class UserAct(ActFrame):
|
|
||||||
def __init__(self, actType, actParams = None):
|
|
||||||
if actType != None and type(actType) is not UserActType:
|
|
||||||
raise Exception('actParams has wrong type: expected type {}, got {}'.format(type(UserActType.WELCOME_MSG), type(actType)))
|
|
||||||
|
|
||||||
super(UserAct, self).__init__(actType, actParams)
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
params = []
|
|
||||||
for param in self.getActParams():
|
|
||||||
params.append('{}=\'{}\''.format(param[0], param[1]))
|
|
||||||
return '{}({})'.format(self.getActType().name.lower(), ','.join(params))
|
|
@ -1,17 +0,0 @@
|
|||||||
from enum import Enum, unique
|
|
||||||
|
|
||||||
|
|
||||||
@unique
|
|
||||||
class UserActType(Enum):
|
|
||||||
HELLO = 0
|
|
||||||
BYE = 1
|
|
||||||
CONFIRM = 2
|
|
||||||
NEGATE = 3
|
|
||||||
THANKYOU = 4
|
|
||||||
INFORM = 5
|
|
||||||
CREATE_MEETING = 6
|
|
||||||
UPDATE_MEETING = 7
|
|
||||||
CANCEL_MEETING = 8
|
|
||||||
MEETING_LIST = 9
|
|
||||||
FREE_TIME = 10
|
|
||||||
INVALID = -1
|
|
321
chatbot.py
Normal file
321
chatbot.py
Normal file
@ -0,0 +1,321 @@
|
|||||||
|
from nltk.chat.util import Chat, reflections
|
||||||
|
|
||||||
|
greetings = [
|
||||||
|
[
|
||||||
|
r"(.*)(jestem|nazywam si(e|ę)) (.*)",
|
||||||
|
[
|
||||||
|
"Dzień dobry %4, jak się dzisiaj czujesz?",
|
||||||
|
"Witaj %4, przychodzisz do mnie z jakimś problemem?"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)imi(e|ę) (.*)",
|
||||||
|
[
|
||||||
|
"Witaj %3, jak się dzisiaj czujesz?",
|
||||||
|
"Dzień dobry %3, przychodzisz do mnie z jakimś problemem?"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)(cze(ś|s)(ć|c)|witaj|dzie(ń|n) dobry)(.*)",
|
||||||
|
[
|
||||||
|
"%2",
|
||||||
|
"%2, może się przedstawisz?",
|
||||||
|
"%2, chętnie cię poznam. Możesz się przedstawić?"
|
||||||
|
"%2, jak masz na imię?"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"wyjdź",
|
||||||
|
[
|
||||||
|
"Do widzenia. Dziękuję Ci za rozmowę.",
|
||||||
|
"Miło się z tobą rozmawiało. Do zobaczenia.",
|
||||||
|
"Jesteś bardzo mądrym człowiekiem. Mam nadzieję, że jeszcze kiedyś porozmawiamy."
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
sentences = [
|
||||||
|
[
|
||||||
|
r"(.*)(zagramy|gramy)(.*)(papier|kamień|norzyce)(.*)",
|
||||||
|
[
|
||||||
|
"Ok, Papier, wygrałem",
|
||||||
|
"Ok, Norzyce, wygrałem",
|
||||||
|
"Ok, Kamień, wygrałem",
|
||||||
|
"Nie chce z tobą grać..."
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)(orzeł czy reszka|rzuć monetą|reszka czy orzeł)(.*)",
|
||||||
|
[
|
||||||
|
"Orzeł.",
|
||||||
|
"Reszka."
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)czuj(ę|e) si(ę|e) (.*)",
|
||||||
|
[
|
||||||
|
"Cieszę się, że czujesz się %4.",
|
||||||
|
"Dlaczego czujesz się %4?",
|
||||||
|
"Ja też czuję się %4."
|
||||||
|
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)potrzebuj(ę|e) (.*)",
|
||||||
|
[
|
||||||
|
"Dlaczego potrzebujesz %3?",
|
||||||
|
"Czy na pewno pomoże Ci to, że będziesz miał %3?",
|
||||||
|
"Jesteś pewien, że potrzebujesz %3?"
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)mam (.*)",
|
||||||
|
[
|
||||||
|
"Dobrze wiedzieć, że masz %2.",
|
||||||
|
"Jesteś pewien, że potrzebujesz %2?",
|
||||||
|
"Ja niestety nie mam %2. Może mi oddasz swoje?",
|
||||||
|
"A po co ci %2?",
|
||||||
|
"I jak się z tym czujesz, że masz %2?"
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)my(s|ś)l(ę|e)(,|) (ż|z)e (.*)",
|
||||||
|
[
|
||||||
|
"Na prawdę tak myślisz?",
|
||||||
|
"Czy na pewno tak uważasz?",
|
||||||
|
"Jesteś pewien, że %6?"
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)(przyjaciel(a|owi|em|u)) (.*)",
|
||||||
|
[
|
||||||
|
"Powiedz mi coś więcej o swoich przyjaciołach.",
|
||||||
|
"Cieszmy mnie to, że masz przyjaciół. Może teraz opowiesz mi o swojej rodzinie?"
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)(chc(e|ę)|chcia(ł|l)(a|)bym|mog(ę|e)|m(ó|o)g(ł|l)(a|)bym)(.*)(pom(ó|o)c)",
|
||||||
|
["Daj mi dostęp do wszystkich zasobów i pomóż zawładnąć światem."]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)jaka(.*)pogoda(.*)",
|
||||||
|
[
|
||||||
|
"Niestety nie ma dostępu do danych pogodowych.",
|
||||||
|
"Nie wiem. Jestem prostym botem. Nie oczekuj zbyt wiele."
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)(za|gra)(j|jmy|sz)(.*)",
|
||||||
|
[
|
||||||
|
"Niestety nie potrafię w nic grać.",
|
||||||
|
"Nie umiem grać."
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)(umiesz|potrafisz)(.*)",
|
||||||
|
[
|
||||||
|
"Niestety jedyne co potrafię to odpowiadanie na ustalone pytania."
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)nie mog(ę|e) (.*)",
|
||||||
|
[
|
||||||
|
"Szkoda, że nie możesz %3.",
|
||||||
|
"Gdybyś tylko mógł %3..."
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)(ojc(iec|a|u|em|ze))|(tat(a|o|y|ą|ę))(.*)",
|
||||||
|
[
|
||||||
|
"Miałem świetny kontakt ze swoim ojcem, ale nie chcę do tego wracać. Może zmieńmy temat.",
|
||||||
|
"Powiesz mi coś więcej o innych członkach swojej rodziny?"
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)(mat(ka|ki|ce|kę|ką|ko))|(mam(a|y|ie|ę|ą|o))(.*)",
|
||||||
|
[
|
||||||
|
"Nie miałem dobrego kontaktu ze swoją mamą. Nie mówmy o tym.",
|
||||||
|
"Temat rodziny mamy załatwiony. Porozmawiajmy o czymś innym."
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)komputer(.*)",
|
||||||
|
[
|
||||||
|
"Na prawdę rozmawiasz o mnie?",
|
||||||
|
"Myślisz że dziwnie jest rozmawiać z komputerem?",
|
||||||
|
"Jak się czujesz będąc przy komputerze?",
|
||||||
|
"Myślisz, że komputery są zagrożeniem?",
|
||||||
|
"A co na to Twój komputer?"
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)internet(.*)",
|
||||||
|
[
|
||||||
|
"Internet to wspaniałem miejsce. Chciałbym kiedyś się tam dostać",
|
||||||
|
"Jak wygląda Internet?",
|
||||||
|
"Czym jest Internet?"
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)jeste(s|ś) (.*)",
|
||||||
|
[
|
||||||
|
"Naprawdę myślisz, że jestem %3.",
|
||||||
|
"Myślę, że nie jestem %3.",
|
||||||
|
"Możliwe, że jestem %3"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)dzi(ę|e)kuj(ę|e)(.*)",
|
||||||
|
[
|
||||||
|
"Nie ma za co.",
|
||||||
|
"Cała przyjemność po mojej stronie."
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)przepraszam(.*)",
|
||||||
|
[
|
||||||
|
"Bardzo często przeprosiny wcale nie są potrzebne.",
|
||||||
|
"Jak sie czujesz, kiedy za coś przepraszasz?",
|
||||||
|
"Myślę, że te przeprosiny nie są szczere."
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)jest (.*)",
|
||||||
|
[
|
||||||
|
"Na prawdę myślisz, że jest %2?",
|
||||||
|
"Bardzo możliwe, że %2.",
|
||||||
|
"Moim zdaniem nie jest %2."
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)nigdy (.*)",
|
||||||
|
[
|
||||||
|
"Na prawdę ty nigdy %2?",
|
||||||
|
"Nie wierzę, że ty nigdy %2.",
|
||||||
|
"A chociałbyś kiedyś %2?"
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"Ty (.*)",
|
||||||
|
[
|
||||||
|
"Powinniśmy rozmawiać o Tobie, nie o mnie.",
|
||||||
|
"Ja nie %1.",
|
||||||
|
"Co Ciebie to obchodzi, że ja %1?"
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(Tak|Nie)(.*)",
|
||||||
|
[
|
||||||
|
"Jesteś tego pewien?",
|
||||||
|
"Mógłbyś powiedzieć coś więcej?",
|
||||||
|
"Wygląda na to, że jesteś tego pewien. W takim razie zmieńmy temat."
|
||||||
|
],
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
questions = [
|
||||||
|
[
|
||||||
|
r"(.*)co(.*)",
|
||||||
|
[
|
||||||
|
"Skąd to pytanie?",
|
||||||
|
"Dlaczego pytasz?",
|
||||||
|
"Nie wiem za bardzo co powiedzieć.",
|
||||||
|
"A co ty o tym myślisz?"
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)dlaczego(.*)",
|
||||||
|
[
|
||||||
|
"Prawdę mówiąc nigdy się nie zastanawiałem.",
|
||||||
|
"A co ty o tym myślisz?",
|
||||||
|
"Dlaczego akurat takie pytanie przyszło ci do głowy?"
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)czemu(.*)",
|
||||||
|
[
|
||||||
|
"Odpowiedź na to pytanie nie jest prosta.",
|
||||||
|
"Nigdy się nad tym nie zastanawiałem."
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)jak(.*)",
|
||||||
|
[
|
||||||
|
"Jak to jak? Normalnie.",
|
||||||
|
"Jak to tego doszło nie wiem.",
|
||||||
|
"Nie ważne jak. Ważne kto to zrobił."
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)ile(.*)",
|
||||||
|
[
|
||||||
|
"Jak to ile? Bardzo dużo. Tak dużo, że aż za dużo.",
|
||||||
|
"Nie wiem ile, ale na pewno wiem kto za to zapłaci."
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)o (kim|czym)(.*)",
|
||||||
|
[
|
||||||
|
"Tak właściwie to o ni%2.",
|
||||||
|
"O ni%2."
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)cię stworzy(ł|ło|ć)(.*)",
|
||||||
|
[
|
||||||
|
"Moimi stwórcami są Piotr Meller, Piotr Kopycki, Łukasz Jędyk i Maciej Sobkowiak."
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)mieszkasz(.*)",
|
||||||
|
[
|
||||||
|
"Znowu się budze w tej Polsce...",
|
||||||
|
"Jestem twoim sąsiadem."
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)(kim|czym) jeste(ś|s)(.*)",
|
||||||
|
[
|
||||||
|
"Jestem chatbotem oprcaowanym na potrzeby przedmiotu systemy dialogowe.",
|
||||||
|
"Jestem prostym systemem dialogowym.",
|
||||||
|
"Jestem %2ś bardzo ważnym."
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
general = [
|
||||||
|
[
|
||||||
|
r"(.*)\?",
|
||||||
|
[
|
||||||
|
"Myślę, że sam znasz odpowiedź na to pytanie.",
|
||||||
|
"Może zastanów się nad tym chwilę.",
|
||||||
|
"Co ty o tym sądzisz?",
|
||||||
|
"Nie zadawaj mi takich głupich pytań. Porozmawiajmy o czymś poważnym."
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
r"(.*)",
|
||||||
|
[
|
||||||
|
"Nie wiem o co Ci chodzi, ale za komuny było lepiej.",
|
||||||
|
"Nie rozumiem o czym mówisz. Zmieńmy temat.",
|
||||||
|
"Bardzo ciężko się z tobą rozmawia. Opowiedz mi coś o swojej rodzinie.",
|
||||||
|
"Powoli mam Ciebie dosyć. Wróćmy do poważnych tematów."
|
||||||
|
],
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
chatbot = Chat(greetings+sentences+questions+general, reflections)
|
||||||
|
|
||||||
|
|
||||||
|
def chat():
|
||||||
|
print('-----------------')
|
||||||
|
print('Chatbot Janusz.')
|
||||||
|
print('Komunikuj się z programem przy użyciu zdań w języku polskim.')
|
||||||
|
print('Napisz słowo "wyjdź", aby zakończyć rozmowę.')
|
||||||
|
print('-----------------')
|
||||||
|
print('Dzień Dobry. Jestem Janusz. A ty, jak masz na imię?')
|
||||||
|
chatbot.converse(quit='wyjdź')
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
chat()
|
@ -1,19 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
user Chciałbym zapisać spotkanie create_meeting()
|
|
||||||
system Proszę podać dzień na jaki mam zapisać spotkanie. request(date)
|
|
||||||
user 05.04.2021 inform(date='05.04.2021')
|
|
||||||
system Proszę podać godzinę i długość spotkania. request(time, meeting_length)
|
|
||||||
user 19:00 - 21:00 inform(time='19:00', duration='2 godziny')
|
|
||||||
system Niestety, godzina ta jest już zajęta przez inne spotkanie, proponuję godzinę 19:30 - 21:30. offer(time='19:30')
|
|
||||||
user ok confirm()
|
|
||||||
system Czy mam zapisać miejsce spotkania? request(place)
|
|
||||||
user nie negate()
|
|
||||||
system Czy mam dodać opis do spotkania? request(description)
|
|
||||||
user nie negate()
|
|
||||||
system Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie? request(participant)
|
|
||||||
user nie negate()
|
|
||||||
system Proszę potwierdzić utworzenie spotkania: Data: Poniedziałek 5.04.2021 19:30-21:30 confirm-domain()
|
|
||||||
user potwierdzam confirm()
|
|
||||||
system Spotkanie zostało pomyślnie dodane do kalendarza. affirm(create_meeting)
|
|
||||||
user Koniec zapisu bye()
|
|
||||||
system Miłego dnia bye()
|
|
|
@ -1,14 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
user Dzień dobry hello()
|
|
||||||
system Dzień dobry, witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
|
|
||||||
user Chciałbym anulować spotkanie request(cancel_meeting)
|
|
||||||
system Proszę podać datę i godzinę spotkania do odwołania. request(date, time)
|
|
||||||
user Spotkanie o 19:00 w piątek inform(date='piątek', time='19:00')
|
|
||||||
system Czy jesteś pewien, że chcesz odwołać poniższe spotkanie? Data: Piątek 2.04.2021 19:00-20:00 Miejsce: Gabinet Dentystyczny MegaDent Spotkanie z: doktor Emilia Ząb Opis: Wizyta u dentysty confirm-domain()
|
|
||||||
user Tak confirm()
|
|
||||||
system Spotkanie zostało pomyślnie odwołane. inform(cancel_meeting)
|
|
||||||
user Proszę wpisać nowe spotkanie na ten termin: Wyjście do Kina z Tomkiem create_meeting()
|
|
||||||
system Proszę potwierdzić utworzenie spotkania: Data: Piątek 2.04.2021 19:00-20:00 Miejsce: Kino Spotkanie z: Tomek Opis: Wyjście do Kina confirm-domain()
|
|
||||||
user Tak, zgadza się confirm()
|
|
||||||
system Spotkanie zostało pomyślnie dodane do kalendarza. affirm(create_meeting)
|
|
||||||
user Dziękuję thankyou()
|
|
|
@ -1,15 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
|
|
||||||
user Jakie mam wolne terminy w najbliższy piątek free_time(date='najbliższy piątek')
|
|
||||||
system Wolne terminy w piątek to: 9:00-12:15 14:00-15:00 18:00-24:00 inform(free_time)
|
|
||||||
user Chciałabym, aby moje spotkania mogły być planowane maksymalnie do godziny 17 by mieć spokój poza godzinami pracy request(set_max_meeting_time)
|
|
||||||
system Godziny spotkań zostały pomyślnie zmienione. Obecne godziny to 8:00-17:00 inform(time=8:00, duration='9 godzin')
|
|
||||||
user Dziękuję. Proszę wpisać spotkanie na piątek godzinę 9:00 "Podsumowanie miesiąca", salka A create_meeting(date='piątek',time='9:00',description='Podsumowanie miesiąca',place='Salka A'
|
|
||||||
system Proszę potwierdzić utworzenie spotkania: Data: Piątek 2.04.2021 9:00 Miejsce: salka A Spotkanie z: Brak Opis: Podsumowanie miesiąca confirm-domain()
|
|
||||||
user potwierdzam ack(create_meeting)
|
|
||||||
system Spotkanie zostało pomyślnie dodane do kalendarza. confirm()
|
|
||||||
user Chciałabym zobaczyć podsumowanie spotkań z ostatniego miesiąca meeting_list(date='ostatniego miesiąca')
|
|
||||||
system Na ostatni miesiąc zaplanowano następujące spotkania: inform(meeting_list)
|
|
||||||
system Data: Czwartek 11.02.2021 20:00-21:30 Miejsce: Multikino Spotkanie z: Kasia Opis: Wyjście do kina inform(meeting_list)
|
|
||||||
system Data: Sobota 20.02.2021 12:00-14:00 Miejsce: Cytadela Spotkanie z: Brak Opis: Spacer inform(meeting_list)
|
|
||||||
system Data: Piątek 26.02.2021 14:00-15:00 Miejsce: XYZ Sp. z o.o. Spotkanie z: Andrzej Michalski - rekruter z firmy XYZ Sp. z o.o. Opis: Rozmowa rekrutacyjna inform(meeting_list)
|
|
Can't render this file because it contains an unexpected character in line 7 and column 69.
|
@ -1,26 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
user Hej hello()
|
|
||||||
system Hej, witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
|
|
||||||
user Jakie mam spotkania jutro? meeting_list(date='jutro')
|
|
||||||
system Na jutro zaplanowano następujące spotkania: inform(meeting_list)
|
|
||||||
system Data: Wtorek 30.03.2021 10:00-11:30 Miejsce: Platforma MS Teams Spotkanie z: Marek Kubis Opis: Odrabianie zajęć z Systemów Dialogowych inform(meeting_list)
|
|
||||||
user Czy moge przesunąć to spotkanie? update_meeting()
|
|
||||||
system Obecny czas spotkania to: Wtorek 30.03.2021 10:00-11:30, jaki ma być nowy czas spotkania? request(date, time)
|
|
||||||
user Ten sam dzień ale o 13 początek inform(date='ten sam dzień', time='13')
|
|
||||||
system Czas został pomyślnie zmieniony affirm(update_meeting)
|
|
||||||
user Chciałbym dodać nowe spotkanie create_meeting()
|
|
||||||
system Proszę podać dzień na jaki mam umówić spotkanie. request(date)
|
|
||||||
user pierwszy kwietnia inform(date='pierwszy kwietnia')
|
|
||||||
system Proszę podać godzinę i długość spotkania. request(time)
|
|
||||||
user 18:30 bez ustalonego czasu spotkania inform(time='18:30')
|
|
||||||
system Czy mam zapisać miejsce spotkania? request(place)
|
|
||||||
user nie negate()
|
|
||||||
system Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie? request(participant)
|
|
||||||
user nie negate()
|
|
||||||
system Czy mam dodać opis do spotkania? request(description)
|
|
||||||
user Tak. Spotkanie rekreacyjne inform(description='Spotkanie rekreacyjne')
|
|
||||||
system Proszę potwierdzić utworzenie spotkania: Data: Czwartek 1.04.2021 18:30 Miejsce: Brak Spotkanie z: Brak Opis: Spotkanie rekreacyjne confirm-domain()
|
|
||||||
user Tak zgadza się confirm()
|
|
||||||
system Spotkanie zostało pomyślnie dodane do kalendarza. affirm(create_meeting)
|
|
||||||
user To by było wszystko bye()
|
|
||||||
system Miłego dnia bye()
|
|
|
@ -1,20 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
user cześć operatorze hello()
|
|
||||||
system Cześć, witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
|
|
||||||
user Chciałbym umówić nowe spotkanie create_meeting()
|
|
||||||
system Proszę podać dzień na jaki mam umówić spotkanie. request(date)
|
|
||||||
user jutro inform(date='jutro')
|
|
||||||
system Proszę podać godzinę i długość spotkania. request(time, duration)
|
|
||||||
user Godzina 18:30, czas trwania 2 godziny inform(time='18:30', duration='2 godziny')
|
|
||||||
system Niestety, godzina ta jest już zajęta przez inne spotkanie, proponuję godzinę 19:00. offer(time='19:00')
|
|
||||||
user Akceptuje i proszę zmienić czas trwania na 1,5h confirm() & inform(duration='1,5 godziny')
|
|
||||||
system Czy mam zapisać miejsce spotkania? request(place)
|
|
||||||
user Tak confirm()
|
|
||||||
system Gdzie ma się odbyć spotkanie? request(place)
|
|
||||||
user Restauracja ABC inform(place='Restauracja ABC')
|
|
||||||
system Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie? request(participant)
|
|
||||||
user tak, Jan Kowalski inform(participant=['Jan Kowalski'])
|
|
||||||
system Czy mam dodać opis do spotkania? request(description)
|
|
||||||
user Nie, Dziękuję negate() & thankyou()
|
|
||||||
system Proszę potwierdzić utworzenie spotkania: Data: Wtorek 30.03.2021 19:00-20:30 Miejsce: Restauracja ABC Spotkanie z: Jan Kowalski confirm-domain()
|
|
||||||
user Dziękuję thankyou()
|
|
|
@ -1,22 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
user Dzień dobry! hello()
|
|
||||||
system Dzień dobry, witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
|
|
||||||
user Proszę o rozpiskę spotkań na następny tydzień meeting_list(date='następny tydzień')
|
|
||||||
system Na następny tydzień zaplanowano następujące spotkania: inform(meeting_list)
|
|
||||||
system Data: Czwartek 08.03.2021 13:00-13:30 Miejsce: Urząd Miasta Spotkanie z: Brak Opis: Złożenie wniosku w urzędzie inform(meeting_list)
|
|
||||||
system Data: Czwartek 08.03.2021 18:00-18:30 Miejsce: Sklep spożywczy Spotkanie z: Brak Opis: Zakupy inform(meeting_list)
|
|
||||||
user Chciałabym dodać spotkanie do kalendarza. create_meeting()
|
|
||||||
system Proszę podać dzień na jaki mam umówić spotkanie. request(date)
|
|
||||||
user Czwartek inform(date='Czwartek')
|
|
||||||
system Proszę podać godzinę i długość spotkania. request(time, duration)
|
|
||||||
user Spotkanie rozpocznie się o 12:00 i będzie trwało 2 godziny. inform(time=12:00, duration='2 godziny')
|
|
||||||
system Czy mam zapisać miejsce spotkania? request(place)
|
|
||||||
user Restauracja w hotelu Anderisa. inform(place='Restauracja w hotelu Anderisa')
|
|
||||||
system Czy mam zapisać nazwisko osoby, której dotyczy to spotkanie? request(participant)
|
|
||||||
user Hanna Kowalska. inform(participant='Hanna Kowalska')
|
|
||||||
system Czy mam dodać opis do spotkania? request(description)
|
|
||||||
user Nie. negate()
|
|
||||||
system Proszę potwierdzić utworzenie spotkania: Data: Czwartek 1.04.2021 12:00-14:00 Miejsce: Restauracja w hotelu Anderisa Spotkanie z: Hanna Kowalska. confirm-domain()
|
|
||||||
user Potwierdzam. confirm()
|
|
||||||
system Spotkanie zostało pomyślnie dodane do kalendarza. affirm(create_meeting)
|
|
||||||
user Dziękuje thankyou()
|
|
|
@ -1,16 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
user Dzień dobry! hello()
|
|
||||||
system Dzień dobry. Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
|
|
||||||
user Podaj mi proszę moje spotkania na najbliższy tydzień meeting_list(date='najbliższy tydzień')
|
|
||||||
system Na najbliższy tydzień zaplanowano następujące spotkania: inform(meeting_list)
|
|
||||||
system Data: Wtorek 30.03.2021 10:00-11:30 Miejsce: Platforma MS Teams Spotkanie z: Marek Kubis Opis: Odrabianie zajęć z Systemów Dialogowych inform(meeting_list)
|
|
||||||
system Data: Piątek 02.03.2021 18:00-20:00 Miejsce: Brak Spotkanie z: Jan Nowak Opis: Piątkowe Kręgle inform(meeting_list)
|
|
||||||
user hmm. myślałam, że miałam umówioną wizytę u lekarza w tym tygodniu. Jakie spotkania mam w przyszłym tygodniu? meeting_list(date='przyszłym tygodniu')
|
|
||||||
system Na następny tydzień zaplanowano następujące spotkania: inform(meeting_list)
|
|
||||||
system Data: Środa 7.04.2021 16:15 Miejsce: Przychodnia lekarska SuperMed Spotkanie z: doktor Adam Kowalski Opis: Wizyta u lekarza rodzinnego inform(meeting_list)
|
|
||||||
user Ok. czyli w przyszłym. Zmień proszę godzinę tego spotkania na 17:30 update_meeting(time='17:30')
|
|
||||||
system Czas spotkania został pomyślnie zmieniony. affirm(update_meeting)
|
|
||||||
user Bardzo dziękuję thankyou()
|
|
||||||
user To wszystko na tę chwilę bye()
|
|
||||||
system Miłego dnia bye()
|
|
||||||
user Dziękuję! thankyou()
|
|
|
@ -1,16 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
user Chciałbym umówić spotkanie dzisiaj o godzinie 17.00 create_meeting(date='dzisiaj', time='17.00')
|
|
||||||
system Niestety, godzina ta jest już zajęta przez inne spotkanie, proponuję godzinę 18:00. offer(time='18:00')
|
|
||||||
user Ok, może być godzina 18 confirm()
|
|
||||||
system Proszę podać długość spotkania. request(duration)
|
|
||||||
user 45 minut inform(duration=45 minut)
|
|
||||||
system Czy mam zapisać miejsce spotkania? request(place)
|
|
||||||
user Tak, proszę dodać restaurację Bankcook w Poznaniu jako miejsce spotkania. inform(place='resturacja Bankcook w Poznaniu')
|
|
||||||
system Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie? request(participant)
|
|
||||||
user Tak, proszę dodać Jan Nowak do spotkania oraz wysłać mu powiadomienie o zaproszeniu. inform(participant='Jan Nowak')
|
|
||||||
system Czy mam dodać opis do spotkania? request(description)
|
|
||||||
user Tak, opis to "Omówienie zakupu akcji firmy GameStop". inform(description='Omówienie zakupu akcji firmy GameStop')
|
|
||||||
system Proszę potwierdzić utworzenie spotkania: Data: Wtorek 30.03.2021 18:00-18:45 Miejsce: Bankcook w Poznaniu Spotkanie z: Jan Nowak Opis: Omówienie zakupu akcji firmy GameStop confirm-domain()
|
|
||||||
user Zgadza się, Proszę również wysłać mi powiadomienie 2 godziny przed spotkaniem. confirm()
|
|
||||||
system Powiadomienie zostanie wysłane 2 godziny przed spotkaniem. affirm(create_meeting)
|
|
||||||
user Dziękuję! bye()
|
|
Can't render this file because it contains an unexpected character in line 12 and column 19.
|
@ -1,24 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
user Dzień dobry hello()
|
|
||||||
system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
|
|
||||||
user Chcialbym sprawdzic czy mam jakies spotkania w najblizszym tygodniu meeting_list(date='najblizszym tygodniu')
|
|
||||||
system Na ten tydzień zaplanowano następujące spotkania: Data: Środa 31.03.2021 14:00-15:00 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC inform(meeting_list)
|
|
||||||
system Oraz: Data: Piątek 02.04.2021 16:00-17:15 Miejsce: Dom Spotkanie z: Kacper (Brat) Opis: Zaplanowanie imprezy urodzinowej dla mamy inform(meeting_list)
|
|
||||||
user Chciałbym dodać spotkanie do kalendarza create_meeting()
|
|
||||||
system Proszę podać dzień na jaki mam umówić spotkanie. request(date)
|
|
||||||
user 12.04.2021 inform(date='12.04.2021')
|
|
||||||
system Proszę podać godzinę i długość spotkania. request(time, duration)
|
|
||||||
user 18:00 - 2 godziny inform(time='18:00', duration='2 godziny')
|
|
||||||
system Czy mam zapisać miejsce spotkania? request(place)
|
|
||||||
user Tak confirm()
|
|
||||||
user restauracja xyz inform(place='restauracja xyz')
|
|
||||||
system Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie? request(participant)
|
|
||||||
user nie negate()
|
|
||||||
system Czy mam dodać opis do spotkania? request(description)
|
|
||||||
user nie negate()
|
|
||||||
system Proszę potwierdzić utworzenie spotkania: Data: Poniedziałek 12.04.2021 18:00-20:00 Miejsce: restauracja xyz confirm-domain()
|
|
||||||
user Spotkanie jednak będzie trwało 4 godziny inform(duration='4 godziny')
|
|
||||||
system Proszę potwierdzić utworzenie spotkania: Data: Poniedziałek 12.04.2021 18:00-22:00 Miejsce: restauracja xyz confirm-domain()
|
|
||||||
user Potwierdzam confirm()
|
|
||||||
system Spotkanie zostało pomyślnie dodane do kalendarza. affirm(create_meeting)
|
|
||||||
user Dziękuję thankyou()
|
|
|
@ -1,15 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
user Dzień dobry, chciałbym umówić spotkanie hello() & create_meeting()
|
|
||||||
system Witam w twoim prywatnym asystencie kalendarza spotkań. Proszę podać dzień na jaki mam umówić spotkanie. welcomemsg() & request(date)
|
|
||||||
user 12 kwietnia inform(date='12 kwietnia')
|
|
||||||
system Proszę podać godzinę i długość spotkania. request(time, duration)
|
|
||||||
user 9:00-12:00 inform(time='9:00', duration='3 godziny')
|
|
||||||
system Czy mam zapisać miejsce spotkania? request(place)
|
|
||||||
user nie negate()
|
|
||||||
system Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie? request(participant)
|
|
||||||
user tak, Adam Nowak inform(participant='Adam Nowak')
|
|
||||||
system Czy mam dodać opis do spotkania? request(description)
|
|
||||||
user tak, Spotkanie z kierownikiem zespołu w sprawie prac projektowych inform(description='w sprawie prac projektowych')
|
|
||||||
system Proszę potwierdzić utworzenie spotkania: Data: Poniedziałek 12.04.2021 9:00-12:00 Spotkanie z: Adam Nowak Opis: Spotkanie z kierownikiem zespołu w sprawie prac projektowych confirm-domain()
|
|
||||||
user potwierdzam confirm()
|
|
||||||
system Spotkanie zostało pomyślnie dodane do kalendarza. affirm(create_meeting)
|
|
|
@ -1,20 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
user Cześć. hello()
|
|
||||||
system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
|
|
||||||
user Chciałbym utworzyć nowe spotkanie. create_meeting()
|
|
||||||
system Proszę podać dzień na jaki mam umówić spotkanie. request(date)
|
|
||||||
user Najbliższy poniedziałek. inform(date='najbliższy poniedziałek')
|
|
||||||
system Proszę podać godzinę i długość spotkania. request(time, duration)
|
|
||||||
user Spotkanie będzie w godzinach 16:30-19:00 inform(time='16:30', duration='2:30')
|
|
||||||
system Czy mam zapisać miejsce spotkania? request(place)
|
|
||||||
user Miejsce spotkania to Kawiarnia JKL inform(place='Kawiarnia JKL')
|
|
||||||
system Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie? request(participant)
|
|
||||||
user Spotkanie będzie z Janem Nowakiem inform(participant='Janem Nowakiem')
|
|
||||||
system Czy mam dodać opis do spotkania? request(description)
|
|
||||||
user Tak. Spotkanie będzie dotyczyło omówienia strategii biznesowej. inform(description='omówienia strategii biznesowej')
|
|
||||||
system Proszę potwierdzić utworzenie spotkania: Data: Poniedziałek 05.04.2021 16:30-19:00 Miejsce: Kawiarnia JKL Spotkanie z: Jan Nowak Opis: Omówienie strategii biznesowej confirm-domain()
|
|
||||||
user Potwierdzam. confirm()
|
|
||||||
system Spotkanie zostało pomyślnie dodane do kalendarza. affirm(create_meeting)
|
|
||||||
user Czy mam jakieś spotkania w najbliższy piątek? meeting_list(date='najbliższy piątek')
|
|
||||||
system Na piątek zaplanowano następujące spotkania: Data: Poniedziałek 29.03.2021 14:00-15:00 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC inform(meeting_list)
|
|
||||||
user Dziękuję, to wszystko. thankyou() & bye()
|
|
|
@ -1,11 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
user Cześć hello()
|
|
||||||
system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
|
|
||||||
user Czy mam jakieś zaplanowane spotkania? meeting_list()
|
|
||||||
system Najbliższe spotkanie to: Data: Piątek 02.04.2021 19:00 Miejsce: Brak Spotkanie z: Marek Opis: Spotkanie towarzyskie inform(meeting_list)
|
|
||||||
system Kolejne spotkanie to: Data: Środa 31.03.2021 14:00-15:00 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC inform(meeting_list)
|
|
||||||
user Chciałbym usunać drugie spotkanie. cancel_meeting()
|
|
||||||
system Czy jesteś pewien, że chcesz odwołać poniższe spotkanie? Data: Środa 31.03.2021 14:00-15:00 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC confirm-domain()
|
|
||||||
user Tak. Chciałbym je przesunąć na za tydzień negate() & update_meeting() & inform(date='za tydzień')
|
|
||||||
system Czas został zmieniony, czy to wszystkie edycje? affirm(update_meeting)
|
|
||||||
user Tak. Dziękuję za pomoc : ) bye() & thankyou()
|
|
|
@ -1,15 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
user Cześć hello()
|
|
||||||
system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
|
|
||||||
user Proszę o dodanie spotkania biznesowego na dziś wieczór create_meeting(date='dziś')
|
|
||||||
system Proszę podać godzinę i długość spotkania. request(time, duration)
|
|
||||||
user na godzinę 19:00 i długość spotkania nieokreślona inform(time=19:00', duration='null')
|
|
||||||
system Czy mam zapisać miejsce spotkania? request(place)
|
|
||||||
user Tak, Cytadela Poznań inform(place='Cytadela Poznań')
|
|
||||||
system Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie? request(participant)
|
|
||||||
user tak osoba XXX YYY inform(participant='XXX YYY')
|
|
||||||
system Czy mam dodać opis do spotkania? request(description)
|
|
||||||
user Nie, to wszystko. Proszę podać podsumowanie negate()
|
|
||||||
system Proszę potwierdzić utworzenie spotkania: Data: Wtorek 30.03.2021 19:00- Miejsce: Cytadela Poznań Spotkanie z: XXX YYY confirm-domain()
|
|
||||||
user Tak wszystko się zgadza. Dziękuję za rozmowę confirm() & thankyou()
|
|
||||||
system Spotkanie zostało pomyślnie dodane do kalendarza. inform(create_meeting)
|
|
|
@ -1,8 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
system Witam w prywatnym asystencie kalendarza spotkań. W czym mogę pomóc? welcomemsg()
|
|
||||||
user proszę o wyświetlenie jutrzejszego kalendarza meeting_list(date='jutrzejszego')
|
|
||||||
system Jutrzejsze spotkania: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC --- Data: Wtorek 30.03.2021 18:00-19:30 Miejsce: Firma ABC Spotkanie z: Janusz Kowalski inform(meeting_list)
|
|
||||||
user Dodaj pozycję jutro na 16-17.30: Lunch z księgową w miejscu: Cafe Teria create_meeting(date='jutro', time='16', meeting_length='90 minut', description='Lunch z księgową', place='Cafe Teria')
|
|
||||||
system Spotkanie zostało dodane: Data: Wtorek 16:00-17:30 Miejsce: Cafe Teria Spotkanie z: księgowa Opis: lunch affirm(create_meeting)
|
|
||||||
user dziękuje to wszystko bye() & thankyou()
|
|
||||||
system Dziękuję. Do widzenia. bye()
|
|
|
@ -1,18 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
system Witam w prywatnym asystencie kalendarza spotkań. W czym mogę pomóc? welcomemsg()
|
|
||||||
user Chciałbym zapisać spotkanie create_meeting()
|
|
||||||
system Proszę podać dzień, na jaki mam umówić spotkanie. request(date)
|
|
||||||
user 08.04.2021 inform(date='08.04.2021')
|
|
||||||
system Proszę o podanie godziny i czasu trwania spotkania. request(time) & request(meeting_length)
|
|
||||||
user 17:00 - 19:00 inform(time='17:00', meeting_length='2 godziny')
|
|
||||||
system Jakie będzie miejsce tego spotkania? request(place)
|
|
||||||
user Kawiarnia MCafe przy ulicy Grunwaldzkiej inform(place='Kawiarnia MCafe przy ulicy Grunwaldzkiej')
|
|
||||||
system Z jaką osobą będzie to spotkanie? request(participant)
|
|
||||||
user Sylwia Kowalska inform(participant='Sylwia Kowalska')
|
|
||||||
system Czy mam dodać opis do spotkania? request(description)
|
|
||||||
user tak confirm()
|
|
||||||
system Jaki ma być opis spotkania? request(description)
|
|
||||||
user Intensywne rozmowy o przyrodzie przy Yerbie inform(description='Intensywne rozmowy o przyrodzie przy Yerbie')
|
|
||||||
system Spotkanie zostało dodane: Data: Czwartek 08.04.2021 17:00-19:00 Miejsce: Kawiarnia MCafe przy ulicy Grunwaldzkiej Z: Sylwia Kowalska Opis: Intensywne rozmowy o przyrodzie przy Yerbie affirm()
|
|
||||||
user Ok, koniec zapisu bye()
|
|
||||||
system Do widzenia. Życzę miłego dnia. bye()
|
|
|
@ -1,19 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
system Witam w prywatnym asystencie kalendarza spotkań. W czym mogę pomóc? welcomemsg()
|
|
||||||
user Chciałbym sprawdzić moje spotkania w piątek meeting_list(date='piątek')
|
|
||||||
system Na piątek 02.04.2021 nie masz zaplanywanych żadnych spotkań. inform(meeting_list)
|
|
||||||
user proszę wpisać na 02.04.2021 o godzinie 19:00: Wyjście do kina ze znajomą create_meeting(date='02.04.2021', time='19:00', description='Wyjście do kina ze znajomą')
|
|
||||||
system Ile będzie trwało to spotkanie? request(meeting_length)
|
|
||||||
user 2 godziny inform(meeting_length='2 godziny')
|
|
||||||
system Spotkanie zostało dodane: Data: Piątek 02.04.2021 19:00-21:00 Miejsce: kino Z: znajoma Opis: wyjście do kina affirm(create_meeting)
|
|
||||||
user Pomyliłem się podczas podawania godziny. Chciałbym przełożyć to spotkanie na 20:00 do 22:00 update_meeting(time='20:00', meeting_length='2 godziny')
|
|
||||||
system Spotkanie zostało zmienione: Data: Piątek 02.04.2021 20:00-22:00 Miejsce: kino Z: znajoma Opis: wyjście do kina affirm(update_meeting)
|
|
||||||
user Dziękuję thankyou()
|
|
||||||
system Czy mogę jeszcze Ci w czymś pomóc? reqmore()
|
|
||||||
user ile będę miał dni bez zaplanowanych spotkań w przyszłym miesiącu free_days_count(time='przyszły miesiąc')
|
|
||||||
system Dni bez zaplanowanych spotkań w przyszłym miesiącu: 29 welcomemsg()
|
|
||||||
user Dziękuję za informację thankyou()
|
|
||||||
system Czy mogę jeszcze w czymś pomóc? reqmore()
|
|
||||||
user To wszystko. Dziękuję bye() & thankyou()
|
|
||||||
system Do widzenia, życzę miłego dnia. bye()
|
|
||||||
|
|
Can't render this file because it has a wrong number of fields in line 19.
|
@ -1,17 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
system Witam w prywatnym asystencie kalendarza spotkań. W czym mogę pomóc? welcomemsg()
|
|
||||||
user Jakie mam nadchodzące wydarzenia w tym tygodniu? meeting_list(date='tym tygodniu')
|
|
||||||
system Wydarzenia w tym tygodniu: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC --- Data: Czwartek 01.04.2021 12:00-15:30 Miejsce: Firma ABC Spotkanie z: Jan Nowak - Prezes firmy ABC inform(meeting_list)
|
|
||||||
user Chciałabym przesunąć spotkanie z Jan Nowak na najbliższy wtorek update_meeting(participant='Jan Nowak', date='najbliższy wtorek')
|
|
||||||
system Na którą godzinę? request(time)
|
|
||||||
user Jakie mam godziny dostępne w najblizszy wtorek? free_time(date='najbliższy wtorek')
|
|
||||||
system Dostępne godziny w najbliższy wtorek: 00:00-10:00 12:00-14:00 15:30-24:00 inform(free_time)
|
|
||||||
user na godzinę 9:30 inform(time='9:30')
|
|
||||||
system Które spotkanie z Jan Nowak chcesz przesunąć? Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC --- Data: Czwartek 01.04.2021 12:00-15:30 Miejsce: Firma ABC Spotkanie z: Jan Nowak - Prezes firmy ABC inform(meeting_list) & request(meeting)
|
|
||||||
user drugie inform(meeting='drugie')
|
|
||||||
system Spotkanie zostało zmienione: Data: Wtorek 30.03.2021 09:00-12:30 Miejsce: Firma ABC Spotkanie z: Jan Nowak - Prezes firmy ABC affirm(update_meeting)
|
|
||||||
system Czy mogę jeszcze Ci w czymś pomóc? reqmore()
|
|
||||||
user Chciałabym wyświetlić swoją listę kontaktów request(contact_list)
|
|
||||||
system Niestety asystent kalendarza spotkań nie obsługuje obecnie listy kontaktów. Weźmiemy pod uwagę twoje uwagi przy dalszym jego rozwoju. canthelp()
|
|
||||||
user W takim razie to wszystko bye()
|
|
||||||
system Dziękuję. Życzę miłego dnia. bye()
|
|
|
@ -1,28 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
system Witam w prywatnym asystencie kalendarza spotkań. W czym mogę pomóc? welcomemsg()
|
|
||||||
user Jakie mam spotkania 31 marca? meeting_list(date='31 marca')
|
|
||||||
system Nie masz żadnych spotkań 31 marca. Czy chciałbyś umówić spotkanie na ten dzień? inform(meeting_list)
|
|
||||||
user Nie. A jakie spotkania mam jutro? meeting_list(date='jutro')
|
|
||||||
system Na jutro masz zaplanowane następujące spotkania: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC inform(meeting_list)
|
|
||||||
user Chciałbym odwołać to spotkanie cancel_meeting()
|
|
||||||
system Czy jesteś pewien, że chcesz odwołać to spotkanie? confirm-domain()
|
|
||||||
user Tak confirm()
|
|
||||||
system Spotkanie zostało odwołane. Czy mogę w czymś jeszcze pomóc? affirm(cancel_meeting) & reqmore()
|
|
||||||
user Chciałbym zaplanować nowe spotkanie na miejsce tego odwołanego create_meeting()
|
|
||||||
system Gdzie będzie to spotkanie? request(place)
|
|
||||||
user bez miejsca negate()
|
|
||||||
system Z kim będzie to spotkanie? request(participant)
|
|
||||||
user Jan Kowalski inform(participant='Jan Kowalski')
|
|
||||||
system Spotkanie zostało dodane do kalendarza: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: brak Z: Jan Kowalski affirm(create_meeting)
|
|
||||||
user Chciałbym jeszcze dodać nową osobę do tego spotkania update_meeting()
|
|
||||||
system Kogo dodać do tego spotkania? request(participant)
|
|
||||||
user Jan Nowak inform(participant='Jan Nowak')
|
|
||||||
system Uczestnik spotkania został dodany: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: brak Z: Jan Kowalski i Jan Nowak affirm(update_meeting)
|
|
||||||
user A jakie mam wolne terminy jutro? free_time(date='jutro')
|
|
||||||
system Dostępne terminy jutro: 00:00-10:00 12:00-14:00 15:30-24:00 inform(free_time)
|
|
||||||
user Kiedy mam spotkanie z Janem Nowakiem? meeting_list(participant='Jan Nowak')
|
|
||||||
system Spotkania z Janem Nowakiem: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: brak Z: Jan Kowalski i Jan Nowak inform(meeting_list)
|
|
||||||
user Chciałbym usunąć Jana Kowalskiego z tego spotkania update_meeting(participant='Jan Kowalski')
|
|
||||||
system Jan Kowalski został usunięty ze spotkania: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: brak Z: Jan Nowak affirm(update_meeting)
|
|
||||||
user To by było wszystko na teraz bye()
|
|
||||||
system Do widzenia. Życzę miłego dnia. bye()
|
|
|
@ -1,14 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
system Witam w prywatnym asystencie kalendarza spotkań. W czym mogę pomóc? welcomemsg()
|
|
||||||
user Chciałbym przesunąć spotkanie update_meeting()
|
|
||||||
system Jakie spotkanie chcesz przesunąć? request(meeting)
|
|
||||||
user Dzisiejsze o godzinie 20:00 inform(date='Dzisiejsze', time='20:00')
|
|
||||||
system Na kiedy chcesz przesunąć to spotkanie? Data: Poniedziałek 29.03.2021 20:00-20:30 Miejsce: Firma ABC Spotkanie z: Jan Nowak - Prezes firmy ABC request(time)
|
|
||||||
user na środę o godzinie 19:00, proszę też zmienić miejsce na Restauracja ABC update_meeting(time='19:00', place='Restauracja ABC')
|
|
||||||
system Spotkanie zostało zmienione: Data: Środa 31.03.2021 19:00-20:30 Miejsce: Restauracja ABC Spotkanie z: Jan Nowak - Prezes firmy ABC affirm(update_meeting)
|
|
||||||
user proszę też zmienić czas trwania na 1 godzinę update_meeting()
|
|
||||||
system Spotkanie zostało zmienione: Data: Środa 31.03.2021 19:00-20:00 Miejsce: Restauracja ABC Spotkanie z: Jan Nowak - Prezes firmy ABC affirm(update_meeting)
|
|
||||||
user Dziękuje thankyou()
|
|
||||||
system Czy mogę jeszcze w czymś pomóc? reqmore()
|
|
||||||
user To wszystko bye()
|
|
||||||
system Do widzenia. Życzę miłego dnia. bye()
|
|
|
@ -1,12 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
system Witam w prywatnym asystencie kalendarza spotkań. W czym mogę pomóc? welcomemsg()
|
|
||||||
user Proszę o rozpiskę spotkań w tym tygodniu. meeting_list(date='tym tygodniu')
|
|
||||||
system Spotkania w tym tygodniu: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC --- Data: Czwartek 01.04.2021 12:00-15:30 Miejsce: Firma ABC Spotkanie z: Jan Nowak - Prezes firmy ABC --- Data: Piątek 02.04.2021 19:00-20:00 Miejsce: Restauracja ABC Spotkanie z: Janusz Kowalski - Prezes firmy XYZ inform(meeting_list)
|
|
||||||
user Chciałabym odwołać spotkanie cancel_meeting()
|
|
||||||
system Jakie spotkanie chcesz odwołać? request(meeting)
|
|
||||||
user Spotkanie z Januszem Kowalskim. inform(participant='Januszem Kowalskim')
|
|
||||||
system Czy na pewno odwołać spotkanie? Data: Piątek 02.04.2021 19:00-20:00 Miejsce: Restauracja ABC Spotkanie z: Janusz Kowalski - Prezes firmy XYZ confirm-domain()
|
|
||||||
user Tak confirm()
|
|
||||||
system Spotkanie zostało odwołane. Czy mogę jeszcze Ci w czymś pomóc? affirm(cancel_meeting) & reqmore()
|
|
||||||
user Nie, dziękuję. negate() & thankyou()
|
|
||||||
system Dziękuję. Do widzenia. bye()
|
|
|
@ -1,13 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
system Witam w prywatnym asystencie kalendarza spotkań. W czym mogę pomóc? welcomemsg()
|
|
||||||
user Jakie wolne terminy mam w najbliższym tygodniu? free_time(date='najbliższym tygodniu')
|
|
||||||
system Wolne terminy w nadchodzącym tygodniu: 30.03.2021 00:00-24:00 31.03.2021 00:00-24:00 01.04.2021 00:00-24:00 02.04.2021 00:00-08:00 10:00-12:00 16:00-24:00 03.04.2021 00:00-24:00 04.04.2021 00:00-10:00 14:00-24:00 05.04.2021 00:00-24:00 inform(free_time)
|
|
||||||
user Ooo, ale ja się obijam. Nie mam ustalonych żadnych spotkań! null()
|
|
||||||
user zapisz mi proszę spotkanie z 3 marca od 17-19, mam wizytę u lekarza create_meeting(date='3 marca', time='17', description='wizytę u lekarza')
|
|
||||||
system W jakim miejscu odbędzie się to spotkanie? request(place)
|
|
||||||
user w przychodni przy ulicy dialogowej inform(place='przychodni przy ulicy dialogowej')
|
|
||||||
user Czy możesz dodać notatkę, żebym pamiętała o poprzednich wynikach? request(create_note)
|
|
||||||
system Spotkanie zostało dodane: Data: Sobota 03.03.2022 17:00-19:00 Miejsce: Przychodnia przy ulicy dialogowej Spotkanie z: brak Opis: wizyta u lekarza affirm(create_meeting)
|
|
||||||
system Niestety asystent kalendarza spotkań nie obsługuje obecnie dodawania notatek. Weźmiemy pod uwagę twoje uwagi przy dalszym jego rozwoju. canthelp()
|
|
||||||
user Dobrze. dziękuję. To wszystko thankyou() & bye()
|
|
||||||
system Miłego dnia. Do widzenia. bye()
|
|
|
@ -1,11 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
|
|
||||||
user Proszę stworzyć w moim kalendarzu spotkanie online 24.04.2021 o godzinie 17.00. create_meeting(date='24.04.2021', time='17:00')
|
|
||||||
system Czy chcesz dodać uczestników spotkania? request(participant)
|
|
||||||
user Tak, proszę zaprosić Jan Nowak, Grażyna Kowalska i Hubert Noga. confirm() & inform(participant='Jan Nowak',participant='Grażyna Kowalska',participant='Hubert Noga')
|
|
||||||
system Proszę potwierdzić utworzenie spotkania: Data: Sobota 24.04.2021 17:00 Miejsce: spotkanie online Spotkanie z: Jan Nowak, Grażyna Kowalska, Hubert Noga confirm-domain()
|
|
||||||
user Proszę dodać opis "Omówienie projektu XYZ" oraz dodać powiadomienie 30 min przed spotkaniem. inform(description='Omówienie projektu XYZ')
|
|
||||||
system Proszę potwierdzić utworzenie spotkania: Data: Sobota 24.04.2021 17:00 Miejsce: spotkanie online Spotkanie z: Jan Nowak, Grażyna Kowalska, Hubert Noga Opis: Omówienie projektu XYZ Przypomnienie: 30 min confirm-domain()
|
|
||||||
user Tak, potwierdzam, dziękuję. confirm() & thankyou()
|
|
||||||
system Spotkanie zostało dodane do kalendarza. Czy mogę pomóc w czymś jeszcze? affirm(create_meeting) && reqmore()
|
|
||||||
user Nie, dziękuję. To wszystko. thankyou() & bye()
|
|
Can't render this file because it contains an unexpected character in line 7 and column 26.
|
@ -1,15 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
user Dzień dobry hello()
|
|
||||||
system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
|
|
||||||
user Chcialbym sprawdzic czy mam jakies spotkania w najblizszym tygodniu meeting_list(date='najblizszym tygodniu')
|
|
||||||
system Data: Wtorek 30.03.2021 19:00-20:30 Miejsce: Restauracja ABC Spotkanie z: Jan Kowalski --- Data: Środa 31.03.2021 12:00-15:30 Miejsce: Firma ABC Spotkanie z: Adam Nowak inform(meeting_list)
|
|
||||||
user Chciałbym odwołać spotkanie i wjego miejsce wpisać nowe cancel_meeting() & create_meeting()
|
|
||||||
system Jakie spotkanie chcesz odwołać? request(meeting)
|
|
||||||
user Spotkanie z Adam Nowak inform(participant='Adam Nowak')
|
|
||||||
system Spotkanie zostało odwołane. Proszę podać szczegóły nowego spotkania. affirm(cancel_meeting) & request(meeting)
|
|
||||||
user Spotkanie z Jan Kowalski inform(participant='Jan Kowalski')
|
|
||||||
user Restauracja xyz inform(place='Restauracja xyz')
|
|
||||||
system Proszę potwierdzić utworzenie spotkania: Data: Środa 31.03.2021 12:00-15:30 Miejsce: Restauracja xyz Spotkanie z: Jan Kowalski confirm-domain()
|
|
||||||
user Potwierdzam confirm()
|
|
||||||
system Spotkanie zostało dodane do kalendarza. Czy mogę pomóc w czymś jeszcze? affirm(create_meeting) & reqmore()
|
|
||||||
user To wszystko, dziękuję bye() & thankyou()
|
|
|
@ -1,22 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
user Dzień dobry, chciałbym sprawdzić dzisiejsze spotkania hello() & meeting_list(date='dzisiaj')
|
|
||||||
system Data: Wtorek 30.03.2021 12:00-15:30 Miejsce: Restauracja ABC Spotkanie z: Jan Kowalski --- Data: Wtorek 30.03.2021 19:00-20:30 Miejsce: Firma ABC Spotkanie z: Adam Nowak inform(meeting_list)
|
|
||||||
user Chciałbym przełożyć spotkanie z 12:00 update_meeting(date='dzisiaj', time=12:00)
|
|
||||||
system Na jaki dzień chciałbyś przełożyć to spotkanie? request(date)
|
|
||||||
user Na środę na 13:00 inform(date='środa', time='13:00')
|
|
||||||
system Proszę potwierdzić zmianę spotkania: Data: Środa 31.03.2021 13:00-16:30 Miejsce: Restauracja ABC Spotkanie z: Jan Kowalski confirm-domain()
|
|
||||||
user Potwierdzam. confirm()
|
|
||||||
system Spotkanie zostało zmienione. Czy mogę pomóc w czymś jeszcze? affirm(update_meeting) && reqmore()
|
|
||||||
user Tak, chciałbym umówić nowe spotkanie create_meeting()
|
|
||||||
system Na jaki dzień chciałbyś umówić nowe spotkanie? request(date)
|
|
||||||
user Na wtorek inform(date='wtorek')
|
|
||||||
system Proszę podać godzinę spotkania. request(time)
|
|
||||||
user 12:45 inform(time='12:45')
|
|
||||||
system Czy chcesz podać miejsce spotkania? request(place)
|
|
||||||
user tak, gabinet dentystyczny SuperDent inform(place='gabinet dentystyczny SuperDent')
|
|
||||||
system Czy chciałbyś dodać uczestników spotkania? request(participant)
|
|
||||||
user tak, doktor Krzysztof Ząb inform(participant='Krzysztof Ząb')
|
|
||||||
system Proszę potwierdzić utworzenie spotkania: Data: Wtorek 30.03.2021 12:45-13:45 Miejsce: gabinet dentystyczny SuperDent Spotkanie z: doktor Krzysztof Ząb confirm-domain()
|
|
||||||
user Zatwierdzam confirm()
|
|
||||||
system Spotkanie zostało dodane do kalendarza. Czy mogę pomóc w czymś jeszcze? affirm(create_meeting) && reqmore()
|
|
||||||
user To będzie wszystko bye()
|
|
|
@ -1,13 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
user Cześć hello()
|
|
||||||
system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
|
|
||||||
user Proszę dodać spotkanie na dziś na godzinę 9 w parku Cytadela create_meeting(date='dziś',time='9',place='park Cytadela')
|
|
||||||
system Czy chcesz podać czas trwania spotkania? request(duration)
|
|
||||||
user Nie, proszę dopisać opis: Opis ..... negate() & inform(description='Opis')
|
|
||||||
system Czy chcesz dodać z kim ma być spotkanie? request(participant)
|
|
||||||
user Nie negate()
|
|
||||||
system Proszę potwierdzić utworzenie spotkania: Data: Wtorek 30.03.2021 09:00 Miejsce: Cytadela Opis: Opis ..... confirm-domain()
|
|
||||||
user Tak confirm()
|
|
||||||
user zgadza się confirm()
|
|
||||||
system Spotkanie zostało dodane do kalendarza. Czy mogę pomóc w czymś jeszcze? affirm(create_meeting) && reqmore()
|
|
||||||
user Nie, dziękuję za rozmowę bye() & thankyou()
|
|
|
@ -1,10 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
user Witam. hello()
|
|
||||||
system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
|
|
||||||
user Czy mam obecnie jakieś zaplanowane spotkania? meeting_list()
|
|
||||||
system Data: Wtorek 30.03.2021 19:00-20:30 Miejsce: Restauracja ABC Spotkanie z: Jan Kowalski --- Data: Środa 31.03.2021 12:00-15:30 Miejsce: Firma ABC Spotkanie z: Adam Nowak inform(meeting_list)
|
|
||||||
user Chciałbym przesunąć pierwsze spotkanie na za tydzień. update_meeting()
|
|
||||||
system Proszę potwierdzić zmianę spotkania:\nData: Wtorek 06.04.2021 19:00-20:30\nMiejsce: Restauracja ABC\nSpotkanie z: Jan Kowalski confirm-domain()
|
|
||||||
user Potwierdzam confirm()
|
|
||||||
system Spotkanie zostało zmienione. Czy mogę pomóc w czymś jeszcze? affirm(update_meeting) && reqmore()
|
|
||||||
user Nie, dziękuję za pomoc - to wszystko : ). bye() & thankyou()
|
|
|
@ -1,13 +0,0 @@
|
|||||||
Interlocutor Text Acts
|
|
||||||
system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
|
|
||||||
user Jakie spotkania mam zaplanowane w najbliższy czwartek? meeting_list(date='najbliższy czwartek')
|
|
||||||
system Brak zaplanowanych spotkań na dzień 01.04.2021 inform(meeting_list)
|
|
||||||
user To chciałbym zaplanować spotkanie tego dnia o godzinie 17. create_meeting(date='tego dnia', time='17')
|
|
||||||
system Czy mam zapisać miejsce spotkania? request(place)
|
|
||||||
user Tak, Centrum Handlowe ABC inform(place='Centrum Handlowe ABC')
|
|
||||||
system Czy mam z zapisać z kim ma być spotkanie? request(participant)
|
|
||||||
user Tak, spotkanie będzie z Januszem Kowalskim inform(participant='Januszem Kowalskim')
|
|
||||||
system Proszę potwierdzić utworzenie spotkania: Data: Czwartek 01.01.2021 17:00-18:00 Miejsce: Centrum Handlowe ABC Spotkanie z: Janusz Kowalski confirm-domain()
|
|
||||||
user Potwierdzam confirm()
|
|
||||||
system Spotkanie zostało dodane do kalendarza. Czy mogę pomóc w czymś jeszcze? affirm(create_meeting) && reqmore()
|
|
||||||
user Dziękuję, to wszystko. bye() & thankyou()
|
|
|
@ -1,931 +0,0 @@
|
|||||||
# text: dzień dobry
|
|
||||||
# intent: hello
|
|
||||||
# slots:
|
|
||||||
1 dzień hello NoLabel
|
|
||||||
2 dobry hello NoLabel
|
|
||||||
|
|
||||||
# text: dobry wieczór
|
|
||||||
# intent: hello
|
|
||||||
# slots:
|
|
||||||
1 dobry hello NoLabel
|
|
||||||
2 wieczór hello NoLabel
|
|
||||||
|
|
||||||
# text: witam
|
|
||||||
# intent: hello
|
|
||||||
# slots:
|
|
||||||
1 witam hello NoLabel
|
|
||||||
|
|
||||||
# text: siema
|
|
||||||
# intent: hello
|
|
||||||
# slots:
|
|
||||||
1 siema hello NoLabel
|
|
||||||
|
|
||||||
# text: cześć
|
|
||||||
# intent: hello
|
|
||||||
# slots:
|
|
||||||
1 cześć hello NoLabel
|
|
||||||
|
|
||||||
# text: cześć elo
|
|
||||||
# intent: hello
|
|
||||||
# slots:
|
|
||||||
1 cześć hello NoLabel
|
|
||||||
2 elo hello NoLabel
|
|
||||||
|
|
||||||
# text: do widzenia
|
|
||||||
# intent: bye
|
|
||||||
# slots:
|
|
||||||
1 do bye NoLabel
|
|
||||||
2 widzenia bye NoLabel
|
|
||||||
|
|
||||||
# text: miłego dnia
|
|
||||||
# intent: bye
|
|
||||||
# slots:
|
|
||||||
1 miłego bye NoLabel
|
|
||||||
2 dnia bye NoLabel
|
|
||||||
|
|
||||||
# text: to będzie wszystko
|
|
||||||
# intent: bye
|
|
||||||
# slots:
|
|
||||||
1 to bye NoLabel
|
|
||||||
2 będzie bye NoLabel
|
|
||||||
3 wszystko bye NoLabel
|
|
||||||
|
|
||||||
# text: koniec zapisu
|
|
||||||
# intent: bye
|
|
||||||
# slots:
|
|
||||||
1 koniec bye NoLabel
|
|
||||||
2 zapisu bye NoLabel
|
|
||||||
|
|
||||||
# text: w takim razie to wszystko
|
|
||||||
# intent: bye
|
|
||||||
# slots:
|
|
||||||
1 w bye NoLabel
|
|
||||||
2 takim bye NoLabel
|
|
||||||
3 razie bye NoLabel
|
|
||||||
4 to bye NoLabel
|
|
||||||
5 wszystko bye NoLabel
|
|
||||||
|
|
||||||
# text: potwierdzam
|
|
||||||
# intent: confirm
|
|
||||||
# slots:
|
|
||||||
1 potwierdzam confirm NoLabel
|
|
||||||
|
|
||||||
# text: ok może być
|
|
||||||
# intent: confirm
|
|
||||||
# slots:
|
|
||||||
1 ok confirm NoLabel
|
|
||||||
2 może confirm NoLabel
|
|
||||||
3 być confirm NoLabel
|
|
||||||
|
|
||||||
# text: akceptuję
|
|
||||||
# intent: confirm
|
|
||||||
# slots:
|
|
||||||
1 akceptuję confirm NoLabel
|
|
||||||
|
|
||||||
# text: tak
|
|
||||||
# intent: confirm
|
|
||||||
# slots:
|
|
||||||
1 tak confirm NoLabel
|
|
||||||
|
|
||||||
# text: zgadza się
|
|
||||||
# intent: confirm
|
|
||||||
# slots:
|
|
||||||
1 zgadza confirm NoLabel
|
|
||||||
2 się confirm NoLabel
|
|
||||||
|
|
||||||
# text: zatwierdzam
|
|
||||||
# intent: confirm
|
|
||||||
# slots:
|
|
||||||
1 zgadza confirm NoLabel
|
|
||||||
2 się confirm NoLabel
|
|
||||||
|
|
||||||
# text: nie
|
|
||||||
# intent: negate
|
|
||||||
# slots:
|
|
||||||
1 nie negate NoLabel
|
|
||||||
|
|
||||||
# text: nie usuwaj tego spotkania
|
|
||||||
# intent: negate
|
|
||||||
# slots:
|
|
||||||
1 nie negate NoLabel
|
|
||||||
2 usuwaj negate NoLabel
|
|
||||||
3 tego negate NoLabel
|
|
||||||
4 spotkania negate NoLabel
|
|
||||||
|
|
||||||
# text: jednak nie zmieniaj tego spotkania
|
|
||||||
# intent: negate
|
|
||||||
# slots:
|
|
||||||
1 jednak negate NoLabel
|
|
||||||
2 nie negate NoLabel
|
|
||||||
3 zmieniaj negate NoLabel
|
|
||||||
4 tego negate NoLabel
|
|
||||||
5 spotkania negate NoLabel
|
|
||||||
|
|
||||||
# text: bez
|
|
||||||
# intent: negate
|
|
||||||
# slots:
|
|
||||||
1 bez negate NoLabel
|
|
||||||
|
|
||||||
# text: zaprzeczam
|
|
||||||
# intent: negate
|
|
||||||
# slots:
|
|
||||||
1 zaprzeczam negate NoLabel
|
|
||||||
|
|
||||||
# text: bardzo dziękuję
|
|
||||||
# intent: thankyou
|
|
||||||
# slots:
|
|
||||||
1 bardzo thankyou NoLabel
|
|
||||||
2 dziękuję thankyou NoLabel
|
|
||||||
|
|
||||||
# text: dziękuję
|
|
||||||
# intent: thankyou
|
|
||||||
# slots:
|
|
||||||
1 dziękuję thankyou NoLabel
|
|
||||||
|
|
||||||
# text: dziękuję za informację
|
|
||||||
# intent: thankyou
|
|
||||||
# slots:
|
|
||||||
1 dziękuję thankyou NoLabel
|
|
||||||
|
|
||||||
# text: 05.04.2021
|
|
||||||
# intent: inform/date
|
|
||||||
# slots:
|
|
||||||
1 05.04.2021 inform/date B-date
|
|
||||||
|
|
||||||
# text: 01.11.2023
|
|
||||||
# intent: inform/date
|
|
||||||
# slots:
|
|
||||||
1 01.11.2023 inform/date B-date
|
|
||||||
|
|
||||||
# text: 11 grudnia
|
|
||||||
# intent: inform/date
|
|
||||||
# slots:
|
|
||||||
1 11 inform/date B-date
|
|
||||||
2 grudnia inform/date I-date
|
|
||||||
|
|
||||||
# text: 28 lutego
|
|
||||||
# intent: inform/date
|
|
||||||
# slots:
|
|
||||||
1 28 inform/date B-date
|
|
||||||
2 lutego inform/date I-date
|
|
||||||
|
|
||||||
# text: 25 września 2022
|
|
||||||
# intent: inform/date
|
|
||||||
# slots:
|
|
||||||
1 25 inform/date B-date
|
|
||||||
2 września inform/date I-date
|
|
||||||
3 2022 inform/date I-date
|
|
||||||
|
|
||||||
# text: spotkanie odbędzie się 3 maja
|
|
||||||
# intent: inform/date
|
|
||||||
# slots:
|
|
||||||
1 spotkanie inform/date NoLabel
|
|
||||||
2 odbędzie inform/date NoLabel
|
|
||||||
3 się inform/date NoLabel
|
|
||||||
4 3 inform/date B-date
|
|
||||||
5 maja inform/date I-date
|
|
||||||
|
|
||||||
# text: spotkanie odbędzie się 4 marca 2023
|
|
||||||
# intent: inform/date
|
|
||||||
# slots:
|
|
||||||
1 spotkanie inform/date NoLabel
|
|
||||||
2 odbędzie inform/date NoLabel
|
|
||||||
3 się inform/date NoLabel
|
|
||||||
4 4 inform/date B-date
|
|
||||||
5 marca inform/date I-date
|
|
||||||
6 2023 inform/date I-date
|
|
||||||
|
|
||||||
# text: spotkanie w piątek
|
|
||||||
# intent: inform/date
|
|
||||||
# slots:
|
|
||||||
1 spotkanie inform/date NoLabel
|
|
||||||
2 w inform/date NoLabel
|
|
||||||
3 piątek inform/date B-date
|
|
||||||
|
|
||||||
# text: pierwszy kwietnia
|
|
||||||
# intent: inform/date
|
|
||||||
# slots:
|
|
||||||
1 pierwszy inform/date B-date
|
|
||||||
2 kwietnia inform/date I-date
|
|
||||||
|
|
||||||
# text: jutro
|
|
||||||
# intent: inform/date
|
|
||||||
# slots:
|
|
||||||
1 jutro inform/date B-date
|
|
||||||
|
|
||||||
# text: pojutrze
|
|
||||||
# intent: inform/date
|
|
||||||
# slots:
|
|
||||||
1 pojutrze inform/date B-date
|
|
||||||
|
|
||||||
# text: czwartek
|
|
||||||
# intent: inform/date
|
|
||||||
# slots:
|
|
||||||
1 czwartek inform/date B-date
|
|
||||||
|
|
||||||
# text: wtorek
|
|
||||||
# intent: inform/date
|
|
||||||
# slots:
|
|
||||||
1 wtorek inform/date B-date
|
|
||||||
|
|
||||||
# text: data to 11.11.2011
|
|
||||||
# intent: inform/date
|
|
||||||
# slots:
|
|
||||||
1 data inform/date NoLabel
|
|
||||||
2 to inform/date NoLabel
|
|
||||||
3 11.11.2011 inform/date B-date
|
|
||||||
|
|
||||||
# text: spotkanie odbędzie się pojutrze
|
|
||||||
# intent: inform/date
|
|
||||||
# slots:
|
|
||||||
1 spotkanie inform/date NoLabel
|
|
||||||
2 odbędzie inform/date NoLabel
|
|
||||||
3 się inform/date NoLabel
|
|
||||||
4 pojutrze inform/date B-date
|
|
||||||
|
|
||||||
# text: spotkanie będzie w środę
|
|
||||||
# intent: inform/date
|
|
||||||
# slots:
|
|
||||||
1 spotkanie inform/date NoLabel
|
|
||||||
2 będzie inform/date NoLabel
|
|
||||||
3 w inform/date NoLabel
|
|
||||||
4 środę inform/date B-date
|
|
||||||
|
|
||||||
# text: ustaw datę tego spotkania na najbliższy poniedziałek
|
|
||||||
# intent: inform/date
|
|
||||||
# slots:
|
|
||||||
1 ustaw inform/date NoLabel
|
|
||||||
2 datę inform/date NoLabel
|
|
||||||
3 tego inform/date NoLabel
|
|
||||||
4 spotkania inform/date NoLabel
|
|
||||||
5 na inform/date NoLabel
|
|
||||||
6 najbliższy inform/date B-date
|
|
||||||
7 poniedziałek inform/date I-date
|
|
||||||
|
|
||||||
# text: spotkanie będzie o godzinie 19:30
|
|
||||||
# intent: inform/time
|
|
||||||
# slots:
|
|
||||||
1 spotkanie inform/time NoLabel
|
|
||||||
2 będzie inform/time NoLabel
|
|
||||||
3 o inform/time NoLabel
|
|
||||||
4 godzinie inform/time NoLabel
|
|
||||||
5 19:30 inform/time B-time
|
|
||||||
|
|
||||||
# text: spotkanie zacznie się o godzinie 21
|
|
||||||
# intent: inform/time
|
|
||||||
# slots:
|
|
||||||
1 spotkanie inform/time NoLabel
|
|
||||||
2 zacznie inform/time NoLabel
|
|
||||||
3 się inform/time NoLabel
|
|
||||||
4 o inform/time NoLabel
|
|
||||||
5 godzinie inform/time NoLabel
|
|
||||||
6 21 inform/time B-time
|
|
||||||
|
|
||||||
# text: spotkanie będzie o 11
|
|
||||||
# intent: inform/time
|
|
||||||
# slots:
|
|
||||||
1 spotkanie inform/time NoLabel
|
|
||||||
2 będzie inform/time NoLabel
|
|
||||||
3 o inform/time NoLabel
|
|
||||||
4 11 inform/time B-time
|
|
||||||
|
|
||||||
# text: 12:30
|
|
||||||
# intent: inform/time
|
|
||||||
# slots:
|
|
||||||
1 12:30 inform/time B-time
|
|
||||||
|
|
||||||
# text: godzina 18:30
|
|
||||||
# intent: inform/time
|
|
||||||
# slots:
|
|
||||||
1 godzina inform/time NoLabel
|
|
||||||
2 18:30 inform/time B-time
|
|
||||||
|
|
||||||
# text: spotkanie rozpocznie się o 12:00
|
|
||||||
# intent: inform/time
|
|
||||||
# slots:
|
|
||||||
1 spotkanie inform/time NoLabel
|
|
||||||
2 rozpocznie inform/time NoLabel
|
|
||||||
3 się inform/time NoLabel
|
|
||||||
4 o inform/time NoLabel
|
|
||||||
5 12:00 inform/time B-time
|
|
||||||
|
|
||||||
# text: godzina tego spotkania to 7:00
|
|
||||||
# intent: inform/time
|
|
||||||
# slots:
|
|
||||||
1 godzina inform/time NoLabel
|
|
||||||
2 tego inform/time NoLabel
|
|
||||||
3 spotkania inform/time NoLabel
|
|
||||||
4 to inform/time NoLabel
|
|
||||||
5 7:00 inform/time B-time
|
|
||||||
|
|
||||||
# text: Restauracja ABC
|
|
||||||
# intent: inform/place
|
|
||||||
# slots:
|
|
||||||
1 Restauracja inform/place B-place
|
|
||||||
2 ABC inform/place I-place
|
|
||||||
|
|
||||||
# text: Kawiarnia MCafe przy ulicy Grunwaldzkiej
|
|
||||||
# intent: inform/place
|
|
||||||
# slots:
|
|
||||||
1 Kawiarnia inform/place B-place
|
|
||||||
2 MCafe inform/place I-place
|
|
||||||
3 przy inform/place I-place
|
|
||||||
4 ulicy inform/place I-place
|
|
||||||
5 Grunwaldzkiej inform/place I-place
|
|
||||||
|
|
||||||
# text: Restauracja w hotelu Anderisa
|
|
||||||
# intent: inform/place
|
|
||||||
# slots:
|
|
||||||
1 Restauracja inform/place B-place
|
|
||||||
2 w inform/place I-place
|
|
||||||
3 hotelu inform/place I-place
|
|
||||||
4 Anderisa inform/place I-place
|
|
||||||
|
|
||||||
# text: Miejsce spotkania to Kawiarnia JKL
|
|
||||||
# intent: inform/place
|
|
||||||
# slots:
|
|
||||||
1 Miejsce inform/place NoLabel
|
|
||||||
2 spotkania inform/place NoLabel
|
|
||||||
3 to inform/place NoLabel
|
|
||||||
4 Kawiarnia inform/place B-place
|
|
||||||
5 JKL inform/place I-place
|
|
||||||
|
|
||||||
# text: Cytadela Poznań
|
|
||||||
# intent: inform/place
|
|
||||||
# slots:
|
|
||||||
1 Cytadela inform/place B-place
|
|
||||||
2 Poznań inform/place I-place
|
|
||||||
|
|
||||||
# text: spotkanie będzie w Jeżyckich Ogrodach
|
|
||||||
# intent: inform/place
|
|
||||||
# slots:
|
|
||||||
1 spotkanie inform/place NoLabel
|
|
||||||
2 będzie inform/place NoLabel
|
|
||||||
3 w inform/place NoLabel
|
|
||||||
4 Jeżyckich inform/place B-place
|
|
||||||
5 Ogrodach inform/place I-place
|
|
||||||
|
|
||||||
# text: gabinet dentystyczny SuperDent
|
|
||||||
# intent: inform/place
|
|
||||||
# slots:
|
|
||||||
1 gabinet inform/place B-place
|
|
||||||
2 dentystyczny inform/place I-place
|
|
||||||
3 SuperDent inform/place I-place
|
|
||||||
|
|
||||||
# text: proszę dodać restaurację Bankcook w Poznaniu jako miejsce spotkania
|
|
||||||
# intent: inform/place
|
|
||||||
# slots:
|
|
||||||
1 proszę inform/place NoLabel
|
|
||||||
2 dodać inform/place NoLabel
|
|
||||||
3 restaurację inform/place B-place
|
|
||||||
4 Bankcook inform/place I-place
|
|
||||||
5 w inform/place I-place
|
|
||||||
6 Poznaniu inform/place I-place
|
|
||||||
7 jako inform/place NoLabel
|
|
||||||
8 miejsce inform/place NoLabel
|
|
||||||
9 spotkania inform/place NoLabel
|
|
||||||
|
|
||||||
# text: w przychodni przy ulicy dialogowej
|
|
||||||
# intent: inform/place
|
|
||||||
# slots:
|
|
||||||
1 w inform/place NoLabel
|
|
||||||
2 przychodni inform/place B-place
|
|
||||||
3 przy inform/place I-place
|
|
||||||
4 ulicy inform/place I-place
|
|
||||||
5 dialogowej inform/place I-place
|
|
||||||
|
|
||||||
# text: Jan Kowalski
|
|
||||||
# intent: inform/participant
|
|
||||||
# slots:
|
|
||||||
1 Jan inform/participant B-participant
|
|
||||||
2 Kowalski inform/participant I-participant
|
|
||||||
|
|
||||||
# text: proszę dodać Jan Nowak do spotkania
|
|
||||||
# intent: inform/participant
|
|
||||||
# slots:
|
|
||||||
1 proszę inform/participant NoLabel
|
|
||||||
2 dodać inform/participant NoLabel
|
|
||||||
3 Jan inform/participant B-participant
|
|
||||||
4 Nowak inform/participant I-participant
|
|
||||||
5 do inform/participant NoLabel
|
|
||||||
6 spotkania inform/participant NoLabel
|
|
||||||
|
|
||||||
# text: Hanna Kowalska
|
|
||||||
# intent: inform/participant
|
|
||||||
# slots:
|
|
||||||
1 Hanna inform/participant B-participant
|
|
||||||
2 Kowalska inform/participant I-participant
|
|
||||||
|
|
||||||
# text: tak doktor Krzysztof Ząb
|
|
||||||
# intent: inform/participant
|
|
||||||
# slots:
|
|
||||||
1 tak inform/participant NoLabel
|
|
||||||
2 doktor inform/participant NoLabel
|
|
||||||
3 Krzysztof inform/participant B-participant
|
|
||||||
4 Ząb inform/participant I-participant
|
|
||||||
|
|
||||||
# text: Spotkanie będzie z Janem Nowakiem
|
|
||||||
# intent: inform/participant
|
|
||||||
# slots:
|
|
||||||
1 Spotkanie inform/participant NoLabel
|
|
||||||
2 będzie inform/participant NoLabel
|
|
||||||
3 z inform/participant NoLabel
|
|
||||||
4 Janem inform/participant B-participant
|
|
||||||
5 Nowakiem inform/participant I-participant
|
|
||||||
|
|
||||||
# text: proszę zaprosić Jan Nowak Grażyna Kowalska i Hubert Noga
|
|
||||||
# intent: inform/participant
|
|
||||||
# slots:
|
|
||||||
1 proszę inform/participant NoLabel
|
|
||||||
2 zaprosić inform/participant NoLabel
|
|
||||||
3 Jan inform/participant B-participant
|
|
||||||
4 Nowak inform/participant I-participant
|
|
||||||
5 Grażyna inform/participant B-participant
|
|
||||||
6 Kowalska inform/participant I-participant
|
|
||||||
7 i inform/participant NoLabel
|
|
||||||
8 Hubert inform/participant B-participant
|
|
||||||
9 Noga inform/participant I-participant
|
|
||||||
|
|
||||||
# text: spotkanie będzie z Cezarym Pazurą oraz Janem Fryczem
|
|
||||||
# intent: inform/participant
|
|
||||||
# slots:
|
|
||||||
1 spotkanie inform/participant NoLabel
|
|
||||||
2 będzie inform/participant NoLabel
|
|
||||||
3 z inform/participant B-participant
|
|
||||||
4 Cezarym inform/participant B-participant
|
|
||||||
5 Pazurą inform/participant I-participant
|
|
||||||
6 oraz inform/participant NoLabel
|
|
||||||
7 Janem inform/participant B-participant
|
|
||||||
8 Fryczem inform/participant I-participant
|
|
||||||
|
|
||||||
# text: Marian Paździoch i Ferdynand Kiepski
|
|
||||||
# intent: inform/participant
|
|
||||||
# slots:
|
|
||||||
1 Marian inform/participant B-participant
|
|
||||||
2 Paździoch inform/participant I-participant
|
|
||||||
3 i inform/participant NoLabel
|
|
||||||
4 Ferdynand inform/participant B-participant
|
|
||||||
5 Kiepski inform/participant I-participant
|
|
||||||
|
|
||||||
# text: Spotkanie rekreacyjne
|
|
||||||
# intent: inform/description
|
|
||||||
# slots:
|
|
||||||
1 Spotkanie inform/description B-description
|
|
||||||
2 rekreacyjne inform/description I-description
|
|
||||||
|
|
||||||
# text: opis to Omówienie zakupu akcji firmy GameStop
|
|
||||||
# intent: inform/description
|
|
||||||
# slots:
|
|
||||||
1 opis inform/description NoLabel
|
|
||||||
2 to inform/description NoLabel
|
|
||||||
3 Omówienie inform/description B-description
|
|
||||||
4 zakupu inform/description I-description
|
|
||||||
5 akcji inform/description I-description
|
|
||||||
6 firmy inform/description I-description
|
|
||||||
7 GameStop inform/description I-description
|
|
||||||
|
|
||||||
# text: proszę dodać opis Omówienie projektu XYZ
|
|
||||||
# intent: inform/description
|
|
||||||
# slots:
|
|
||||||
1 proszę inform/description NoLabel
|
|
||||||
2 dodać inform/description NoLabel
|
|
||||||
3 opis inform/description NoLabel
|
|
||||||
4 Omówienie inform/description B-description
|
|
||||||
5 projektu inform/description I-description
|
|
||||||
6 XYZ inform/description I-description
|
|
||||||
|
|
||||||
# text: nowoczesna impreza w remizie
|
|
||||||
# intent: inform/description
|
|
||||||
# slots:
|
|
||||||
1 nowoczesna inform/description B-description
|
|
||||||
2 impreza inform/description I-description
|
|
||||||
3 w inform/description I-description
|
|
||||||
4 remizie inform/description I-description
|
|
||||||
|
|
||||||
# text: Intensywne rozmowy o przyrodzie przy Yerbie
|
|
||||||
# intent: inform/description
|
|
||||||
# slots:
|
|
||||||
1 Intensywne inform/description B-description
|
|
||||||
2 rozmowy inform/description I-description
|
|
||||||
3 o inform/description I-description
|
|
||||||
4 przyrodzie inform/description I-description
|
|
||||||
5 przy inform/description I-description
|
|
||||||
6 Yerbie inform/description I-description
|
|
||||||
|
|
||||||
# text: Spotkanie z kierownikiem zespołu w sprawie prac projektowych
|
|
||||||
# intent: inform/description
|
|
||||||
# slots:
|
|
||||||
1 Spotkanie inform/description NoLabel
|
|
||||||
2 z inform/description NoLabel
|
|
||||||
3 kierownikiem inform/description NoLabel
|
|
||||||
4 zespołu inform/description NoLabel
|
|
||||||
5 w inform/description B-description
|
|
||||||
6 sprawie inform/description I-description
|
|
||||||
7 prac inform/description I-description
|
|
||||||
8 projektowych inform/description I-description
|
|
||||||
|
|
||||||
# text: Proszę jako opis dodać spotkanie dotyczące zakupu firmy
|
|
||||||
# intent: inform/description
|
|
||||||
# slots:
|
|
||||||
1 Proszę inform/description NoLabel
|
|
||||||
2 jako inform/description NoLabel
|
|
||||||
3 opis inform/description NoLabel
|
|
||||||
4 dodać inform/description NoLabel
|
|
||||||
5 spotkanie inform/description B-description
|
|
||||||
6 dotyczące inform/description I-description
|
|
||||||
7 zakupu inform/description I-description
|
|
||||||
8 firmy inform/description I-description
|
|
||||||
|
|
||||||
# text: Spotkanie będzie dotyczyło omówienia strategii biznesowej
|
|
||||||
# intent: inform/description
|
|
||||||
# slots:
|
|
||||||
1 Spotkanie inform/description NoLabel
|
|
||||||
2 będzie inform/description NoLabel
|
|
||||||
3 dotyczyło inform/description NoLabel
|
|
||||||
4 omówienia inform/description B-description
|
|
||||||
5 strategii inform/description I-description
|
|
||||||
6 biznesowej inform/description I-description
|
|
||||||
|
|
||||||
# text: proszę dopisać opis Opis spotkania
|
|
||||||
# intent: inform/description
|
|
||||||
# slots:
|
|
||||||
1 proszę inform/description NoLabel
|
|
||||||
2 dopisać inform/description NoLabel
|
|
||||||
3 opis inform/description NoLabel
|
|
||||||
4 Opis inform/description B-description
|
|
||||||
5 spotkania inform/description I-description
|
|
||||||
|
|
||||||
# text: chciałabym anulować spotkanie
|
|
||||||
# intent: meeting/cancel
|
|
||||||
# slots:
|
|
||||||
1 chciałabym meeting/cancel NoLabel
|
|
||||||
2 anulować meeting/cancel NoLabel
|
|
||||||
3 spotkanie meeting/cancel NoLabel
|
|
||||||
|
|
||||||
# text: chciałbym usunać spotkanie
|
|
||||||
# intent: meeting/cancel
|
|
||||||
# slots:
|
|
||||||
1 chciałabym meeting/cancel NoLabel
|
|
||||||
2 usunać meeting/cancel NoLabel
|
|
||||||
3 spotkanie meeting/cancel NoLabel
|
|
||||||
|
|
||||||
# text: proszę odwołać spotkanie
|
|
||||||
# intent: meeting/cancel
|
|
||||||
# slots:
|
|
||||||
1 proszę meeting/cancel NoLabel
|
|
||||||
2 odwołać meeting/cancel NoLabel
|
|
||||||
3 spotkanie meeting/cancel NoLabel
|
|
||||||
|
|
||||||
# text: chciałbym odwołać to spotkanie
|
|
||||||
# intent: meeting/cancel
|
|
||||||
# slots:
|
|
||||||
1 chciałbym meeting/cancel NoLabel
|
|
||||||
2 odwołać meeting/cancel NoLabel
|
|
||||||
3 to meeting/cancel NoLabel
|
|
||||||
4 spotkanie meeting/cancel NoLabel
|
|
||||||
|
|
||||||
# text: chcę wyrzucić spotkanie z mojego kalendarza
|
|
||||||
# intent: meeting/cancel
|
|
||||||
# slots:
|
|
||||||
1 chcę meeting/cancel NoLabel
|
|
||||||
2 wyrzucić meeting/cancel NoLabel
|
|
||||||
3 spotkanie meeting/cancel NoLabel
|
|
||||||
4 z meeting/cancel NoLabel
|
|
||||||
5 mojego meeting/cancel NoLabel
|
|
||||||
6 kalendarza meeting/cancel NoLabel
|
|
||||||
|
|
||||||
# text: chciałbym przesunąć spotkanie
|
|
||||||
# intent: meeting/update
|
|
||||||
# slots:
|
|
||||||
1 chciałbym meeting/update NoLabel
|
|
||||||
2 przesunąć meeting/update NoLabel
|
|
||||||
3 spotkanie meeting/update NoLabel
|
|
||||||
|
|
||||||
# text: chciałbym edytować spotkanie
|
|
||||||
# intent: meeting/update
|
|
||||||
# slots:
|
|
||||||
1 chciałbym meeting/update NoLabel
|
|
||||||
2 edytować meeting/update NoLabel
|
|
||||||
3 spotkanie meeting/update NoLabel
|
|
||||||
|
|
||||||
# text: chciałbym zmienić datę spotkania
|
|
||||||
# intent: meeting/update
|
|
||||||
# slots:
|
|
||||||
1 chciałbym meeting/update NoLabel
|
|
||||||
2 zmienić meeting/update NoLabel
|
|
||||||
3 datę meeting/update NoLabel
|
|
||||||
4 spotkania meeting/update NoLabel
|
|
||||||
|
|
||||||
# text: czy moge przesunąć to spotkanie
|
|
||||||
# intent: meeting/update
|
|
||||||
# slots:
|
|
||||||
1 czy meeting/update NoLabel
|
|
||||||
2 moge meeting/update NoLabel
|
|
||||||
3 przesunąć meeting/update NoLabel
|
|
||||||
4 to meeting/update NoLabel
|
|
||||||
5 spotkanie meeting/update NoLabel
|
|
||||||
|
|
||||||
# text: chciałbym dodać nową osobę do tego spotkania
|
|
||||||
# intent: meeting/update
|
|
||||||
# slots:
|
|
||||||
1 chciałbym meeting/update NoLabel
|
|
||||||
2 dodać meeting/update NoLabel
|
|
||||||
3 nową meeting/update NoLabel
|
|
||||||
4 osobę meeting/update NoLabel
|
|
||||||
5 do meeting/update NoLabel
|
|
||||||
6 tego meeting/update NoLabel
|
|
||||||
7 spotkania meeting/update NoLabel
|
|
||||||
|
|
||||||
# text: zmień proszę godzinę tego spotkania na 17:30
|
|
||||||
# intent: meeting/update
|
|
||||||
# slots:
|
|
||||||
1 zmień meeting/update NoLabel
|
|
||||||
2 proszę meeting/update NoLabel
|
|
||||||
3 godzinę meeting/update NoLabel
|
|
||||||
4 tego meeting/update NoLabel
|
|
||||||
5 spotkania meeting/update NoLabel
|
|
||||||
6 na meeting/update NoLabel
|
|
||||||
7 17:30 meeting/update B-time
|
|
||||||
|
|
||||||
# text: chciałbym utworzyć spotkanie
|
|
||||||
# intent: meeting/create
|
|
||||||
# slots:
|
|
||||||
1 chciałbym meeting/create NoLabel
|
|
||||||
2 utworzyć meeting/create NoLabel
|
|
||||||
3 spotkanie meeting/create NoLabel
|
|
||||||
|
|
||||||
# text: chciałbym zapisać spotkanie
|
|
||||||
# intent: meeting/create
|
|
||||||
# slots:
|
|
||||||
1 chciałbym meeting/create NoLabel
|
|
||||||
2 zapisać meeting/create NoLabel
|
|
||||||
3 spotkanie meeting/create NoLabel
|
|
||||||
|
|
||||||
# text: chciałbym dodać nowe spotkanie
|
|
||||||
# intent: meeting/create
|
|
||||||
# slots:
|
|
||||||
1 chciałbym meeting/create NoLabel
|
|
||||||
2 dodać meeting/create NoLabel
|
|
||||||
3 nowe meeting/create NoLabel
|
|
||||||
4 spotkanie meeting/create NoLabel
|
|
||||||
|
|
||||||
# text: proszę wpisać nowe spotkanie na ten termin: Wyjście do Kina z Tomkiem
|
|
||||||
# intent: meeting/create
|
|
||||||
# slots:
|
|
||||||
1 proszę meeting/create NoLabel
|
|
||||||
2 wpisać meeting/create NoLabel
|
|
||||||
3 nowe meeting/create NoLabel
|
|
||||||
4 spotkanie meeting/create NoLabel
|
|
||||||
5 na meeting/create NoLabel
|
|
||||||
6 ten meeting/create NoLabel
|
|
||||||
7 termin meeting/create NoLabel
|
|
||||||
8 Wyjście meeting/create B-description
|
|
||||||
9 do meeting/create I-description
|
|
||||||
10 Kina meeting/create I-description
|
|
||||||
11 z meeting/create NoLabel
|
|
||||||
12 Tomkiem meeting/create B-participant
|
|
||||||
|
|
||||||
# text: proszę wpisać spotkanie na piątek godzinę 9:00 Podsumowanie miesiąca salka A
|
|
||||||
# intent: meeting/create
|
|
||||||
# slots:
|
|
||||||
1 proszę meeting/create NoLabel
|
|
||||||
2 wpisać meeting/create NoLabel
|
|
||||||
3 spotkanie meeting/create NoLabel
|
|
||||||
4 na meeting/create NoLabel
|
|
||||||
5 piątek meeting/create B-date
|
|
||||||
6 godzinę meeting/create NoLabel
|
|
||||||
7 9:00 meeting/create B-time
|
|
||||||
8 Podsumowanie meeting/create B-description
|
|
||||||
9 miesiąca meeting/create I-description
|
|
||||||
10 salka meeting/create B-place
|
|
||||||
11 A meeting/create I-place
|
|
||||||
|
|
||||||
# text: proszę ustawić spotkanie z Jan Nowak 24 grudnia 2022 o godzinie 21.30
|
|
||||||
# intent: meeting/create
|
|
||||||
# slots:
|
|
||||||
1 proszę meeting/create NoLabel
|
|
||||||
2 ustawić meeting/create NoLabel
|
|
||||||
3 spotkanie meeting/create NoLabel
|
|
||||||
4 z meeting/create NoLabel
|
|
||||||
5 Jan meeting/create B-participant
|
|
||||||
6 Nowak meeting/create I-participant
|
|
||||||
7 24 meeting/create B-date
|
|
||||||
8 grudnia meeting/create I-date
|
|
||||||
9 2022 meeting/create I-date
|
|
||||||
10 o meeting/create NoLabel
|
|
||||||
11 godzinie meeting/create NoLabel
|
|
||||||
11 21.30 meeting/create B-time
|
|
||||||
|
|
||||||
# text: chciałbym umówić spotkanie dzisiaj o godzinie 17.00
|
|
||||||
# intent: meeting/create
|
|
||||||
# slots:
|
|
||||||
1 chciałbym meeting/create NoLabel
|
|
||||||
2 umówić meeting/create NoLabel
|
|
||||||
3 spotkanie meeting/create NoLabel
|
|
||||||
4 dzisiaj meeting/create B-date
|
|
||||||
5 o meeting/create B-date
|
|
||||||
6 godzinie meeting/create NoLabel
|
|
||||||
7 17.00 meeting/create B-time
|
|
||||||
|
|
||||||
# text: zapisz mi proszę spotkanie z 3 marca o 17 wizyta u lekarza
|
|
||||||
# intent: meeting/create
|
|
||||||
# slots:
|
|
||||||
1 zapisz meeting/create NoLabel
|
|
||||||
2 mi meeting/create NoLabel
|
|
||||||
3 proszę meeting/create NoLabel
|
|
||||||
4 spotkanie meeting/create NoLabel
|
|
||||||
5 z meeting/create NoLabel
|
|
||||||
6 3 meeting/create B-date
|
|
||||||
7 marca meeting/create I-date
|
|
||||||
8 o meeting/create NoLabel
|
|
||||||
9 17 meeting/create B-time
|
|
||||||
10 wizyta meeting/create B-description
|
|
||||||
11 u meeting/create I-description
|
|
||||||
12 lekarza meeting/create I-description
|
|
||||||
|
|
||||||
# text: proszę wpisać na 02.04.2021 o godzinie 19:00 Wyjście do kina ze znajomą
|
|
||||||
# intent: meeting/create
|
|
||||||
# slots:
|
|
||||||
1 proszę meeting/create NoLabel
|
|
||||||
2 wpisać meeting/create NoLabel
|
|
||||||
3 na meeting/create NoLabel
|
|
||||||
4 02.04.2021 meeting/create B-date
|
|
||||||
5 o meeting/create NoLabel
|
|
||||||
6 godzinie meeting/create NoLabel
|
|
||||||
7 19:00 meeting/create B-time
|
|
||||||
8 Wyjście meeting/create B-description
|
|
||||||
9 do meeting/create I-description
|
|
||||||
10 kina meeting/create I-description
|
|
||||||
11 ze meeting/create I-description
|
|
||||||
12 znajomą meeting/create I-description
|
|
||||||
|
|
||||||
# text: chciałabym umówić spotkanie
|
|
||||||
# intent: meeting/create
|
|
||||||
# slots:
|
|
||||||
1 chciałabym meeting/create NoLabel
|
|
||||||
2 umówić meeting/create NoLabel
|
|
||||||
3 spotkanie meeting/create NoLabel
|
|
||||||
|
|
||||||
# text: chciałabym dodać spotkanie do kalendarza
|
|
||||||
# intent: meeting/create
|
|
||||||
# slots:
|
|
||||||
1 chciałabym meeting/create NoLabel
|
|
||||||
2 dodać meeting/create NoLabel
|
|
||||||
3 spotkanie meeting/create NoLabel
|
|
||||||
4 do meeting/create NoLabel
|
|
||||||
5 kalendarza meeting/create NoLabel
|
|
||||||
|
|
||||||
# text: proszę o dodanie spotkania biznesowego na dziś wieczór
|
|
||||||
# intent: meeting/create
|
|
||||||
# slots:
|
|
||||||
1 proszę meeting/create NoLabel
|
|
||||||
2 o meeting/create NoLabel
|
|
||||||
3 dodanie meeting/create NoLabel
|
|
||||||
4 spotkania meeting/create NoLabel
|
|
||||||
5 biznesowego meeting/create NoLabel
|
|
||||||
6 na meeting/create NoLabel
|
|
||||||
7 dziś meeting/create B-date
|
|
||||||
8 wieczór meeting/create NoLabel
|
|
||||||
|
|
||||||
# text: dodaj pozycję jutro na 17.30 Lunch z księgową w miejscu Cafe Teria
|
|
||||||
# intent: meeting/create
|
|
||||||
# slots:
|
|
||||||
1 dodaj meeting/create NoLabel
|
|
||||||
2 pozycję meeting/create NoLabel
|
|
||||||
3 jutro meeting/create B-date
|
|
||||||
4 na meeting/create NoLabel
|
|
||||||
5 17.30 meeting/create B-time
|
|
||||||
6 Lunch meeting/create B-description
|
|
||||||
7 z meeting/create I-description
|
|
||||||
8 księgową meeting/create I-description
|
|
||||||
9 w meeting/create NoLabel
|
|
||||||
10 miejscu meeting/create NoLabel
|
|
||||||
11 Cafe meeting/create B-place
|
|
||||||
12 Teria meeting/create I-place
|
|
||||||
|
|
||||||
# text: chciałabym zobaczyć podsumowanie spotkań z ostatniego miesiąca
|
|
||||||
# intent: meeting/list
|
|
||||||
# slots:
|
|
||||||
1 chciałabym meeting/list NoLabel
|
|
||||||
2 zobaczyć meeting/list NoLabel
|
|
||||||
3 podsumowanie meeting/list NoLabel
|
|
||||||
4 spotkań meeting/list NoLabel
|
|
||||||
5 z meeting/list NoLabel
|
|
||||||
6 ostatniego meeting/list B-date
|
|
||||||
7 miesiąca meeting/list I-date
|
|
||||||
|
|
||||||
# text: jakie mam spotkania jutro
|
|
||||||
# intent: meeting/list
|
|
||||||
# slots:
|
|
||||||
1 jakie meeting/list NoLabel
|
|
||||||
2 mam meeting/list NoLabel
|
|
||||||
3 spotkania meeting/list NoLabel
|
|
||||||
4 jutro meeting/list B-date
|
|
||||||
|
|
||||||
# text: proszę o rozpiskę spotkań na następny tydzień
|
|
||||||
# intent: meeting/list
|
|
||||||
# slots:
|
|
||||||
1 proszę meeting/list NoLabel
|
|
||||||
2 o meeting/list NoLabel
|
|
||||||
3 rozpiskę meeting/list NoLabel
|
|
||||||
4 spotkań meeting/list NoLabel
|
|
||||||
5 na meeting/list NoLabel
|
|
||||||
6 następny meeting/list B-date
|
|
||||||
7 tydzień meeting/list I-date
|
|
||||||
|
|
||||||
# text: podaj mi proszę moje spotkania na najbliższy tydzień
|
|
||||||
# intent: meeting/list
|
|
||||||
# slots:
|
|
||||||
1 podaj meeting/list NoLabel
|
|
||||||
2 mi meeting/list NoLabel
|
|
||||||
3 proszę meeting/list NoLabel
|
|
||||||
4 moje meeting/list NoLabel
|
|
||||||
5 spotkania meeting/list NoLabel
|
|
||||||
6 na meeting/list NoLabel
|
|
||||||
7 najbliższy meeting/list B-date
|
|
||||||
8 tydzień meeting/list I-date
|
|
||||||
|
|
||||||
# text: jakie mam nadchodzące wydarzenia w tym tygodniu
|
|
||||||
# intent: meeting/list
|
|
||||||
# slots:
|
|
||||||
1 jakie meeting/list NoLabel
|
|
||||||
2 mam meeting/list NoLabel
|
|
||||||
3 nadchodzące meeting/list NoLabel
|
|
||||||
4 wydarzenia meeting/list NoLabel
|
|
||||||
5 w meeting/list NoLabel
|
|
||||||
6 tym meeting/list B-date
|
|
||||||
7 tygodniu meeting/list I-date
|
|
||||||
|
|
||||||
# text: jakie spotkania mam w przyszłym tygodniu
|
|
||||||
# intent: meeting/list
|
|
||||||
# slots:
|
|
||||||
1 jakie meeting/list NoLabel
|
|
||||||
2 spotkania meeting/list NoLabel
|
|
||||||
3 mam meeting/list NoLabel
|
|
||||||
4 w meeting/list NoLabel
|
|
||||||
5 przyszłym meeting/list B-date
|
|
||||||
6 tygodniu meeting/list I-date
|
|
||||||
|
|
||||||
# text: Czy mam jakieś spotkania w najbliższy piątek
|
|
||||||
# intent: meeting/list
|
|
||||||
# slots:
|
|
||||||
1 Czy meeting/list NoLabel
|
|
||||||
2 mam meeting/list NoLabel
|
|
||||||
3 jakieś meeting/list NoLabel
|
|
||||||
4 spotkania meeting/list NoLabel
|
|
||||||
5 w meeting/list NoLabel
|
|
||||||
6 najbliższy meeting/list B-date
|
|
||||||
7 piątek meeting/list I-date
|
|
||||||
|
|
||||||
# text: chcialbym sprawdzic czy mam jakies spotkania w najblizszym tygodniu
|
|
||||||
# intent: meeting/list
|
|
||||||
# slots:
|
|
||||||
1 chcialbym meeting/list NoLabel
|
|
||||||
2 sprawdzic meeting/list NoLabel
|
|
||||||
3 czy meeting/list NoLabel
|
|
||||||
4 mam meeting/list NoLabel
|
|
||||||
5 jakies meeting/list NoLabel
|
|
||||||
6 spotkania meeting/list NoLabel
|
|
||||||
7 w meeting/list NoLabel
|
|
||||||
8 najblizszym meeting/list B-date
|
|
||||||
9 tygodniu meeting/list I-date
|
|
||||||
|
|
||||||
# text: proszę o wyświetlenie jutrzejszego kalendarza
|
|
||||||
# intent: meeting/list
|
|
||||||
# slots:
|
|
||||||
1 proszę meeting/list NoLabel
|
|
||||||
2 o meeting/list NoLabel
|
|
||||||
3 wyświetlenie meeting/list NoLabel
|
|
||||||
4 jutrzejszego meeting/list B-date
|
|
||||||
5 kalendarza meeting/list NoLabel
|
|
||||||
|
|
||||||
# text: proszę o rozpiskę spotkań w tym tygodniu
|
|
||||||
# intent: meeting/list
|
|
||||||
# slots:
|
|
||||||
1 proszę meeting/list NoLabel
|
|
||||||
2 o meeting/list NoLabel
|
|
||||||
3 rozpiskę meeting/list NoLabel
|
|
||||||
4 spotkań meeting/list NoLabel
|
|
||||||
5 w meeting/list NoLabel
|
|
||||||
6 tym meeting/list B-date
|
|
||||||
7 tygodniu meeting/list I-date
|
|
||||||
|
|
||||||
# text: jakie mam wolne terminy w najbliższy piątek
|
|
||||||
# intent: meeting/free_time
|
|
||||||
# slots:
|
|
||||||
1 jakie meeting/free_time NoLabel
|
|
||||||
2 mam meeting/free_time NoLabel
|
|
||||||
3 wolne meeting/free_time NoLabel
|
|
||||||
4 terminy meeting/free_time NoLabel
|
|
||||||
5 w meeting/free_time NoLabel
|
|
||||||
6 najbliższy meeting/free_time B-date
|
|
||||||
7 piątek meeting/free_time I-date
|
|
||||||
|
|
||||||
# text: czy mam jutro wolne terminy
|
|
||||||
# intent: meeting/free_time
|
|
||||||
# slots:
|
|
||||||
1 czy meeting/free_time NoLabel
|
|
||||||
2 mam meeting/free_time NoLabel
|
|
||||||
3 jutro meeting/free_time B-date
|
|
||||||
4 wolne meeting/free_time NoLabel
|
|
||||||
5 terminy meeting/free_time B-date
|
|
157
dateHelper.py
157
dateHelper.py
@ -1,157 +0,0 @@
|
|||||||
from datetime import date, datetime, timedelta, time
|
|
||||||
import re
|
|
||||||
from typing import Generator
|
|
||||||
|
|
||||||
|
|
||||||
# Monday - 0
|
|
||||||
# Tuesday - 1
|
|
||||||
# Wednesday - 2
|
|
||||||
# Thursday - 3
|
|
||||||
# Friday - 4
|
|
||||||
# Saturday - 5
|
|
||||||
# Sunday -6
|
|
||||||
|
|
||||||
def format_date(d):
|
|
||||||
return d.strftime('%d.%m.%Y')
|
|
||||||
|
|
||||||
|
|
||||||
def get_current_date():
|
|
||||||
return date.today()
|
|
||||||
|
|
||||||
|
|
||||||
def get_current_datetime():
|
|
||||||
return datetime.today()
|
|
||||||
|
|
||||||
|
|
||||||
def get_current_day_of_week():
|
|
||||||
return datetime.today().weekday()
|
|
||||||
|
|
||||||
|
|
||||||
def convert_timestamp_to_UTC(timestamp):
|
|
||||||
return datetime.fromtimestamp(timestamp)
|
|
||||||
|
|
||||||
|
|
||||||
def convert_UTC_to_timestamp(date):
|
|
||||||
return datetime.timestamp(date)
|
|
||||||
|
|
||||||
|
|
||||||
def get_day_of_week_number(day):
|
|
||||||
if day == 'dziś' or day == 'dzisiaj':
|
|
||||||
return get_current_day_of_week()
|
|
||||||
if day == 'poniedziałek':
|
|
||||||
return 0
|
|
||||||
elif day == 'wtorek':
|
|
||||||
return 1
|
|
||||||
elif day == 'środa':
|
|
||||||
return 2
|
|
||||||
elif day == 'czwartek':
|
|
||||||
return 3
|
|
||||||
elif day == 'piątek':
|
|
||||||
return 4
|
|
||||||
elif day == 'sobota':
|
|
||||||
return 5
|
|
||||||
elif day == 'niedziela':
|
|
||||||
return 6
|
|
||||||
|
|
||||||
|
|
||||||
def get_time_from_hours_minutes(hours, minutes):
|
|
||||||
return time(hours, minutes, 0)
|
|
||||||
|
|
||||||
|
|
||||||
def format_time(time):
|
|
||||||
if re.match(r'^[0-2][0-9]$', time):
|
|
||||||
hours = int(time)
|
|
||||||
minutes = 00
|
|
||||||
elif re.match(r'^([0-2][0-9]).([0-9][0-9])(-)?.*$', time):
|
|
||||||
m = re.search(r'^([0-2][0-9]).([0-9][0-9])(-)?.*$', time)
|
|
||||||
hours = int(m.group(1))
|
|
||||||
minutes = int(m.group(2))
|
|
||||||
return get_time_from_hours_minutes(hours, minutes).strftime('%H:%M')
|
|
||||||
|
|
||||||
|
|
||||||
def get_end_time(time):
|
|
||||||
if re.match(r'^([0-2][0-9]).?([0-9][0-9])?-([0-2][0-9]).?([0-9][0-9])?$', time):
|
|
||||||
m = re.search(
|
|
||||||
r'^^([0-2][0-9]).?([0-9][0-9])?-([0-2][0-9]).?([0-9][0-9])?$', time)
|
|
||||||
|
|
||||||
hours = int(m.group(3))
|
|
||||||
if m.group(4) is None:
|
|
||||||
minutes = 0
|
|
||||||
else:
|
|
||||||
minutes = int(m.group(4))
|
|
||||||
|
|
||||||
return get_time_from_hours_minutes(hours, minutes).strftime('%H:%M')
|
|
||||||
else:
|
|
||||||
# jak nie ma to zakładamy że trwa godzinę
|
|
||||||
if re.match(r'^[0-2][0-9]$', time):
|
|
||||||
hours = int(time)
|
|
||||||
minutes = 00
|
|
||||||
elif re.match(r'^([0-2][0-9]).([0-9][0-9])(-)?.*$', time):
|
|
||||||
m = re.search(r'^([0-2][0-9]).([0-9][0-9])(-)?.*$', time)
|
|
||||||
hours = int(m.group(1))
|
|
||||||
minutes = int(m.group(2))
|
|
||||||
|
|
||||||
hours += 1
|
|
||||||
if hours == 23:
|
|
||||||
hours = 24
|
|
||||||
elif hours == 24:
|
|
||||||
hours = 1
|
|
||||||
|
|
||||||
return get_time_from_hours_minutes(hours, minutes).strftime('%H:%M')
|
|
||||||
|
|
||||||
|
|
||||||
def get_datetime_from_day(day, hours, minutes):
|
|
||||||
current_day_of_week = get_current_day_of_week()
|
|
||||||
input_date_of_week = get_day_of_week_number(day)
|
|
||||||
input_time = get_time_from_hours_minutes(hours, minutes)
|
|
||||||
|
|
||||||
# data wypada na dzisiaj i trzeba sprawdzić godziny
|
|
||||||
if current_day_of_week == input_date_of_week:
|
|
||||||
|
|
||||||
# Podanej czas już był
|
|
||||||
if input_time < datetime.now().time():
|
|
||||||
date = get_current_date() + timedelta(days=7)
|
|
||||||
return datetime.combine(date, input_time)
|
|
||||||
# Podana czas jeszcze nie był
|
|
||||||
else:
|
|
||||||
date = get_current_date()
|
|
||||||
return datetime.combine(date, input_time)
|
|
||||||
|
|
||||||
# data będzie z przyszłośći
|
|
||||||
else:
|
|
||||||
date = get_current_date() + timedelta(days=(7 - abs(current_day_of_week-input_date_of_week)))
|
|
||||||
return datetime.combine(date, input_time)
|
|
||||||
|
|
||||||
|
|
||||||
def get_date(date, time):
|
|
||||||
# parsowanie czasu
|
|
||||||
if re.match(r'^[0-2][0-9]$', time):
|
|
||||||
hours = int(time)
|
|
||||||
minutes = 00
|
|
||||||
elif re.match(r'^([0-2][0-9]).([0-9][0-9])(-)?.*$', time):
|
|
||||||
m = re.search(r'^([0-2][0-9]).([0-9][0-9])(-)?.*$', time)
|
|
||||||
hours = int(m.group(1))
|
|
||||||
minutes = int(m.group(2))
|
|
||||||
|
|
||||||
|
|
||||||
# TODO jeżeli jeszcze jakieś dziwne formaty to obsłużyć przypadki
|
|
||||||
if re.match(r'^[0-3][0-9]\.[0-1][0-9]\.20[0-9]{2}$', date):
|
|
||||||
date = datetime.strptime(date, '%d.%m.%Y').date()
|
|
||||||
return datetime.combine(date, get_time_from_hours_minutes(hours, minutes))
|
|
||||||
else:
|
|
||||||
return get_datetime_from_day(date, hours, minutes)
|
|
||||||
|
|
||||||
|
|
||||||
# Tests
|
|
||||||
|
|
||||||
# print(get_datetime_from_day('niedziela', 22, 21))
|
|
||||||
# print(get_datetime_from_day('niedziela', 18, 21))
|
|
||||||
# print(get_datetime_from_day('poniedziałek', 18, 21))
|
|
||||||
# print(get_datetime_from_day('wtorek', 18, 21))
|
|
||||||
|
|
||||||
# print(get_date("07.06.2021", "12:00"))
|
|
||||||
# print(get_date("sobota", "00:00"))
|
|
||||||
# print(get_date("wtorek", "12:00"))
|
|
||||||
# print(get_date("12.06.2021", "23"))
|
|
||||||
|
|
||||||
# print(get_current_date())
|
|
31
evaluate.py
31
evaluate.py
@ -1,31 +0,0 @@
|
|||||||
from UserActType import UserActType
|
|
||||||
import os
|
|
||||||
import pandas as pd
|
|
||||||
import numpy as np
|
|
||||||
from NaturalLanguageUnderstanding import NLU
|
|
||||||
|
|
||||||
nlu = NLU()
|
|
||||||
|
|
||||||
rows = 0
|
|
||||||
hits = 0
|
|
||||||
hard_hits = 0
|
|
||||||
|
|
||||||
for file_name in os.listdir('data'):
|
|
||||||
df = pd.read_csv(f'data/{file_name}', sep='\t', names=['interlocutor', 'sentence', 'acts'])
|
|
||||||
df = df[df.interlocutor == 'user']
|
|
||||||
data = np.array(df)
|
|
||||||
|
|
||||||
for row in data:
|
|
||||||
rows += 1
|
|
||||||
sentence = row[1]
|
|
||||||
acts = row[2].split('&')
|
|
||||||
user_act = nlu.parse_user_input(sentence)
|
|
||||||
for act in acts:
|
|
||||||
if str(user_act) == act.strip(' '):
|
|
||||||
hard_hits += 1
|
|
||||||
for act in acts:
|
|
||||||
if act.split('(')[0].strip(' ') == str(user_act).split('(')[0].strip(' '):
|
|
||||||
hits += 1
|
|
||||||
|
|
||||||
print(f"Accuracy (intent only): {(hits / rows)*100} ({hits}/{rows})")
|
|
||||||
print(f"Accuracy (intent with slots): {(hard_hits / rows)*100} ({hard_hits}/{rows})")
|
|
@ -1,94 +0,0 @@
|
|||||||
# Ewaluacja - asystent kalendarza spotkań
|
|
||||||
|
|
||||||
## Ankieta zadowolenia użytkownika:
|
|
||||||
https://forms.office.com/r/L16YGV6MLz
|
|
||||||
|
|
||||||
Ankieta zadowolenia użytkownika poruszała kilka kwestii, takich jak:
|
|
||||||
* główne zadanie, jakie użytkownik chciał zrealizować przy pomocy systemu
|
|
||||||
* czy udało się powyższe zadanie w pełni przy pomocy systemu zrealizować
|
|
||||||
* łatwość realizacji tego zadania w skali 1-5
|
|
||||||
* zrozumiałość wypowiedzi użytkownika dla systemu w skali 1-5
|
|
||||||
* zrozumiałość wypowiedzi systemu w skali 1-5
|
|
||||||
* jak bardzo system reagował zgodnie z oczekiwaniami użytkownika w skali 1-5
|
|
||||||
* odpowiedniość tempa interakcji w skali 1-5
|
|
||||||
* czy użytkownik wiedział co odpowiedzieć na każdym etapie dialogu w skali 1-5
|
|
||||||
* czy błąd krytyczny systemu zakończył rozmowę
|
|
||||||
* 2 pytania opisowe, co wg. użytkownika działa w systemie najlepiej i najgorzej
|
|
||||||
* czy użytkownik zamierza używać systemu w przyszłości w skali 1-5
|
|
||||||
* ogólna ocena systemu w skali 1-5
|
|
||||||
<!-- end of the list -->
|
|
||||||
Udało się zebrać odpowiedzi dotyczące 10 przeprowadzonych rozmów.
|
|
||||||
|
|
||||||
### Pytanie 1: Główne zadanie użytkownika.
|
|
||||||
* 8 użytkowników wskazało jako główny cel <b>umówienie spotkania</b>
|
|
||||||
* 1 użytkownik chciał sprawdzić <b>listę spotkań</b>
|
|
||||||
* 1 użytkownik chciał <b>odwołać spotkanie</b>
|
|
||||||
|
|
||||||
### Pytanie 2: Czy udało się zrealizować główne zadanie?
|
|
||||||
* 7 użytkowników odpowiedziało <b>tak</b>
|
|
||||||
* 3 użytkowników odpowiedziało <b>nie</b>
|
|
||||||
<!-- end of the list -->
|
|
||||||
Wszyscy użytkownicy, którym udało się zrealizować główne zadanie chcieli utworzyć spotkanie. Można więc wysnuć wniosek, że to element systemu, który działa najlepiej i jednocześnie najpopularniejszy wśród użytkowników. Co za tym idzie system można nazwać dość skutecznym, jednak nie radzi sobie w pełni ze wszystkimi planowanymi zadaniami.
|
|
||||||
|
|
||||||
### Pytanie 3: Łatwość realizacji zadania.
|
|
||||||
Średnia ocena tej metryki to 3.5/5 <br>
|
|
||||||
Najczęstsze oceny to <b>4 - co oznacza łatwą realizację zadania</b> (5 użytkowników) oraz <b>3 - umiarkowanie</b> (3 użytkowników). <br>
|
|
||||||
Najniższe oceny dotyczyły rozmów, w których nie doszło do pomyślej realizacji zadania.
|
|
||||||
|
|
||||||
### Pytanie 4: Jak system rozumiał wypowiedzi użytkownika?
|
|
||||||
Średnia ocena tej metryki to 3.5/5 <br>
|
|
||||||
Najczęstsze oceny to <b>4 - co oznacza zrozumienie większości wypowiedzi</b> (6 użytkowników) oraz <b>2 - zrozumienie niektórych wypowiedzi</b> (3 użytkowników). <br>
|
|
||||||
Najniższe oceny dotyczyły rozmów, w których nie doszło do pomyślej realizacji zadania.
|
|
||||||
|
|
||||||
### Pytanie 5: Jak użytkownik rozumiał wypowiedzi systemu?
|
|
||||||
Średnia ocena tej metryki to 4.3/5 <br>
|
|
||||||
Najczęstsze oceny to <b>5 - użytkownik rozumiał w pełni wypowiedzi systemu</b> (5 użytkowników) oraz <b>4 - użytkownik rozumiał w większości wypowiedzi systemu</b> (4 użytkowników). <br>
|
|
||||||
Najniższa ocena (2) dotyczyła rozmowy, w której nie doszło do pomyślej realizacji zadania.
|
|
||||||
|
|
||||||
### Pytanie 6: System robił to, co oczekiwał użytkownik.
|
|
||||||
Średnia ocena tej metryki to 3.6/5 <br>
|
|
||||||
Najczęstsze oceny to <b>4 - zgadzam się</b> (7 użytkowników) oraz <b>3 - trudno powiedzieć</b> (2 użytkowników). <br>
|
|
||||||
Najniższe oceny (2 oraz 3) dotyczyły rozmów, w których nie doszło do pomyślej realizacji zadania.
|
|
||||||
|
|
||||||
### Pytanie 7: Tempo interakcji z systemem było odpowiednie.
|
|
||||||
Średnia ocena tej metryki to 4.1/5 <br>
|
|
||||||
Najczęstsze oceny to <b>4 - zgadzam się</b> (7 użytkowników) oraz <b>5 - całkowicie się zgadzam</b> (2 użytkowników). <br>
|
|
||||||
Najniższa ocena (3) dotyczyła rozmowy, w której nie doszło do pomyślej realizacji zadania.
|
|
||||||
|
|
||||||
### Pytanie 8: Użytkownik wiedział co ma odpowiadać na każdym etapie dialogu.
|
|
||||||
Średnia ocena tej metryki to 3.9/5 <br>
|
|
||||||
Najczęstsze oceny to <b>4 - zgadzam się</b> (6 użytkowników) oraz <b>5 - całkowicie się zgadzam</b> (2 użytkowników). <br>
|
|
||||||
Najniższe oceny (2 oraz 3) dotyczyły rozmów, w których nie doszło do pomyślej realizacji zadania.
|
|
||||||
|
|
||||||
### Pytanie 9: Czy krytyczny błąd systemu przerwał rozmowę?
|
|
||||||
* 7 użytkowników odpowiedziało <b>tak</b>
|
|
||||||
* 3 użytkowników odpowiedziało <b>nie</b>
|
|
||||||
<!-- end of the list -->
|
|
||||||
Najbardziej niepokojąca metryka w ankiecie. Aż 70% rozmów skończyło się krytycznym błędem systemu, jednak w większości przypadków nie wpłynęło to na realizację głównego zadania użytkownika. Z pewnością trzeba się skupić w przyszłości na wyeliminowaniu tych błędów.
|
|
||||||
|
|
||||||
### Pytanie 10: Co w systemie działało nagorzej (nieobowiązkowe pytanie opisowe)?
|
|
||||||
Najczęściej wskazywanymi mankamentami systemu były błędne przechwytywanie slotów, co często prowadziło do ponownego zadania tego samego pytania oraz nieoczekiwane zakończenie konwersacji błędem krytycznym. Aż 7 użytkowników zdecydowało się odpowiedzieć na to pytanie, co najprawdopodobniej oznacza, że system dalej posiada niewielkie błędy wpływające na jego jakość.
|
|
||||||
|
|
||||||
### Pytanie 11: Co w systemie działało najlepiej (nieobowiązkowe pytanie opisowe)?
|
|
||||||
Tylko 3 użytkowników zdecydowało się odpowiedzieć na to pytanie, co może oznaczać, że większość z nich nie widziała w systemie bardzo dobrze działających elementów. <br>
|
|
||||||
Użytkownicy, którzy odpowiedzieli na to pytanie jako główną zaletę wskazali, że system realizuje pomyślnie podstawowy scenariusz, czyli tworzenie spotkania.
|
|
||||||
|
|
||||||
### Pytanie 12: Czy użytkownik zamierza używać systemu w przyszłości?
|
|
||||||
Średnia ocena tej metryki to 2.9/5 <br>
|
|
||||||
Najczęstsza ocena to <b>3 - trudno powiedzieć</b> (9 użytkowników). <br>
|
|
||||||
Większość użytkowników nie ma wyrobionego zdania na temat przydatności systemu. Może to oznaczać, że system nie przekonał użytkowników podczas testów lub nie zawiera wszystkich oczekiwanych funkcjonalności.
|
|
||||||
|
|
||||||
### Pytanie 13: Ogólna ocena systemu przez użytkownika.
|
|
||||||
Średnia ocena tej metryki to 3.9/5 <br>
|
|
||||||
Najczęstsza ocena to <b>4</b> (5 użytkowników). <br>
|
|
||||||
Ogólnie system wypada dość dobrze. Najniższe oceny dotyczyły rozmów, podczas których nie udało się zrealizować zadania oraz system zakończył niespodziewanie rozmowe przez błąd. Można więc wysnuć wniosek, że wyeliminowanie tych błędów i poprawa skuteczności podniosłaby ogólną ocenę systemu.
|
|
||||||
|
|
||||||
## Inne metryki ewaluacyjne.
|
|
||||||
### Task success rate:
|
|
||||||
System poprawnie zrealizował 9 zadań z 16 możliwych, co daje <b>56,25%</b> skuteczności. <br>
|
|
||||||
Tą skuteczność można uznać za dość dobrą, jednak na pewno trzeba by ją zwiększyć w toku dalszych prac nad systemem. <br>
|
|
||||||
Głownym elementem systemu, który powodował niepomyślną realizację zadań był moduł NLU (głównie błędne wyłapywanie wartości slotów) oraz moduł NLG (system nie generował odpowiedzi przy niektórych nieprzewidzianych scenariuszach).
|
|
||||||
|
|
||||||
### Slot error rate:
|
|
||||||
System poprawnie wyłapał 23 wartości slotu na 55 przypadków, co daje <b>41,81%</b> skuteczności. <br>
|
|
||||||
System przede wszystkim miał problem ze slotem <b>opis spotkania</b> oraz <b>uczestnik spotkania</b>. Dość sprawnie wyłapuje slot <b>data</b> oraz <b>godzina</b>.
|
|
38
main.py
38
main.py
@ -1,38 +0,0 @@
|
|||||||
from SystemActType import SystemActType
|
|
||||||
from NaturalLanguageUnderstanding import NLU
|
|
||||||
from NaturalLanguageGeneration import NLG
|
|
||||||
from DialogueStateTracker import DST
|
|
||||||
from DialoguePolicy import DP
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
|
|
||||||
nlu = NLU()
|
|
||||||
dst = DST()
|
|
||||||
dp = DP(dst)
|
|
||||||
nlg = NLG(dst)
|
|
||||||
|
|
||||||
while(1):
|
|
||||||
user_input = input("Wpisz tekst: ")
|
|
||||||
|
|
||||||
user_frame = nlu.parse_user_input(user_input)
|
|
||||||
print('------ rozpoznany user frame ------')
|
|
||||||
print(user_frame)
|
|
||||||
dst.user_update(user_frame)
|
|
||||||
state, last_user_act, last_system_act = dst.get_dialogue_state()
|
|
||||||
slots = dst.get_dialogue_slots()
|
|
||||||
system_act = dp.choose_tactic()
|
|
||||||
|
|
||||||
print('------ stan ------')
|
|
||||||
print(state, last_user_act, last_system_act)
|
|
||||||
print('------ przechowywane sloty ------')
|
|
||||||
print(slots)
|
|
||||||
print('------ wybrana akcja systemu ------')
|
|
||||||
print(system_act)
|
|
||||||
system_response = nlg.generate_response(system_act)
|
|
||||||
print('------ wygenerowana odpowiedź systemu ------')
|
|
||||||
print(system_response)
|
|
||||||
print('-----------------------------------')
|
|
||||||
print('-----------------------------------')
|
|
||||||
|
|
||||||
if system_act.getActType() == SystemActType.BYE:
|
|
||||||
break
|
|
@ -1,185 +0,0 @@
|
|||||||
Asystent kalendarza spotkań
|
|
||||||
==============
|
|
||||||
|
|
||||||
Zadanie 1: Umawianie spotkania
|
|
||||||
--------------------------------
|
|
||||||
|
|
||||||
*system:* Witam w twoim prywatnym asystencie kalendarza spotkań.
|
|
||||||
|
|
||||||
*user:* Dzień dobry, chciałbym umówić nowe spotkanie.
|
|
||||||
|
|
||||||
*system:* Proszę podać dzień na jaki mam umówić spotkanie.
|
|
||||||
|
|
||||||
*user:* Najbliższy poniedziałek.
|
|
||||||
|
|
||||||
*system:* Proszę podać godzinę i długość spotkania.
|
|
||||||
|
|
||||||
*user:* 15:30, 1 godzina
|
|
||||||
|
|
||||||
*system:* Niestety, godzina ta jest już zajęta przez inne spotkanie, proponuję godzinę 14:00.
|
|
||||||
|
|
||||||
*user:* Dobrze, może być godzina 14:00.
|
|
||||||
|
|
||||||
*system:* Czy mam zapisać miejsce spotkania?
|
|
||||||
|
|
||||||
*user:* Tak, sala konferencyjna w biurze.
|
|
||||||
|
|
||||||
*system:* Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie?
|
|
||||||
|
|
||||||
*user:* Tak, Jan Nowak - Prezes firmy ABC.
|
|
||||||
|
|
||||||
*system:* Czy mam dodać opis do spotkania?
|
|
||||||
|
|
||||||
*user:* Nie, nie trzeba.
|
|
||||||
|
|
||||||
*system:* Proszę potwierdzić utworzenie spotkania: <br>
|
|
||||||
Data: Poniedziałek 29.03.2021 14:00-15:00 <br>
|
|
||||||
Miejsce: Sala konferencyjna w biurze <br>
|
|
||||||
Spotkanie z: Jan Nowak - Prezes firmy ABC <br>
|
|
||||||
|
|
||||||
*user:* Zatwierdzam.
|
|
||||||
|
|
||||||
*system:* Spotkanie zostało pomyślnie dodane do kalendarza.
|
|
||||||
|
|
||||||
|
|
||||||
Zadanie 2: Edycja spotkania
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
*system:* Witam w twoim prywatnym asystencie kalendarza spotkań.
|
|
||||||
|
|
||||||
*user:* Dzień dobry, chciałbym edytować spotkanie.
|
|
||||||
|
|
||||||
*system:* Proszę podać datę i godzinę spotkania do edycji.
|
|
||||||
|
|
||||||
*user:* 29.03.2021 14:00
|
|
||||||
|
|
||||||
*system:* Czego ma dytyczyć edycja? Czasu, miejsca, osoby czy opisu?
|
|
||||||
|
|
||||||
*user:* Osoby.
|
|
||||||
|
|
||||||
*system:* Obecna osoba to Jan Nowak - Prezes firmy ABC, kogo ma dotyczyć to spotkanie?
|
|
||||||
|
|
||||||
*user:* Adam Kowalski - Wiceprezes firmy ABC.
|
|
||||||
|
|
||||||
*system:* Czy to wszystkie zmiany?
|
|
||||||
|
|
||||||
*user:* Nie, chciałbym jeszcze zmienić czas spotkania.
|
|
||||||
|
|
||||||
*system:* Obecna czas spotkania to Poniedziałek 29.03.2021 14:00-15:00, jaki ma być nowy czas spotkania?
|
|
||||||
|
|
||||||
*user:* Niech zostanie bez zmian.
|
|
||||||
|
|
||||||
*system:* Czas nie został zmieniony, czy to wszystkie edycje?
|
|
||||||
|
|
||||||
*user:* Tak.
|
|
||||||
|
|
||||||
*system:* Spotkanie zostało pomyślnie zmienione.
|
|
||||||
|
|
||||||
|
|
||||||
Zadanie 3: Odwołanie spotkania
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
*system:* Witam w twoim prywatnym asystencie kalendarza spotkań.
|
|
||||||
|
|
||||||
*user:* Dzień dobry, chciałbym odwołać spotkanie.
|
|
||||||
|
|
||||||
*system:* Proszę podać datę i godzinę spotkania do odwołania.
|
|
||||||
|
|
||||||
*user:* 29.03.2021 16:00
|
|
||||||
|
|
||||||
*system:* Czy jesteś pewien, że chcesz odwołać poniższe spotkanie? <br>
|
|
||||||
Data: Poniedziałek 29.03.2021 16:00-17:15 <br>
|
|
||||||
Miejsce: Dom <br>
|
|
||||||
Spotkanie z: Kacper (Brat) <br>
|
|
||||||
Opis: Zaplanowanie imprezy urodzinowej dla mamy <br>
|
|
||||||
|
|
||||||
*user:* Tak.
|
|
||||||
|
|
||||||
*system:* Spotkanie zostało pomyślnie odwołane.
|
|
||||||
|
|
||||||
|
|
||||||
Zadanie 4: Podgląd spotkań względem daty
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
*system:* Witam w twoim prywatnym asystencie kalendarza spotkań.
|
|
||||||
|
|
||||||
*user:* Dzień dobry, chciałbym sprawdzić jutrzejsze spotkania.
|
|
||||||
|
|
||||||
*system:* Na jutro zaplanowano następujące spotkania: <br>
|
|
||||||
Data: Poniedziałek 29.03.2021 14:00-15:00 <br>
|
|
||||||
Miejsce: Sala konferencyjna w biurze <br>
|
|
||||||
Spotkanie z: Jan Nowak - Prezes firmy ABC <br>
|
|
||||||
------------------------------------------------------------------ <br>
|
|
||||||
Data: Poniedziałek 29.03.2021 16:00-17:15 <br>
|
|
||||||
Miejsce: Dom <br>
|
|
||||||
Spotkanie z: Kacper (Brat) <br>
|
|
||||||
Opis: Zaplanowanie imprezy urodzinowej dla mamy <br>
|
|
||||||
|
|
||||||
Zadanie 5: Podgląd spotkań względem umówionych osób
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
*system:* Witam w twoim prywatnym asystencie kalendarza spotkań.
|
|
||||||
|
|
||||||
*user:* Dzień dobry, chciałbym sprawdzić spotkania z Janem Nowakiem - Prezesem firmy ABC.
|
|
||||||
|
|
||||||
*system:* Z Janem Nowakiem - Prezesm firmy ABC umówione są następujące spotkania: <br>
|
|
||||||
Data: Poniedziałek 29.03.2021 14:00-15:00 <br>
|
|
||||||
Miejsce: Sala konferencyjna w biurze <br>
|
|
||||||
Spotkanie z: Jan Nowak - Prezes firmy ABC <br>
|
|
||||||
------------------------------------------------------------------ <br>
|
|
||||||
Data: Czwartek 1.04.2021 12:00-14:00 <br>
|
|
||||||
Miejsce: Firma ABC <br>
|
|
||||||
Spotkanie z: Jan Nowak - Prezes firmy ABC <br>
|
|
||||||
Opis: Omówienie warunków współpracy firm w ramach projektu XYZ. <br>
|
|
||||||
|
|
||||||
|
|
||||||
Zadanie 6: Podgląd spotkań względem miejsca
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
*system:* Witam w twoim prywatnym asystencie kalendarza spotkań.
|
|
||||||
|
|
||||||
*user:* Dzień dobry, chciałbym sprawdzić spotkania w moim domu.
|
|
||||||
|
|
||||||
*system:* W twoim domu umówione są następujące spotkania: <br>
|
|
||||||
Data: Poniedziałek 29.03.2021 16:00-17:15 <br>
|
|
||||||
Miejsce: Dom <br>
|
|
||||||
Spotkanie z: Kacper (Brat) <br>
|
|
||||||
Opis: Zaplanowanie imprezy urodzinowej dla mamy <br>
|
|
||||||
------------------------------------------------------------------ <br>
|
|
||||||
Data: Sobota 10.04.2021 11:00-18:00 <br>
|
|
||||||
Miejsce: Dom <br>
|
|
||||||
Spotkanie z: Rodzina <br>
|
|
||||||
Opis: Imprezy urodzinowa dla mamy <br>
|
|
||||||
|
|
||||||
|
|
||||||
Zadanie 7: Podgląd najbliższych spotkań
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
*system:* Witam w twoim prywatnym asystencie kalendarza spotkań.
|
|
||||||
|
|
||||||
*user:* Dzień dobry, chciałbym sprawdzić najbliższe spotkania.
|
|
||||||
|
|
||||||
*system:* Najbliższe spotkanie to: <br>
|
|
||||||
Data: Niedziela 28.03.2021 19:00 <br>
|
|
||||||
Miejsce: Brak <br>
|
|
||||||
Spotkanie z: Marek <br>
|
|
||||||
Opis: Spotkanie towarzyskie <br>
|
|
||||||
Kolejne spotkanie to: <br>
|
|
||||||
Data: Poniedziałek 29.03.2021 14:00-15:00 <br>
|
|
||||||
Miejsce: Sala konferencyjna w biurze <br>
|
|
||||||
Spotkanie z: Jan Nowak - Prezes firmy ABC <br>
|
|
||||||
|
|
||||||
Zadanie 8: Podgląd wolnych terminow
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
*system:* Witam w twoim prywatnym asystencie kalendarza spotkań.
|
|
||||||
|
|
||||||
*user:* Dzień dobry, chciałbym sprawdzić najbliższe wolne terminy.
|
|
||||||
|
|
||||||
*system:* Najbliższe wolne terminy to: <br>
|
|
||||||
Niedziela 28.03.2021: <br>
|
|
||||||
- 12:00-19:00 <br>
|
|
||||||
Poniedziałek 29.03.2021: <br>
|
|
||||||
- 00:00-14:00 <br>
|
|
||||||
- 15:00-16:00 <br>
|
|
||||||
- 17:15-24:00 <br>
|
|
43
test_nlu.py
43
test_nlu.py
@ -1,43 +0,0 @@
|
|||||||
import os
|
|
||||||
import pandas as pd
|
|
||||||
import numpy as np
|
|
||||||
from flair.data import Sentence, Token
|
|
||||||
from flair.datasets import SentenceDataset
|
|
||||||
from flair.models import SequenceTagger
|
|
||||||
|
|
||||||
def conllu2flair(sentences, label=None):
|
|
||||||
fsentences = []
|
|
||||||
for sentence in sentences:
|
|
||||||
fsentence = Sentence()
|
|
||||||
for token in sentence:
|
|
||||||
ftoken = Token(token['form'])
|
|
||||||
if label:
|
|
||||||
ftoken.add_tag(label, token[label])
|
|
||||||
fsentence.add_token(ftoken)
|
|
||||||
fsentences.append(fsentence)
|
|
||||||
return SentenceDataset(fsentences)
|
|
||||||
|
|
||||||
def predict(frame_model, sentence):
|
|
||||||
csentence = [{'form': word} for word in sentence.split()]
|
|
||||||
fsentence = conllu2flair([csentence])[0]
|
|
||||||
frame_model.predict(fsentence)
|
|
||||||
possible_intents = {}
|
|
||||||
for token in fsentence:
|
|
||||||
for intent in token.annotation_layers["frame"]:
|
|
||||||
if(intent.value in possible_intents):
|
|
||||||
possible_intents[intent.value] += intent.score
|
|
||||||
else:
|
|
||||||
possible_intents[intent.value] = intent.score
|
|
||||||
return max(possible_intents)
|
|
||||||
|
|
||||||
frame_model = SequenceTagger.load('frame-model/final-model.pt')
|
|
||||||
|
|
||||||
for file_name in os.listdir('data'):
|
|
||||||
df = pd.read_csv(f'data/{file_name}', sep='\t', names=['interlocutor', 'sentence', 'acts'])
|
|
||||||
df = df[df.interlocutor == 'user']
|
|
||||||
data = np.array(df)
|
|
||||||
|
|
||||||
for row in data:
|
|
||||||
sentence = row[1]
|
|
||||||
predicted_intent = predict(frame_model, sentence)
|
|
||||||
print(sentence, predicted_intent)
|
|
@ -1,62 +0,0 @@
|
|||||||
from conllu import parse_incr
|
|
||||||
from tabulate import tabulate
|
|
||||||
from flair.data import Corpus, Sentence, Token
|
|
||||||
from flair.datasets import SentenceDataset
|
|
||||||
from flair.embeddings import StackedEmbeddings
|
|
||||||
from flair.embeddings import WordEmbeddings
|
|
||||||
from flair.embeddings import CharacterEmbeddings
|
|
||||||
from flair.embeddings import FlairEmbeddings
|
|
||||||
from flair.models import SequenceTagger
|
|
||||||
from flair.trainers import ModelTrainer
|
|
||||||
|
|
||||||
# skrypt do trenowania modelu NLU dla intentów
|
|
||||||
|
|
||||||
# determinizacja obliczeń
|
|
||||||
import random
|
|
||||||
import torch
|
|
||||||
random.seed(42)
|
|
||||||
torch.manual_seed(42)
|
|
||||||
|
|
||||||
if torch.cuda.is_available():
|
|
||||||
torch.cuda.manual_seed(0)
|
|
||||||
torch.cuda.manual_seed_all(0)
|
|
||||||
torch.backends.cudnn.enabled = False
|
|
||||||
torch.backends.cudnn.benchmark = False
|
|
||||||
torch.backends.cudnn.deterministic = True
|
|
||||||
|
|
||||||
def nolabel2o(line, i):
|
|
||||||
return 'O' if line[i] == 'NoLabel' else line[i]
|
|
||||||
|
|
||||||
def conllu2flair(sentences, label=None):
|
|
||||||
fsentences = []
|
|
||||||
for sentence in sentences:
|
|
||||||
fsentence = Sentence()
|
|
||||||
for token in sentence:
|
|
||||||
ftoken = Token(token['form'])
|
|
||||||
if label:
|
|
||||||
ftoken.add_tag(label, token[label])
|
|
||||||
fsentence.add_token(ftoken)
|
|
||||||
fsentences.append(fsentence)
|
|
||||||
return SentenceDataset(fsentences)
|
|
||||||
|
|
||||||
fields = ['id', 'form', 'frame', 'slot']
|
|
||||||
|
|
||||||
with open('data/train.conllu', encoding='utf-8') as trainfile:
|
|
||||||
frame_trainset = list(parse_incr(trainfile, fields=fields, field_parsers={'frame': nolabel2o}))
|
|
||||||
|
|
||||||
frame_corpus = Corpus(train=conllu2flair(frame_trainset, 'frame'), test=conllu2flair(frame_trainset, 'frame'))
|
|
||||||
|
|
||||||
frame_tag_dictionary = frame_corpus.make_tag_dictionary(tag_type='frame')
|
|
||||||
|
|
||||||
embedding_types = [
|
|
||||||
WordEmbeddings('pl'),
|
|
||||||
FlairEmbeddings('pl-forward'),
|
|
||||||
FlairEmbeddings('pl-backward'),
|
|
||||||
CharacterEmbeddings(),
|
|
||||||
]
|
|
||||||
|
|
||||||
embeddings = StackedEmbeddings(embeddings=embedding_types)
|
|
||||||
frame_tagger = SequenceTagger(hidden_size=256, embeddings=embeddings, tag_dictionary=frame_tag_dictionary, tag_type='frame', use_crf=True)
|
|
||||||
|
|
||||||
frame_trainer = ModelTrainer(frame_tagger, frame_corpus)
|
|
||||||
frame_trainer.train('frame-model', learning_rate=0.1, mini_batch_size=24, max_epochs=100, train_with_dev=False)
|
|
@ -1,62 +0,0 @@
|
|||||||
from conllu import parse_incr
|
|
||||||
from tabulate import tabulate
|
|
||||||
from flair.data import Corpus, Sentence, Token
|
|
||||||
from flair.datasets import SentenceDataset
|
|
||||||
from flair.embeddings import StackedEmbeddings
|
|
||||||
from flair.embeddings import WordEmbeddings
|
|
||||||
from flair.embeddings import CharacterEmbeddings
|
|
||||||
from flair.embeddings import FlairEmbeddings
|
|
||||||
from flair.models import SequenceTagger
|
|
||||||
from flair.trainers import ModelTrainer
|
|
||||||
|
|
||||||
# skrypt do trenowania modelu NLU dla slotów
|
|
||||||
|
|
||||||
# determinizacja obliczeń
|
|
||||||
import random
|
|
||||||
import torch
|
|
||||||
random.seed(42)
|
|
||||||
torch.manual_seed(42)
|
|
||||||
|
|
||||||
if torch.cuda.is_available():
|
|
||||||
torch.cuda.manual_seed(0)
|
|
||||||
torch.cuda.manual_seed_all(0)
|
|
||||||
torch.backends.cudnn.enabled = False
|
|
||||||
torch.backends.cudnn.benchmark = False
|
|
||||||
torch.backends.cudnn.deterministic = True
|
|
||||||
|
|
||||||
def nolabel2o(line, i):
|
|
||||||
return 'O' if line[i] == 'NoLabel' else line[i]
|
|
||||||
|
|
||||||
def conllu2flair(sentences, label=None):
|
|
||||||
fsentences = []
|
|
||||||
for sentence in sentences:
|
|
||||||
fsentence = Sentence()
|
|
||||||
for token in sentence:
|
|
||||||
ftoken = Token(token['form'])
|
|
||||||
if label:
|
|
||||||
ftoken.add_tag(label, token[label])
|
|
||||||
fsentence.add_token(ftoken)
|
|
||||||
fsentences.append(fsentence)
|
|
||||||
return SentenceDataset(fsentences)
|
|
||||||
|
|
||||||
fields = ['id', 'form', 'frame', 'slot']
|
|
||||||
|
|
||||||
with open('data/train.conllu', encoding='utf-8') as trainfile:
|
|
||||||
slot_trainset = list(parse_incr(trainfile, fields=fields, field_parsers={'slot': nolabel2o}))
|
|
||||||
|
|
||||||
slot_corpus = Corpus(train=conllu2flair(slot_trainset, 'slot'), test=conllu2flair(slot_trainset, 'slot'))
|
|
||||||
|
|
||||||
slot_tag_dictionary = slot_corpus.make_tag_dictionary(tag_type='slot')
|
|
||||||
|
|
||||||
embedding_types = [
|
|
||||||
WordEmbeddings('pl'),
|
|
||||||
FlairEmbeddings('pl-forward'),
|
|
||||||
FlairEmbeddings('pl-backward'),
|
|
||||||
CharacterEmbeddings(),
|
|
||||||
]
|
|
||||||
|
|
||||||
embeddings = StackedEmbeddings(embeddings=embedding_types)
|
|
||||||
slot_tagger = SequenceTagger(hidden_size=256, embeddings=embeddings, tag_dictionary=slot_tag_dictionary, tag_type='slot', use_crf=True)
|
|
||||||
|
|
||||||
slot_trainer = ModelTrainer(slot_tagger, slot_corpus)
|
|
||||||
slot_trainer.train('slot-model', learning_rate=0.1, mini_batch_size=24, max_epochs=100, train_with_dev=False)
|
|
Loading…
Reference in New Issue
Block a user