def entity_sorting()

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]