def test_merge_slu_confnets(self): confnet1 = DialogueActConfusionNetwork() confnet1.add(0.7, DialogueActItem('hello')) confnet1.add(0.2, DialogueActItem('bye')) confnet2 = DialogueActConfusionNetwork() confnet2.add(0.6, DialogueActItem('hello')) confnet2.add(0.3, DialogueActItem('restart')) confnets = [[0.7, confnet1], [0.3, confnet2]] merged_confnets = merge_slu_confnets(confnets) correct_merged_confnet = DialogueActConfusionNetwork() correct_merged_confnet.add_merge(0.7 * 0.7, DialogueActItem('hello'), combine='add') correct_merged_confnet.add_merge(0.7 * 0.2, DialogueActItem('bye'), combine='add') correct_merged_confnet.add_merge(0.3 * 0.6, DialogueActItem('hello'), combine='add') correct_merged_confnet.add_merge(0.3 * 0.3, DialogueActItem('restart'), combine='add') s = [] s.append("") s.append("Merged confnets:") s.append(unicode(merged_confnets)) s.append("") s.append("Correct merged results:") s.append(unicode(correct_merged_confnet)) s.append("") self.assertEqual(unicode(merged_confnets), unicode(correct_merged_confnet))
def parse_nblist(self, obs, *args, **kwargs): """ Parses an observation featuring an utterance n-best list using the parse_1_best method. Arguments: obs -- a dictionary of observations :: observation type -> observed value where observation type is one of values for `obs_type' used in `ft_props', and observed value is the corresponding observed value for the input args -- further positional arguments that should be passed to the `parse_1_best' method call kwargs -- further keyword arguments that should be passed to the `parse_1_best' method call """ nblist = obs['utt_nbl'] if len(nblist) == 0: return DialogueActConfusionNetwork() obs_wo_nblist = copy.deepcopy(obs) del obs_wo_nblist['utt_nbl'] dacn_list = [] for prob, utt in nblist: if "_other_" == utt: dacn = DialogueActConfusionNetwork() dacn.add(1.0, DialogueActItem("other")) elif "_silence_" == utt: dacn = DialogueActConfusionNetwork() dacn.add(1.0, DialogueActItem("silence")) else: obs_wo_nblist['utt'] = utt dacn = self.parse_1_best(obs_wo_nblist, *args, **kwargs) dacn_list.append((prob, dacn)) dacn = merge_slu_confnets(dacn_list) dacn.prune() dacn.sort() return dacn
def test_merge_slu_confnets(self): confnet1 = DialogueActConfusionNetwork() confnet1.add(0.7, DialogueActItem('hello')) confnet1.add(0.2, DialogueActItem('bye')) confnet2 = DialogueActConfusionNetwork() confnet2.add(0.6, DialogueActItem('hello')) confnet2.add(0.3, DialogueActItem('restart')) confnets = [[0.7, confnet1], [0.3, confnet2]] merged_confnets = merge_slu_confnets(confnets) correct_merged_confnet = DialogueActConfusionNetwork() correct_merged_confnet.add_merge(0.7 * 0.7, DialogueActItem('hello'), combine='add') correct_merged_confnet.add_merge(0.7 * 0.2, DialogueActItem('bye'), combine='add') correct_merged_confnet.add_merge(0.3 * 0.6, DialogueActItem('hello'), combine='add') correct_merged_confnet.add_merge(0.3 * 0.3, DialogueActItem('restart'), combine='add') s = [] s.append("") s.append("Merged confnets:") s.append(unicode(merged_confnets)) s.append("") s.append("Correct merged results:") s.append(unicode(correct_merged_confnet)) s.append("") print '\n'.join(s) self.assertEqual(unicode(merged_confnets), unicode(correct_merged_confnet))