in entity_linking.py [0:0]
def entity_sorting(v, distinct_slot_values, method_name, threshold=None, slot_name=None):
if method_name == 'bijaccard':
distance = bi_jaccard_distance
elif method_name == 'edit_distance':
distance = leven_distance # Case in-sensitive
elif method_name == 'roberta_mnli':
distance = roberta_mnli_distance
elif method_name == 'average_three':
distance = average_three_distance
elif method_name == 'exact':
if v in distinct_slot_values:
return [v, None]
else:
return [None]
elif method_name == 'exact_nocase':
for e in distinct_slot_values:
if e.lower() == v.lower():
return [e, None]
return [None]
else:
raise Exception(f'Invalid entity linking method name: {method_name}')
candidate = get_ranking(v, distinct_slot_values, distance)
if threshold is None:
final_candidate = candidate + [(None, 1e10)]
return [p[0] for p in final_candidate]
else:
final_candidate = []
for idx, p in enumerate(candidate):
if p[1] <= threshold:
final_candidate.append(p)
else:
final_candidate.append((None, threshold))
final_candidate = final_candidate + candidate[idx:]
break
return [p[0] for p in final_candidate]