def _all_features(arg_clauses, clause_index, parse_dict):
    # load dict
    dict_lowercase_verbs = Implicit_arg1_dict().dict_lowercase_verbs
    dict_lemma_verbs = Implicit_arg1_dict().dict_lemma_verbs
    dict_curr_first = Implicit_arg1_dict().dict_curr_first
    dict_curr_last = Implicit_arg1_dict().dict_curr_last
    dict_prev_last = Implicit_arg1_dict().dict_prev_last
    dict_next_first = Implicit_arg1_dict().dict_next_first
    dict_prev_last_curr_first = Implicit_arg1_dict().dict_prev_last_curr_first
    dict_curr_last_next_first = Implicit_arg1_dict().dict_curr_last_next_first
    dict_position = {"left": 1, "middle": 2, "right": 3}
    dict_prev_curr_CP_production_rule = Implicit_arg1_dict().dict_prev_curr_CP_production_rule
    dict_prev2_pos_lemma_verb = Implicit_arg1_dict().dict_prev2_pos_lemma_verb


    # feature
    lowercase_verbs_list = dict_util.get_curr_lowercased_verbs(arg_clauses, clause_index, parse_dict)
    lemma_verbs_list = dict_util.get_curr_lemma_verbs(arg_clauses, clause_index, parse_dict)

    curr_first = dict_util.get_curr_first(arg_clauses, clause_index, parse_dict)
    curr_last = dict_util.get_curr_last(arg_clauses, clause_index, parse_dict)
    prev_last = dict_util.get_prev_last(arg_clauses, clause_index, parse_dict)
    next_first = dict_util.get_next_first(arg_clauses, clause_index, parse_dict)
    prev_last_curr_first = "%s_%s" % (prev_last, curr_first)
    curr_last_next_first = "%s_%s" % (curr_last, next_first)

    # the number of words in curr clause
    clause_word_num = len(arg_clauses.clauses[clause_index][0])
    # the position of current clause
    position = dict_util.get_curr_position(arg_clauses, clause_index, parse_dict)
    # the arg label of current clause

    prev_curr_CP_production_rule = dict_util.get_prev_curr_CP_production_rule(arg_clauses, clause_index, parse_dict)

    prev2_pos_lemma_verb = dict_util.get_2prev_pos_lemma_verb(arg_clauses, clause_index, parse_dict)



    features = []
    features.append(get_feature_by_feat_list(dict_lowercase_verbs, lowercase_verbs_list))
    features.append(get_feature_by_feat_list(dict_lemma_verbs, lemma_verbs_list))

    features.append(get_feature_by_feat(dict_curr_first, curr_first))
    features.append(get_feature_by_feat(dict_curr_last, curr_last))
    features.append(get_feature_by_feat(dict_prev_last, prev_last))
    features.append(get_feature_by_feat(dict_next_first, next_first))
    features.append(get_feature_by_feat(dict_prev_last_curr_first, prev_last_curr_first))
    features.append(get_feature_by_feat(dict_curr_last_next_first, curr_last_next_first))
    features.append(get_feature_by_feat(dict_position, position))
    features.append(Feature("", 1, {"1": clause_word_num}))


    features.append(get_feature_by_feat(dict_prev2_pos_lemma_verb, prev2_pos_lemma_verb))


    ''' production rules '''
    features.append(get_feature_by_feat_list(dict_prev_curr_CP_production_rule, prev_curr_CP_production_rule))


    return util.mergeFeatures(features)
def next_first(arg_clauses, clause_index, parse_dict):
    # load dict
    dict_next_first = Implicit_arg1_dict().dict_next_first
    # feature
    next_first = dict_util.get_next_first(arg_clauses, clause_index, parse_dict)

    return get_feature_by_feat(dict_next_first, next_first)
def next_first(arg_clauses, clause_index, parse_dict):
    # load dict
    dict_next_first = Implicit_arg1_dict().dict_next_first
    # feature
    next_first = dict_util.get_next_first(arg_clauses, clause_index,
                                          parse_dict)

    return get_feature_by_feat(dict_next_first, next_first)
def _all_features(arg_clauses, clause_index, parse_dict):
    # load dict
    dict_lowercase_verbs = Implicit_arg1_dict().dict_lowercase_verbs
    dict_lemma_verbs = Implicit_arg1_dict().dict_lemma_verbs
    dict_curr_first = Implicit_arg1_dict().dict_curr_first
    dict_curr_last = Implicit_arg1_dict().dict_curr_last
    dict_prev_last = Implicit_arg1_dict().dict_prev_last
    dict_next_first = Implicit_arg1_dict().dict_next_first
    dict_prev_last_curr_first = Implicit_arg1_dict().dict_prev_last_curr_first
    dict_curr_last_next_first = Implicit_arg1_dict().dict_curr_last_next_first
    dict_position = {"left": 1, "middle": 2, "right": 3}
    dict_prev_curr_CP_production_rule = Implicit_arg1_dict(
    ).dict_prev_curr_CP_production_rule
    dict_prev2_pos_lemma_verb = Implicit_arg1_dict().dict_prev2_pos_lemma_verb

    # feature
    lowercase_verbs_list = dict_util.get_curr_lowercased_verbs(
        arg_clauses, clause_index, parse_dict)
    lemma_verbs_list = dict_util.get_curr_lemma_verbs(arg_clauses,
                                                      clause_index, parse_dict)

    curr_first = dict_util.get_curr_first(arg_clauses, clause_index,
                                          parse_dict)
    curr_last = dict_util.get_curr_last(arg_clauses, clause_index, parse_dict)
    prev_last = dict_util.get_prev_last(arg_clauses, clause_index, parse_dict)
    next_first = dict_util.get_next_first(arg_clauses, clause_index,
                                          parse_dict)
    prev_last_curr_first = "%s_%s" % (prev_last, curr_first)
    curr_last_next_first = "%s_%s" % (curr_last, next_first)

    # the number of words in curr clause
    clause_word_num = len(arg_clauses.clauses[clause_index][0])
    # the position of current clause
    position = dict_util.get_curr_position(arg_clauses, clause_index,
                                           parse_dict)
    # the arg label of current clause

    prev_curr_CP_production_rule = dict_util.get_prev_curr_CP_production_rule(
        arg_clauses, clause_index, parse_dict)

    prev2_pos_lemma_verb = dict_util.get_2prev_pos_lemma_verb(
        arg_clauses, clause_index, parse_dict)

    features = []
    features.append(
        get_feature_by_feat_list(dict_lowercase_verbs, lowercase_verbs_list))
    features.append(
        get_feature_by_feat_list(dict_lemma_verbs, lemma_verbs_list))

    features.append(get_feature_by_feat(dict_curr_first, curr_first))
    features.append(get_feature_by_feat(dict_curr_last, curr_last))
    features.append(get_feature_by_feat(dict_prev_last, prev_last))
    features.append(get_feature_by_feat(dict_next_first, next_first))
    features.append(
        get_feature_by_feat(dict_prev_last_curr_first, prev_last_curr_first))
    features.append(
        get_feature_by_feat(dict_curr_last_next_first, curr_last_next_first))
    features.append(get_feature_by_feat(dict_position, position))
    features.append(Feature("", 1, {"1": clause_word_num}))

    features.append(
        get_feature_by_feat(dict_prev2_pos_lemma_verb, prev2_pos_lemma_verb))
    ''' production rules '''
    features.append(
        get_feature_by_feat_list(dict_prev_curr_CP_production_rule,
                                 prev_curr_CP_production_rule))

    return util.mergeFeatures(features)