def enum_neg_instance_diff_review() -> Iterable[Tuple[Claim, Claim, str]]: reviews: List[Review] = load_parsed() for r1, r2 in combinations(reviews, 2): for c1 in r1.claim_list: for c2 in r2.claim_list: yield c1, c2, "{}/{} from different reviews".format( c1.assertion, c2.assertion)
def enum_true_instance(sel_per_review=0) -> Iterable[Tuple[Claim, Claim, str]]: reviews: List[Review] = load_parsed() def rank_fn(e = Tuple[Claim, Claim]): claim1, claim2 = e return num_common_terms(claim1.text, claim2.text) for review in reviews: pair_per_review = [] yes_claim_list = lfilter(lambda c: c.assertion == "YS", review.claim_list) no_claim_list = lfilter(lambda c: c.assertion == "NO", review.claim_list) for yes_claim in yes_claim_list: for no_claim in no_claim_list: e = yes_claim, no_claim pair_per_review.append(e) pair_per_review.sort(key=rank_fn, reverse=True) if sel_per_review == 0: pairs = pair_per_review else: pairs = pair_per_review[:sel_per_review] for claim1, claim2 in pairs: yield claim1, claim2
def claim_text_to_info() -> Dict[str, Dict]: out_d = {} reviews: List[Review] = load_parsed() for review in reviews: for claim in review.claim_list: out_d[claim.text] = { 'assertion': claim.assertion, 'question': claim.question, 'pmid': claim.pmid } return out_d
def enum_true_instance() -> Iterable[Tuple[Claim, Claim, str]]: reviews: List[Review] = load_parsed() for review in reviews: yes_claim_list = lfilter(lambda c: c.assertion == "YS", review.claim_list) no_claim_list = lfilter(lambda c: c.assertion == "NO", review.claim_list) for yes_claim in yes_claim_list: for no_claim in no_claim_list: yield yes_claim, no_claim, "Yes/No from a same review" yield no_claim, yes_claim, "No/Yes from a same review"
def run_trivial_solution(): reviews: List[Review] = load_parsed() review0: Review = reviews[0] def solve_review(review: Review): question = review.claim_list[0].question claim_texts = list([c.text for c in review.claim_list]) print("Question:", question) solve(question, claim_texts) solve_review(review0)
def enum_neg_instance2() -> Iterable[Tuple[Claim, Claim, str]]: reviews: List[Review] = load_parsed() for review in reviews: yes_claim_list = lfilter(lambda c: c.assertion == "YS", review.claim_list) no_claim_list = lfilter(lambda c: c.assertion == "NO", review.claim_list) for c1, c2 in combinations(yes_claim_list, 2): yield c1, c2, "{}/{} from a same review".format( c1.assertion, c2.assertion) for c1, c2 in combinations(no_claim_list, 2): yield c1, c2, "{}/{} from a same review".format( c1.assertion, c2.assertion)
def run_trivial_solution_pair(): reviews: List[Review] = load_parsed() review0: Review = reviews[0] def solve_review(review: Review): question = review.claim_list[0].question claim_texts = list([c.text for c in review.claim_list]) claim_pairs = [(claim_texts[3], claim_texts[1])] # for idx in range(len(claim_texts)-1): # c1 = claim_texts[idx] # c2 = claim_texts[idx+1] # claim_pairs.append((c1, c2)) pairwise(claim_pairs) solve_review(review0)
def main(): reviews: List[Review] = load_parsed() review0: Review = reviews[0] is_first = True for idx, claim in enumerate(review0.claim_list): doc: Abstract = load_doc_parsed(claim.pmid) if is_first: print("Question (query):", claim.question) is_first = False print("PMID:", claim.pmid) print("Claim {}:".format(idx), claim.text) if claim.assertion == "YS": print("YES") else: print(claim.assertion) print("Full abstract:") for text in doc.text_list: print("[{}] {}".format(text.label, text.text)) print()