def __init__(self, answer, i): Feature.set_type(self, clas + rel) Feature.set_name(self, 'Antonyms') q = answer.q sentence = answer.sources[i].sentence q_verb = q.root_verb[0].lemma_ doc = nlp(sentence) s1 = [] for s in doc.sents: s1.append(s) s_verb = s1[0].root.lemma_ sim = antonym(s_verb, q_verb) Feature.set_value(self, sim)
def __init__(self, answer, i): Feature.set_type(self, clas + rel) Feature.set_name(self, 'Verb similarity (WordNet)') q = answer.q sentence = answer.sources[i].sentence.split(':')[-1] q_verb = q.root_verb[0].lemma_ doc = nlp(sentence) s1 = list(doc.sents) s_verb = s1[0].root.lemma_ info = 'Qverb=%s, Sverb=%s' % (q_verb, s_verb) Feature.set_info(self, info) sim = max_sim(s_verb, q_verb) Feature.set_value(self, sim)
def __init__(self, answer, i): Feature.set_type(self, clas + rel) Feature.set_name(self, 'Verb similarity (spacy)') q = answer.q sentence = answer.sources[i].sentence.split(':')[-1] doc = nlp(sentence) s1 = list(doc.sents) for j in range(len(s1)): if not s1[j].text.isspace(): s_verbs = verbs(s1[j]) break q_root = q.root_verb[0] doc = nlp(q_root.lemma_) s1 = list(doc.sents) q_root = s1[0][0] if len(s_verbs ) == 0 or s_verbs[0].lemma_ == 'be' or q_root.lemma_ == 'be': Feature.set_value(self, 0.) return else: doc = nlp(s_verbs[0].lemma_) s1 = list(doc.sents) s_root = s1[0][0] q_vec = bow([q_root]) s_vec = bow([s_root]) info = '' for verb in [q_root]: info += 'Qverb=%s ' % (verb) for verb in [s_root]: info += 'Sverb=%s ' % (verb) Feature.set_info(self, info) sim = np.dot(q_vec, s_vec) / (np.linalg.norm(q_vec) * np.linalg.norm(s_vec)) if math.isnan(sim): sim = 0 Feature.set_value(self, sim)
def __init__(self, answer, i): Feature.set_type(self, clas + rel) Feature.set_name(self, 'Verb similarity (spacy)') q = answer.q sentence = answer.sources[i].sentence.split(':')[-1] doc = nlp(sentence) s1 = list(doc.sents) for j in range(len(s1)): if not s1[j].text.isspace(): s_verbs = verbs(s1[j]) break q_root = q.root_verb[0] doc = nlp(q_root.lemma_) s1 = list(doc.sents) q_root = s1[0][0] if len(s_verbs) == 0 or s_verbs[0].lemma_ == 'be' or q_root.lemma_ == 'be': Feature.set_value(self, 0.) return else: doc = nlp(s_verbs[0].lemma_) s1 = list(doc.sents) s_root = s1[0][0] q_vec = bow([q_root]) s_vec = bow([s_root]) info = '' for verb in [q_root]: info += 'Qverb=%s ' % (verb) for verb in [s_root]: info += 'Sverb=%s ' % (verb) Feature.set_info(self, info) sim = np.dot(q_vec, s_vec) / (np.linalg.norm(q_vec) * np.linalg.norm(s_vec)) if math.isnan(sim): sim = 0 Feature.set_value(self, sim)
def __init__(self, answer, i): Feature.set_type(self, clas + rel) Feature.set_name(self, 'Subject match') sentence = answer.sources[i].sentence.split(':')[-1] q = answer.q.root_verb[0] qsubj = get_subj(q) ssubj = get_subj(list(nlp(sentence).sents)[0].root) if qsubj is None or ssubj is None: Feature.set_value(self, 0.) return info = 'Qsubject=%s, Ssubject=%s' % (qsubj.text, ssubj.text) Feature.set_info(self, info) if qsubj.lower_ in ssubj.lower_ or ssubj.lower_ in qsubj.lower_: Feature.set_value(self, 1.) else: Feature.set_value(self, 0.)