class DialogueManager(object): def __init__(self): self.dialogue_state = DialogueState() # self.dialogue_api = DocomoDialogAPI() def update_dialogue_state(self, dialogue_act): self.dialogue_state.update(dialogue_act) def select_action(self, dialogue_act): from copy import deepcopy sys_act = deepcopy(dialogue_act) # if dialogue_act['user_act_type'] == 'OTHER': # reply = self.dialogue_api.reply(dialogue_act['utt']) # sys_act['sys_act_type'] = 'CHAT' # sys_act['utt'] = reply # el if not self.dialogue_state.has('LOCATION'): print('setting LOCATION') sys_act['sys_act_type'] = 'REQUEST_LOCATION' elif not self.dialogue_state.has('GENRE'): print('setting GENRE') sys_act['sys_act_type'] = 'REQUEST_GENRE' else: self.gourmet_api = HotPepperGourmetAPI() area = self.dialogue_state.get_area() food = self.dialogue_state.get_food() restaurant = self.gourmet_api.search_restaurant(area=area, food=food) sys_act['sys_act_type'] = 'INFORM_RESTAURANT' sys_act['restaurant'] = restaurant # self.dialogue_state.clear() return sys_act
def select_action(self, dialogue_act): sys_act = deepcopy(dialogue_act) print("----------self.dialogue_state-----------------") print(self.dialogue_state) print(self.prev_dialog_state) # if self.init_flag == True: # self.init_flag = False # if not self.dialogue_state.has('LOCATION') and not self.dialogue_state.has('GENRE') and not self.dialogue_state.has('MAXIMUM_AMOUNT'): # sys_act['sys_act_type'] = 'REPEAT_QUESTION' # self.prev_dialog_state = self.dialogue_state # return sys_act # 前と同じなら、質問が理解できてない if self.dialogue_state.get_data_by_key( 'LOCATION') == self.prev_dialog_state.get_data_by_key( 'LOCATION') and self.dialogue_state.get_data_by_key( 'GENRE') == self.prev_dialog_state.get_data_by_key( 'GENRE') and self.dialogue_state.get_data_by_key( 'MAXIMUM_AMOUNT' ) == self.prev_dialog_state.get_data_by_key( 'MAXIMUM_AMOUNT'): print("repeat") sys_act['sys_act_type'] = 'REPEAT_QUESTION' # self.prev_dialog_state = self.dialogue_state return sys_act if not self.dialogue_state.has('LOCATION'): sys_act['sys_act_type'] = 'REQUEST_LOCATION' elif not self.dialogue_state.has('GENRE'): sys_act['sys_act_type'] = 'REQUEST_GENRE' elif not self.dialogue_state.has('MAXIMUM_AMOUNT'): sys_act['sys_act_type'] = 'REQUEST_BUDGET' else: api = HotPepperGourmetAPI() area = self.dialogue_state.get_area() food = self.dialogue_state.get_food() budget = self.dialogue_state.get_budget() restaurant = api.search_restaurant(area=area, food=food, budget=budget) sys_act['sys_act_type'] = 'INFORM_RESTAURANT' sys_act['restaurant'] = restaurant self.prev_dialog_state = deepcopy(self.dialogue_state) return sys_act
def select_action(self, dialogue_act): from copy import deepcopy sys_act = deepcopy(dialogue_act) if not self.dialogue_state.has('LOCATION'): sys_act['sys_act_type'] = 'REQUEST_LOCATION' elif not self.dialogue_state.has('GENRE'): sys_act['sys_act_type'] = 'REQUEST_GENRE' elif not self.dialogue_state.has('MAXIMUM_AMOUNT'): sys_act['sys_act_type'] = 'REQUEST_BUDGET' else: api = HotPepperGourmetAPI() area = self.dialogue_state.get_area() food = self.dialogue_state.get_food() budget = self.dialogue_state.get_budget() restaurant = api.search_restaurant(area=area, food=food,budget=budget) sys_act['sys_act_type'] = 'INFORM_RESTAURANT' sys_act['restaurant'] = restaurant return sys_act
def setUp(self): self.api = HotPepperGourmetAPI()
class HotPepperAPITest(unittest.TestCase): def setUp(self): self.api = HotPepperGourmetAPI() def tearDown(self): pass def test_areaname_to_areacode(self): area_code = self.api.area_name2area_code(keyword='西新宿') self.assertEqual(area_code, 'XA02') try: area_code = self.api.area_name2area_code(keyword='バビロニア') except AreaNotFoundException: self.assertEqual(True, True) def test_foodname_to_foodcode(self): food_code = self.api.food_name2food_code(keyword='ラーメン') self.assertEqual(food_code, 'R038') #food_code = self.api.food_name2food_code(keyword='テラワロス') def test_search_budget(self): budget_code = self.api.to_budget_code('2000') self.assertEqual(budget_code, 'B001') budget_code = self.api.to_budget_code('3000') self.assertEqual(budget_code, 'B002') budget_code = self.api.to_budget_code('4000') self.assertEqual(budget_code, 'B003') budget_code = self.api.to_budget_code('5000') self.assertEqual(budget_code, 'B008') budget_code = self.api.to_budget_code('7000') self.assertEqual(budget_code, 'B004') budget_code = self.api.to_budget_code('10000') self.assertEqual(budget_code, 'B005') budget_code = self.api.to_budget_code('10001') self.assertEqual(budget_code, 'B006') def test_search_restaurant(self): response = self.api.search_restaurant(area='西新宿', food='ラーメン', budget='1000') import pprint pprint.pprint(response)