diff --git a/maca_trans_parser/src/feat_fct.c b/maca_trans_parser/src/feat_fct.c index ec84300011c7bbd72c51601c9cf1774455f8cfb4..fdb525e33391bb91f27236bcfe8b80c36ac69bf4 100644 --- a/maca_trans_parser/src/feat_fct.c +++ b/maca_trans_parser/src/feat_fct.c @@ -435,6 +435,26 @@ int ldep_s0r(void *input){ return -1; } +int ldep_s0p(void *input){ + config *c = input; + word *gov = stack_s0(config_get_stack((config *) c)); + int i; + word *dep; + int dist; + + if(gov){ + for(i=word_get_index(gov) - 1; i > 0 ; i--){ + dep = word_buffer_get_word_n(config_get_buffer((config *) c), i); + if(word_get_sent_seg(dep) == 1) return -1; + dist = word_get_index(gov) - i; + if(word_get_gov(dep) == dist){ + return word_get_pos(dep); + } + } + } + return -1; +} + int ldep_s1r(void *input){ config *c = input; word *gov = stack_s1(config_get_stack((config *) c)); @@ -455,6 +475,26 @@ int ldep_s1r(void *input){ return -1; } +int ldep_s1p(void *input){ + config *c = input; + word *gov = stack_s1(config_get_stack((config *) c)); + int i; + word *dep; + int dist; + + if(gov){ + for(i=word_get_index(gov) - 1; i > 0 ; i--){ + dep = word_buffer_get_word_n(config_get_buffer((config *) c), i); + if(word_get_sent_seg(dep) == 1) return -1; + dist = word_get_index(gov) - i; + if(word_get_gov(dep) == dist){ + return word_get_pos(dep); + } + } + } + return -1; +} + int ldep_b0r(void *input){ config *c = input; word *gov = word_buffer_b0(config_get_buffer((config *) c)); @@ -475,6 +515,26 @@ int ldep_b0r(void *input){ return -1; } +int ldep_b0p(void *input){ + config *c = input; + word *gov = word_buffer_b0(config_get_buffer((config *) c)); + int i; + word *dep; + int dist; + + if(gov){ + for(i=word_get_index(gov) - 1; i > 0 ; i--){ + dep = word_buffer_get_word_n(config_get_buffer((config *) c), i); + if(word_get_sent_seg(dep) == 1) return -1; + dist = word_get_index(gov) - i; + if(word_get_gov(dep) == dist){ + return word_get_pos(dep); + } + } + } + return -1; +} + int rdep_s0r(void *input){ config *c = input; word *gov = stack_s0(config_get_stack((config *) c)); @@ -495,6 +555,46 @@ int rdep_s0r(void *input){ return -1; } +int rdep_s0p(void *input){ + config *c = input; + word *gov = stack_s0(config_get_stack((config *) c)); + int i; + word *dep; + int dist; + + if(gov){ + for(i=word_get_index(gov) + 1; i < word_buffer_get_nbelem(config_get_buffer((config *) c)) ; i++){ + dep = word_buffer_get_word_n(config_get_buffer((config *) c), i); + if(i >= word_get_index(word_buffer_b0(config_get_buffer((config *) c)))) return -1; + dist = i - word_get_index(gov); + if(word_get_gov(dep) == - dist){ + return word_get_pos(dep); + } + } + } + return -1; +} + +int rdep_s1p(void *input){ + config *c = input; + word *gov = stack_s1(config_get_stack((config *) c)); + int i; + word *dep; + int dist; + + if(gov){ + for(i=word_get_index(gov) + 1; i < word_buffer_get_nbelem(config_get_buffer((config *) c)) ; i++){ + dep = word_buffer_get_word_n(config_get_buffer((config *) c), i); + if(i >= word_get_index(word_buffer_b0(config_get_buffer((config *) c)))) return -1; + dist = i - word_get_index(gov); + if(word_get_gov(dep) == - dist){ + return word_get_pos(dep); + } + } + } + return -1; +} + int rdep_s1r(void *input){ config *c = input; word *gov = stack_s1(config_get_stack((config *) c)); @@ -535,6 +635,26 @@ int rdep_b0r(void *input){ return -1; } +int rdep_b0p(void *input){ + config *c = input; + word *gov = word_buffer_b0(config_get_buffer((config *) c)); + int i; + word *dep; + int dist; + + if(gov){ + for(i=word_get_index(gov) + 1; i < word_buffer_get_nbelem(config_get_buffer((config *) c)) ; i++){ + dep = word_buffer_get_word_n(config_get_buffer((config *) c), i); + if(i >= word_get_index(word_buffer_b0(config_get_buffer((config *) c)))) return -1; + dist = i - word_get_index(gov); + if(word_get_gov(dep) == - dist){ + return word_get_pos(dep); + } + } + } + return -1; +} + int ndep_b0(void *input){ config *c = input; @@ -1118,10 +1238,16 @@ feat_lib *feat_lib_build(void) feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"ldep_s0r", ldep_s0r); feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"rdep_s0r", rdep_s0r); + feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"ldep_s0p", ldep_s0p); + feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"rdep_s0p", rdep_s0p); feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"ldep_s1r", ldep_s1r); feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"rdep_s1r", rdep_s1r); + feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"ldep_s1p", ldep_s1p); + feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"rdep_s1p", rdep_s1p); feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"ldep_b0r", ldep_b0r); feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"rdep_b0r", rdep_b0r); + feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"ldep_b0p", ldep_b0p); + feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"rdep_b0p", rdep_b0p); feat_lib_add(fl, FEAT_TYPE_INT_7, (char *)"ndep_b0", ndep_b0); feat_lib_add(fl, FEAT_TYPE_INT_7, (char *)"ndep_s0", ndep_s0); diff --git a/maca_trans_parser/src/feat_fct.h b/maca_trans_parser/src/feat_fct.h index 8650e6bf303f20529c7ebd0efb1d91720dc3cdea..35820ec8dee1b696493efeb76ec91de5dc47646d 100644 --- a/maca_trans_parser/src/feat_fct.h +++ b/maca_trans_parser/src/feat_fct.h @@ -423,12 +423,18 @@ int gs0p(void *input); int ldep_s0r(void *input); int rdep_s0r(void *input); +int ldep_s0p(void *input); +int rdep_s0p(void *input); int ldep_s1r(void *input); int rdep_s1r(void *input); +int ldep_s1p(void *input); +int rdep_s1p(void *input); int ndep_b0(void *input); int ndep_s0(void *input); int ldep_b0r(void *input); int rdep_b0r(void *input); +int ldep_b0p(void *input); +int rdep_b0p(void *input); /* distance features */ diff --git a/maca_trans_parser/src/maca_trans_tagparser_arc_eager_mcf2cff.c b/maca_trans_parser/src/maca_trans_tagparser_arc_eager_mcf2cff.c index ef78339a7f5b55edf273e2332e11d0a0d1205eed..11a3bb5879b72c9fd53b5cb124732a2f03b02a34 100644 --- a/maca_trans_parser/src/maca_trans_tagparser_arc_eager_mcf2cff.c +++ b/maca_trans_parser/src/maca_trans_tagparser_arc_eager_mcf2cff.c @@ -152,6 +152,7 @@ int main(int argc, char *argv[]) ctx = context_read_options(argc, argv); maca_trans_parser_mcf2cff_check_options(ctx); + ctx->features_model = feat_model_read(ctx->features_model_filename, feat_lib_build(), ctx->verbose); if(ctx->mode == TRAIN_MODE){