Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
 def setUp(self):
     self.api = HotPepperGourmetAPI()
Ejemplo n.º 5
0
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)
 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)