import ast def process_ast(string): return ast.literal_eval(string) def last_problem(doc): return process_ast(doc["problems"])[-1] def get_answer_option(problem): letter_to_num = {"A": 0, "B": 1, "C": 2, "D": 3} answer = letter_to_num[problem["answer"]] return problem["options"][answer] def doc_to_choice(doc): problem = last_problem(doc) choices = [problem["options"][i] for i in range(4)] return choices def doc_to_text(doc): text = "Article: " + doc["article"] + "\n\n" for problem in process_ast(doc["problems"])[:-1]: if problem["question"][-6:] == " _ .": text += problem["question"][-5:] + get_answer_option(problem) + "\n" else: question = "Question: " + problem["question"] + "\n" answer = "Answer: " + get_answer_option(problem) + "\n" text += question + answer text += last_problem(doc)["question"] return text def doc_to_target(doc): letter_to_num = {"A": 0, "B": 1, "C": 2, "D": 3} answer = letter_to_num[last_problem(doc)["answer"]] return answer