def _answer_and_ent_in_context_at_k()

in kilt/eval_retrieval.py [0:0]


def _answer_and_ent_in_context_at_k(guess_item, gold_item, k):

    answers = eval_downstream.get_gold_answers(gold_item)
    titles = eval_downstream.get_gold_titles(gold_item)

    if "provenance" in guess_item["output"][0]:
        provenance = guess_item["output"][0]["provenance"]
        for i in range(0, min(k, len(provenance))):
            if "text" in provenance[i]:
                normalized_text = eval_downstream.normalize_answer(
                    provenance[i]["text"]
                )
                has_answer = False
                for a in answers:
                    if eval_downstream.normalize_answer(a) in normalized_text:
                        has_answer = True
                        break
                if has_answer:
                    for t in titles:
                        if eval_downstream.normalize_answer(t) in normalized_text:
                            return 1

    return 0