From 1a95c2ff88455c5c7d0a11d6a61331b4b7afff32 Mon Sep 17 00:00:00 2001 From: Alexis Nasr <alexis.nasr@lif.univ-mrs.fr> Date: Wed, 26 Oct 2016 12:29:22 -0400 Subject: [PATCH] did a horrible hack in parser to take car of sentences without ending punctuation --- maca_common/include/word.h | 2 +- maca_trans_parser/src/movements.c | 3 ++- .../src/simple_decoder_parser_arc_eager.c | 24 ++++++++++++++++++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/maca_common/include/word.h b/maca_common/include/word.h index 00e7808..b2fe6cf 100644 --- a/maca_common/include/word.h +++ b/maca_common/include/word.h @@ -52,7 +52,7 @@ #define word_set_cpos(w, val) (w)->wf_array[MCD_WF_CPOS] = (val) #define word_set_pos(w, val) (w)->wf_array[MCD_WF_POS] = (val) #define word_set_feats(w, val) (w)->wf_array[MCD_WF_FEATS] = (val) -#define word_set_gov(w, val) (w)->wf_array[MCD_WF_GOV] = (val) +#define word_set_gov(w, val) ((w)->wf_array[MCD_WF_GOV] = (val)) #define word_set_label(w, val) (w)->wf_array[MCD_WF_LABEL] = (val) #define word_set_stag(w, val) (w)->wf_array[MCD_WF_STAG] = (val) #define word_set_sent_seg(w, val) (w)->wf_array[MCD_WF_SENT_SEG] = (val) diff --git a/maca_trans_parser/src/movements.c b/maca_trans_parser/src/movements.c index a10e62b..64236b9 100644 --- a/maca_trans_parser/src/movements.c +++ b/maca_trans_parser/src/movements.c @@ -70,6 +70,7 @@ int movement_left_arc_undo(config *c) int movement_right_arc(config *c, int movement_code, int label) { if(stack_is_empty(config_get_stack(c))) return 0; + if(word_buffer_end(config_get_buffer(c))) return 0; word *gov = stack_top(config_get_stack(c)); word *dep = word_buffer_b0(config_get_buffer(c)); @@ -140,8 +141,8 @@ int movement_reduce_undo(config *c) int movement_root(config *c, int movement_code, int root_code) { + if(stack_is_empty(config_get_stack(c))) return 0; word *s0 = stack_top(config_get_stack(c)); - if(s0 == NULL) return 0; word_set_gov(s0, 0); word_set_label(s0, root_code); s0->is_root = 1; diff --git a/maca_trans_parser/src/simple_decoder_parser_arc_eager.c b/maca_trans_parser/src/simple_decoder_parser_arc_eager.c index 42fee6d..77fb88b 100644 --- a/maca_trans_parser/src/simple_decoder_parser_arc_eager.c +++ b/maca_trans_parser/src/simple_decoder_parser_arc_eager.c @@ -60,10 +60,24 @@ void simple_decoder_parser_arc_eager(context *ctx) mvt_type = movement_parser_type(mvt_code); mvt_label = movement_parser_label(mvt_code); + if(ctx->debug_mode){ + fprintf(stdout, "***********************************\n"); + config_print(stdout, c); + + vcode *vcode_array = feature_table_get_vcode_array(fv, ft); + + for(int i=0; i < 5; i++){ + printf("%d\t", i); + movement_parser_print(stdout, vcode_array[i].class_code, ctx->dico_labels); + printf("\t%.4f\n", vcode_array[i].score); + } + free(vcode_array); + } + if(ctx->trace_mode){ index = word_get_index(word_buffer_b0(config_get_buffer(c))); fprintf(stdout, "%d\t", index); - + stack_print(stdout, c->st); fprintf(stdout, "\t"); @@ -102,6 +116,14 @@ void simple_decoder_parser_arc_eager(context *ctx) movement_parser_shift(c); } } + + /* horrible hack */ + if(stack_nbelem(config_get_stack(c)) && (stack_top(config_get_stack(c)) == NULL)) + stack_pop(config_get_stack(c)); + + while(!stack_is_empty(config_get_stack(c)) && (stack_top(config_get_stack(c)) != NULL)) + movement_parser_root(c, root_label); + /* end of horrible hack */ if(!ctx->trace_mode) print_word_buffer(c, ctx->dico_labels); -- GitLab