def test_select_doamin_2domain_no_answer_vs_noraml(self): domain_intend_dic = { 'Weather': EngineQueryResult(0, self.DETERMINISTIC_RESULT_PROB, 0, None, []), 'News': EngineQueryResult(100, self.DETERMINISTIC_RESULT_PROB, 0, None, []) } domain_selector = DomainSelector() result = domain_selector.select_doamin(self._get_domain_sorted_list(), domain_intend_dic, '', [], self._get_intend_dic()) self.assertEqual(result[0], 'News') self.assertEqual(result[1].intent_id, 100)
def test_select_doamin_2domain_noraml_vs_just_fit_para_fit_intent_para( self): domain_intend_dic = { 'Weather': EngineQueryResult(200, self.DETERMINISTIC_RESULT_PROB, 0, None, []), 'News': EngineQueryResult(1, self.DETERMINISTIC_RESULT_PROB, 0, None, []) } intent_selector = DomainSelector() result = intent_selector.select_doamin( self._get_domain_sorted_list(), domain_intend_dic, '', [self._get_IntentRecord(100, 0)], self._get_intend_dic()) self.assertEqual(result[0], 'Weather') self.assertEqual(result[1].intent_id, 200)
def get_mock_DomainSelector(): return_DomainSelector = DomainSelector() return_DomainSelector.select_doamin = Mock(return_value=( self.TEST_DOMAIN_NAME, EngineQueryResult(self.TEST_INTENT_ID, self.DETERMINISTIC_RESULT_PROB, self.TEST_TO_STATE_ID, {}, []))) return return_DomainSelector
def test_state_transition_no_parameter_state_transfer(self): from_state_id = 99 to_state_id = 100 engine_query_result = EngineQueryResult( self.TEST_INTENT_ID, self.DETERMINISTIC_RESULT_PROB, to_state_id, {}, []) intent_record = IntentRecord(self.TEST_INTENT_ID, from_state_id) intent = Intent(self.TEST_INTENT_ID, 'test_domain', from_state_id, { (from_state_id, None): 'test_reply'}, {}) context_manager = ContextManager() result = context_manager.state_transition( engine_query_result, intent_record, intent, False) self.assertEqual(self.TEST_INTENT_ID, result.intent_id) self.assertEqual(to_state_id, result.state_id)
def parse(self, user_input, state_id_list): ''' Description: 將使用者輸入的語音語句進行前處理、取出語句中的實體、進行utterance mapping Parameters: user_input:使用者語音語句 state_id_list: return: EngineQueryResult object ''' user_input = self._preprocess(user_input) entities = self._extract_entities(user_input) matched_intent_id, prob, transfer_to_state_id, intent_parameters = self._map_utterance( user_input, state_id_list, entities) return EngineQueryResult(matched_intent_id, prob, transfer_to_state_id, intent_parameters, entities)
def test_state_transition_multi_value_slot_less_than_max_but_stop(self): from_state_id=99 to_state_id=100 engine_query_result=EngineQueryResult( self.TEST_INTENT_ID, self.DETERMINISTIC_RESULT_PROB, to_state_id, {}, []) intent_record=IntentRecord(self.TEST_INTENT_ID, from_state_id) intent_record.user_paramenters={'test_para': ['test_value']} intent=Intent( self.TEST_INTENT_ID, 'test_domain', from_state_id, {(from_state_id, from_state_id): 'test_reply'}, [IntentParameter('test_keyword_name', 'test_para', 'ask', 2, 're_ask', None, 'string')]) context_manager=ContextManager() result=context_manager.state_transition( engine_query_result, intent_record, intent, True) self.assertEqual(self.TEST_INTENT_ID, result.intent_id) self.assertEqual(self.PARA_SATISFIED_STATE_ID, result.state_id)
def test_state_transition_None_to_parameter_not_satisfied(self): from_state_id = 99 to_state_id = 100 engine_query_result = EngineQueryResult( self.TEST_INTENT_ID, self.DETERMINISTIC_RESULT_PROB, to_state_id, {}, []) intent_record = IntentRecord(self.TEST_INTENT_ID, from_state_id) intent=Intent( self.TEST_INTENT_ID, 'test_domain', from_state_id, {(from_state_id, from_state_id): 'test_reply'}, [IntentParameter('test_keyword_name', 'test_para', 'ask', 1, None, None, 'string')]) context_manager=ContextManager() result=context_manager.state_transition( engine_query_result, intent_record, intent, False) self.assertEqual(self.TEST_INTENT_ID, result.intent_id) self.assertEqual(self.LACK_PARA_STATE_ID, result.state_id)