def print_template(synset): value = {} verb = synset_name(synset) for tense in verbs.TENSES: con = verbs.conjugate(verb, tense) if con: value['actual'] = con value['time'] = tense[0] value['pov'] = tense[1] value['num'] = tense[2] value['dir'] = tense[3] value['prog'] = tense[4] print template.render({'value': value})
def rephrase_question(q_tagged, debug=False): score_mod = 1. q_tokens = [t[0] for t in q_tagged] if q_tagged and q_tagged[0][1] == config.unknown_tag: return q_tokens, score_mod qws = [ i for i in range(len(q_tokens)) if q_tokens[i].lower() in question_words_single ] if not qws: if q_tokens[-1] in '!?.': q_tokens = q_tokens[:-1] return q_tokens, score_mod qw = min(qws) if q_tokens[-1] not in '!?.': q_tokens = q_tokens + ['?'] q_tagged.append((u'?', u'.')) query_beg, query = q_tokens[:qw + 1], q_tokens[qw + 1:] pos = q_tagged[qw + 1:] verbs = [i for i in range(len(query)) if pos[i][1][:2] in ['VB', 'MD']] if not verbs: return query_beg + query[:-1], score_mod verb_idx = min(verbs) nouns = [ i for i in range(verb_idx + 1, len(query)) if pos[i][1].startswith('NN') ] if not nouns: return query_beg + query[:-1], score_mod tree = parse_tree(pos[verb_idx:]) noun_phrase = list(zip(*get_noun_phrases(tree).next())[0]) verb_insert_idx = min(i for i in range(len(query)) if query[i:i + len(noun_phrase)] == noun_phrase) verb_insert_idx += len(noun_phrase) verb = query[verb_idx] if pos[verb_idx][1] != 'MD' and vb.conjugate(verb) not in aux_vbs: return query_beg + query[:-1], score_mod if verb == 'do': query_new = query[:verb_idx] + query[verb_idx + 1:-1] elif verb in ['does', 'did']: verb_to_correct_idx = min([i for i in verbs if i >= verb_insert_idx] or [None]) if verb_to_correct_idx is None: query_new = query[:-1] else: v = query[verb_to_correct_idx] corrected = vb.conjugate( v, '3sg') if verb == 'does' else vb.conjugate(v, 'ppl') query_new = query[:verb_idx] + \ query[verb_idx+1:verb_to_correct_idx] + \ [corrected] + query[verb_to_correct_idx+1:-1] else: query_new = query[:verb_idx] + \ query[verb_idx+1:verb_insert_idx] + \ [verb] + query[verb_insert_idx:-1] if debug: print(q_tokens, qw, verb_insert_idx, query) # penalty for questions better suited for SimpleWikiTalker if ' '.join(q_tokens[qw:qw+2]).lower() in swt_starts and \ verb_insert_idx == len(query) - 1: print("SQUAD: penalizing swt start") score_mod = SWT_QUESTION_PENALTY return query_beg + query_new, score_mod
def makeSameTense(self, w1, w2): tense = count([i[0] for i in tenses(w2)], stopwords=True) tense = sorted(tense, key=operator.itemgetter(2)) return verbs.conjugate(w1, tense[0])
def is_verb(w, tag): return tag.startswith('VB') and vb.conjugate(w) not in banned_verbs