Example #1
0
 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})
Example #2
0
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
Example #3
0
 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])
Example #4
0
 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])
Example #5
0
def is_verb(w, tag):
    return tag.startswith('VB') and vb.conjugate(w) not in banned_verbs