e@1: import clausiepy as cp e@1: quote="Crows are feeding on rubbish at a garbage dump." e@1: e@1: # Extract clauses e@1: clauses = cp.clausie(quote) e@1: e@1: # Extract propositions e@1: propositions = cp.extract_propositions(clauses) e@1: e@1: queries = [] e@1: e@1: # For every proposition, remove auxiliary verb and construct queries e@1: # (see paper) e@1: e@1: keys = ('subject', 'verb', 'indirect object', 'direct object', 'complement', 'adverb') e@1: e@1: queries = [] e@1: e@1: for prop in propositions: e@1: e@1: # Normal queries based on propositions with verbs e@1: for L in range(len(keys), 1, -1): e@1: chosen_keys = keys[:L] e@1: propo = {} e@1: for key in chosen_keys: e@1: if key in prop: e@1: propo[key] = prop[key] e@1: p0 = cp.proposition_text(propo, chosen_keys) e@1: prop_text = " ".join(" ".join([p1.text for p1 in p if p1.dep_ not in ['aux', 'det']]) for p in p0 if len(p) > 0) e@1: if len(prop_text) > 0 and prop_text not in queries: e@1: queries.append(prop_text) e@1: e@1: # Subjects and objects independently e@1: p0 = cp.proposition_text(prop, ['subject']) e@1: prop_text = " ".join(" ".join([p1.text for p1 in p if p1.dep_ not in ['aux', 'det']]) for p in p0 if len(p) > 0) e@1: if len(prop_text) > 0 and prop_text not in queries: e@1: queries.append(prop_text) e@1: e@1: p0 = cp.proposition_text(prop, ['indirect object']) e@1: prop_text = " ".join(" ".join([p1.text for p1 in p if p1.dep_ not in ['aux', 'det', 'prep']]) for p in p0 if len(p) > 0) e@1: if len(prop_text) > 0 and prop_text not in queries: e@1: queries.append(prop_text) e@1: e@1: p0 = cp.proposition_text(prop, ['direct object']) e@1: prop_text = " ".join(" ".join([p1.text for p1 in p if p1.dep_ not in ['aux', 'det', 'prep']]) for p in p0 if len(p) > 0) e@1: if len(prop_text) > 0 and prop_text not in queries: e@1: queries.append(prop_text) e@1: e@1: # Adverb e@1: p0 = cp.proposition_text(prop, ['adverb']) e@1: prop_text = " ".join(" ".join([p1.text for p1 in p if p1.dep_ not in ['aux', 'det', 'prep']]) for p in p0 if len(p) > 0) e@1: if len(prop_text) > 0 and prop_text not in queries: e@1: queries.append(prop_text) e@1: e@1: e@1: print("Queries:") e@1: for query in queries: e@1: print(query)