in dvd_generation/filters/dialogue_filters.py [0:0]
def sample_prior_unique_object(dialogue, template, cutoff): #, turn_dependencies, metadata):
if len(dialogue)==0:
template['prior_unique_obj'] = -1
return
last_turn = dialogue[-1]
prior_state = last_turn['state']
last_template = last_turn['template']
prior_obj = last_template['unique_obj']
all_prior_objs = last_template['all_unique_objs']
prior_ans_obj = last_template['answer_obj']
used_objects = template['used_objects']
# Case 1: previous dialogue turn is an exist (e.g. Is there...) or count (e.g. How many...)
if prior_ans_obj is not None:
if template['sampled_ans_object']!=-1:
template['prior_unique_obj'] = template['sampled_ans_object']
template['prior_unique_obj_attr'] = template['sampled_ans_object_attr']
return
# ask further about resulting object if count question result is 1/ exist question result is True
# else, there is no prior unique obj
template['prior_unique_obj'], template['prior_unique_obj_attr'], _ = find_unique_answer_obj(
last_turn, prior_state, prior_ans_obj, used_objects)
return
# Case 2: the only unique object came from temporal dependency
if prior_obj is None and len(all_prior_objs)==0:
# temporal phrase is not during/before/after/among
if last_template['interval_type']!='none' and 'none' in last_turn['turn_dependencies']['temporal']:
e1, e2 = last_template['used_periods'][-1]
# interval that involves more than one object
if e1 is not None and e2 != cutoff and e1[0] != e2[0]:
template['prior_unique_obj'] = -1
return
if e1 is not None:
template['prior_unique_obj'], template['prior_unique_obj_attr'] = e1[0], used_objects[e1[0]]
return
elif e2 != cutoff:
template['prior_unique_obj'], template['prior_unique_obj_attr'] = e2[0], used_objects[e2[0]]
return
else:
template['prior_unique_obj'] = -1
return
else:
template['prior_unique_obj'] = -1
return
if prior_obj is None:
template['prior_unique_obj'] = -1
return
# Only one prior object (nonambiguous) from the last turn
template['prior_unique_obj'], template['prior_unique_obj_attr'] = find_unique_obj(
last_turn, prior_state, prior_obj, used_objects)
return