diff --git a/maca_trans_parser/src/feat_fct.c b/maca_trans_parser/src/feat_fct.c index e4e02de4707a7fac892195ded4ae4907929efcf3..72bed2af670c6e7dc906d55fb5d636df8f10f7a2 100644 --- a/maca_trans_parser/src/feat_fct.c +++ b/maca_trans_parser/src/feat_fct.c @@ -86,6 +86,9 @@ int s1X(void *c) {return word_get_X(stack_s1(config_get_stack((config *) c)));} int s1Y(void *c) {return word_get_Y(stack_s1(config_get_stack((config *) c)));} int s1Z(void *c) {return word_get_Z(stack_s1(config_get_stack((config *) c)));} +int s2g(void *c) {return (word_get_gov(stack_s2(config_get_stack((config *) c))) == WORD_INVALID_GOV) ? 0 : 1;} +int s2sf(void *c) {return word_get_label(stack_s2(config_get_stack((config *) c)));} + int s2f(void *c) {return word_get_form(stack_s2(config_get_stack((config *) c)));} int s2l(void *c) {return word_get_lemma(stack_s2(config_get_stack((config *) c)));} int s2c(void *c) {return word_get_cpos(stack_s2(config_get_stack((config *) c)));} @@ -924,6 +927,9 @@ feat_lib *feat_lib_build(void) feat_lib_add(fl, FEAT_TYPE_Y, (char *)"s1Y", s1Y); feat_lib_add(fl, FEAT_TYPE_Z, (char *)"s1Z", s1Z); + feat_lib_add(fl, FEAT_TYPE_LABEL, (char *)"s2sf", s2sf); + feat_lib_add(fl, FEAT_TYPE_INT, (char *)"s2g", s2g); + feat_lib_add(fl, FEAT_TYPE_FORM, (char *)"s2f", s2f); feat_lib_add(fl, FEAT_TYPE_LEMMA, (char *)"s2l", s2l); feat_lib_add(fl, FEAT_TYPE_CPOS, (char *)"s2c", s2c); diff --git a/maca_trans_parser/src/feat_fct.h b/maca_trans_parser/src/feat_fct.h index 35820ec8dee1b696493efeb76ec91de5dc47646d..8728a438e77e017516ca2b007abdbbfc34e4b9be 100644 --- a/maca_trans_parser/src/feat_fct.h +++ b/maca_trans_parser/src/feat_fct.h @@ -88,6 +88,9 @@ int s1Z(void *input); int s1r(void *input); +int s2g(void *input); +int s2sf(void *input); + int s2f(void *input); int s2l(void *input); int s2c(void *input); diff --git a/maca_trans_parser/src/maca_error_predictor_parser_arc_eager_mcf2cff.c b/maca_trans_parser/src/maca_error_predictor_parser_arc_eager_mcf2cff.c index 5f20451465b4568f282eb7dc086805e6466ab80d..2a90b3ce84f1561374bcd5102a338e33e9a9660d 100644 --- a/maca_trans_parser/src/maca_error_predictor_parser_arc_eager_mcf2cff.c +++ b/maca_trans_parser/src/maca_error_predictor_parser_arc_eager_mcf2cff.c @@ -47,9 +47,18 @@ void maca_error_predictor_parser_mcf2cff_check_options(context *ctx) } } -int config_is_equal_parser(config *c1, config *c2, int co1, int co2) // 3 for bm2p , 2 .. , 1 now, 0 no errors -{ - return ((co1==co2) ? 0 : 1); +int config_is_equal_parser(config *c1, config *c2, int co1, int co2) +{// (c1->history)->size > 0 && (c1->history)->size > 0 && ( + /*printf("COracle : \n"); + mvt_stack_print(stdout,c1->history); + printf("CPredicted : \n"); + mvt_stack_print(stdout,c2->history);*/ + //printf("Or : %d\nPred : %d\n",mvt_stack_0(c1->history)->type,mvt_stack_0(c2->history)->type); + + if (mvt_stack_0(c1->history)->type != mvt_stack_0(c2->history)->type) + return 1; + else + return 0; } int testoracle = 0; @@ -65,17 +74,18 @@ int test_pred() { return 0; } -void oracle_movement(int *mvt_code_oracle, char *mvt_type_oracle, int *mvt_label_oracle, config *config_oracle, word_buffer *ref_oracle, int root_label_oracle, context *ctx, feat_vec *fv_oracle, int *sentence_nb) +void oracle_movement(int *mvt_code_oracle, char *mvt_type_oracle, int *mvt_label_oracle, config *config_oracle, word_buffer *ref_oracle, int root_label_oracle, context *ctx, feat_vec *fv_decoder, int *sentence_nb) { if (!word_buffer_end(ref_oracle) && (*sentence_nb < ctx->sent_nb)) { + // decoder here before movement + config2feat_vec_cff(ctx->features_model, config_oracle, ctx->d_perceptron_features, fv_decoder, LOOKUP_MODE); + *mvt_code_oracle = oracle_parser_arc_eager(config_oracle, ref_oracle, root_label_oracle); *mvt_type_oracle = movement_parser_type(*mvt_code_oracle); *mvt_label_oracle = movement_parser_label(*mvt_code_oracle); test_or(); - - config2feat_vec_cff(ctx->features_model, config_oracle, ctx->d_perceptron_features, fv_oracle, LOOKUP_MODE); switch(*mvt_type_oracle){ case MVT_PARSER_EOS : @@ -107,11 +117,11 @@ void oracle_movement(int *mvt_code_oracle, char *mvt_type_oracle, int *mvt_label //printf("Oracle finishes its job\n"); } } -void print_cff(context *ctx, FILE *output_file, config *config_oracle, config *config_predicted, int mvt_code_oracle, int mvt_code_predicted, feat_vec *fv_predicted) +void print_cff(context *ctx, FILE *output_file, config *config_oracle, config *config_predicted, int mvt_code_oracle, int mvt_code_predicted, feat_vec *fv_error) { if(!ctx->debug_mode || output_file!=stdout) { fprintf(output_file, "%d", ((config_is_equal_parser(config_oracle, config_predicted, mvt_code_oracle, mvt_code_predicted)))); - feat_vec_print(output_file, fv_predicted); + feat_vec_print(output_file, fv_error); } } @@ -123,7 +133,7 @@ void generate_training_file_error(FILE *output_file, context *ctx) int mvt_code_oracle; char mvt_type_oracle; int mvt_label_oracle; - feat_vec *fv_oracle = feat_vec_new(feature_types_nb); + feat_vec *fv_decoder = feat_vec_new(feature_types_nb); int sentence_nb = 0; int root_label_oracle = dico_string2int(ctx->dico_labels, (char *) ctx->root_label); word_buffer *ref_oracle = word_buffer_load_mcf(ctx->input_filename, ctx->mcd_struct); @@ -131,8 +141,8 @@ void generate_training_file_error(FILE *output_file, context *ctx) // prediction config *config_predicted; - feat_vec *fv_predicted = feat_vec_new(feature_types_nb); - FILE *mcf_file_predicted = (ctx->input_filename)? myfopen(ctx->input_filename, "r") : stdin; + feat_vec *fv_error = feat_vec_new(feature_types_nb); + FILE *mcf_file_predicted = myfopen(ctx->input_filename, "r"); feature_table *ft = feature_table_load(ctx->perc_model_filename, ctx->verbose); int root_label_predicted; int mvt_code_predicted; @@ -159,7 +169,8 @@ void generate_training_file_error(FILE *output_file, context *ctx) root_label_predicted = dico_string2int(ctx->dico_labels, ctx->root_label); if(root_label_predicted == -1) root_label_predicted = 0; - config_predicted = config_new(mcf_file_predicted, ctx->mcd_struct, 5); + + config_predicted = config_new(mcf_file_predicted, ctx->mcd_struct_error, 5); config_oracle = config_new(mcf_file_oracle, mcd_struct_hyp, 5); @@ -167,8 +178,8 @@ void generate_training_file_error(FILE *output_file, context *ctx) //oracle - oracle_movement(&mvt_code_oracle, &mvt_type_oracle, &mvt_label_oracle, config_oracle, ref_oracle, root_label_oracle, ctx,fv_oracle, &sentence_nb); - + oracle_movement(&mvt_code_oracle, &mvt_type_oracle, &mvt_label_oracle, config_oracle, ref_oracle, root_label_oracle, ctx,fv_decoder, &sentence_nb); + // predicted /* forced EOS (the element on the top of the stack is eos, but the preceding movement is not MVT_PARSER_EOS */ @@ -180,28 +191,29 @@ void generate_training_file_error(FILE *output_file, context *ctx) movement_parser_eos(config_predicted); test_pred(); while(movement_parser_reduce(config_predicted)) { - oracle_movement(&mvt_code_oracle, &mvt_type_oracle, &mvt_label_oracle, config_oracle, ref_oracle, root_label_oracle, ctx,fv_oracle, &sentence_nb); + oracle_movement(&mvt_code_oracle, &mvt_type_oracle, &mvt_label_oracle, config_oracle, ref_oracle, root_label_oracle, ctx,fv_decoder, &sentence_nb); test_pred(); - //print_cff(ctx, output_file, config_oracle, config_predicted, mvt_code_oracle, mvt_code_predicted, fv_predicted); + //print_cff(ctx, output_file, config_oracle, config_predicted, mvt_code_oracle, mvt_code_predicted, fv_error); } while(movement_parser_root(config_predicted, root_label_predicted)) { - oracle_movement(&mvt_code_oracle, &mvt_type_oracle, &mvt_label_oracle, config_oracle, ref_oracle, root_label_oracle, ctx,fv_oracle, &sentence_nb); + oracle_movement(&mvt_code_oracle, &mvt_type_oracle, &mvt_label_oracle, config_oracle, ref_oracle, root_label_oracle, ctx,fv_decoder, &sentence_nb); test_pred(); - //print_cff(ctx, output_file, config_oracle, config_predicted, mvt_code_oracle, mvt_code_predicted, fv_predicted); + //print_cff(ctx, output_file, config_oracle, config_predicted, mvt_code_oracle, mvt_code_predicted, fv_error); } } /* normal behaviour, ask classifier what is the next movement to do and do it */ else{ - config2feat_vec_cff(ctx->features_model_error, config_predicted, ctx->d_perceptron_features_error, fv_predicted, TRAIN_MODE); - mvt_code_predicted = feature_table_argmax(fv_oracle, ft, &max); + mvt_code_predicted = feature_table_argmax(fv_decoder, ft, &max); mvt_type_predicted = movement_parser_type(mvt_code_predicted); mvt_label_predicted = movement_parser_label(mvt_code_predicted); + //printf("DEBUGGG, label predicted : %d\n",mvt_label_predicted); + if((mvt_type_predicted == MVT_PARSER_EOS) && (word_get_sent_seg(stack_top(config_get_stack(config_predicted))) == 0)){ - feature_table_argmax_1_2(fv_oracle, ft, &argmax1, &max1, &argmax2, &max2); + feature_table_argmax_1_2(fv_decoder, ft, &argmax1, &max1, &argmax2, &max2); mvt_code_predicted = argmax2; mvt_type_predicted = movement_parser_type(mvt_code_predicted); mvt_label_predicted = movement_parser_label(mvt_code_predicted); @@ -239,17 +251,19 @@ void generate_training_file_error(FILE *output_file, context *ctx) break; case MVT_PARSER_SHIFT: result = movement_parser_shift(config_predicted); + break; } if(result == 0){ + if(ctx->debug_mode) fprintf(stdout, "WARNING : movement cannot be executed doing a SHIFT instead !\n"); result = movement_parser_shift(config_predicted); - if(result == 0){ /* SHIFT failed no more words to read, let's get out of here ! */ + if(result == 0){ /* SHIFT failed no more words to read, let's get out of here ! */ if(ctx->debug_mode) fprintf(stdout, "WARNING : cannot exectue a SHIFT emptying stack !\n"); if (!stack_is_empty(config_get_stack(config_predicted))) { movement_parser_root(config_predicted, root_label_predicted); test_pred(); } while(!stack_is_empty(config_get_stack(config_predicted))) { - oracle_movement(&mvt_code_oracle, &mvt_type_oracle, &mvt_label_oracle, config_oracle, ref_oracle, root_label_oracle, ctx,fv_oracle, &sentence_nb); + oracle_movement(&mvt_code_oracle, &mvt_type_oracle, &mvt_label_oracle, config_oracle, ref_oracle, root_label_oracle, ctx,fv_decoder, &sentence_nb); movement_parser_root(config_predicted, root_label_predicted); test_pred(); } @@ -262,17 +276,20 @@ void generate_training_file_error(FILE *output_file, context *ctx) test_pred(); } } - print_cff(ctx, output_file, config_oracle, config_predicted, mvt_code_oracle, mvt_code_predicted, fv_predicted); + //error training + config2feat_vec_cff(ctx->features_model_error, config_predicted, ctx->d_perceptron_features_error, fv_error, TRAIN_MODE); + print_cff(ctx, output_file, config_oracle, config_predicted, mvt_code_oracle, mvt_code_predicted, fv_error); } fprintf(stdout,"\n"); - /* - config_free(c); - feat_vec_free(fv); - feature_table_free(ft); - if(ctx->input_filename) - fclose(f);*/ + config_free(config_oracle); + config_free(config_predicted); + feat_vec_free(fv_decoder); + feat_vec_free(fv_error); + feature_table_free(ft); + + fclose(mcf_file_oracle); + fclose(mcf_file_predicted); - } void error_parser_set_linguistic_resources_filename(context *ctx) diff --git a/maca_trans_parser/src/maca_error_predictor_tagger.c b/maca_trans_parser/src/maca_error_predictor_tagger.c index 55964e518d86cf02ce2b576a67e0aba50a67040e..c43344722aac451ca4ec143cd0b363d087986f0a 100644 --- a/maca_trans_parser/src/maca_error_predictor_tagger.c +++ b/maca_trans_parser/src/maca_error_predictor_tagger.c @@ -108,6 +108,9 @@ int main(int argc, char *argv[]) ctx->vocabs_error = dico_vec_read(ctx->fann_filename, ctx->hash_ratio); ctx->features_model_error = feat_model_read(ctx->l_rules_filename, feat_lib_build(), ctx->verbose); + + //ctx->mcd_struct = mcd_read("/home/mathis/maca_data2/fr/bin/maca_trans_tagger.mcd",ctx->verbose); + //ctx->mcd_struct_error = mcd_read("/home/mathis/maca_data2/fr/bin/maca_trans_tagger.mcd",ctx->verbose); ctx->mcd_struct_error = mcd_build_wpmlgfs(); mcd_link_to_dico(ctx->mcd_struct, ctx->vocabs, ctx->verbose); diff --git a/maca_trans_parser/src/maca_error_predictor_tagger_mcf2cff.c b/maca_trans_parser/src/maca_error_predictor_tagger_mcf2cff.c index 0fbc2454ef86160dc809a36985474f1a6c3fb27a..00d553a99f908d24aca820ecef2b56aa33d24ddc 100644 --- a/maca_trans_parser/src/maca_error_predictor_tagger_mcf2cff.c +++ b/maca_trans_parser/src/maca_error_predictor_tagger_mcf2cff.c @@ -54,7 +54,7 @@ void maca_error_predictor_help_message(context *ctx) context_sent_nb_help_message(ctx); //context_mcd_help_message(ctx); fprintf(stderr, "INPUT\n"); - fprintf(stderr, "\t-i --input <file> : input is in conll07 format (default is dev.conll07)\n"); + fprintf(stderr, "\t-i --input <file> : input is in mcf format (default is new_dev.mcf)\n"); //fprintf(stderr, "IN TEST MODE\n"); context_vocabs_help_message(ctx); @@ -74,7 +74,7 @@ void maca_error_predictor_check_options(context *ctx) } -int config_is_equal_tagger(config *c1, config *c2, int p1, int p2) // 3 for bm2p , 2 .. , 1 now, 0 no errors +/*int config_is_equal_tagger(config *c1, config *c2, int p1, int p2) // 3 for bm2p , 2 .. , 1 now, 0 no errors { if (bm2p(c1)!=bm2p(c2)) return 3; @@ -85,25 +85,35 @@ int config_is_equal_tagger(config *c1, config *c2, int p1, int p2) // 3 for bm2p else return 0; } +*/ + +int config_is_equal_tagger(config *c1, config *c2, int p1, int p2) +{ + // if (bm2p(c1)!=bm2p(c2)) + // return 3; + if (bm1p(c1)!=bm1p(c2)) + return 1; + else + return 0; +} void generate_error_train(FILE *output_file, context *ctx) { config *config_oracle; - feat_vec *fv_oracle = feat_vec_new(feature_types_nb); + feat_vec *fv_decoder = feat_vec_new(feature_types_nb); FILE *mcf_file_oracle = myfopen(ctx->input_filename, "r"); int postag_oracle; word *b0; config *config_predicted; feature_table *ft = feature_table_load(ctx->perc_model_filename, ctx->verbose); - feat_vec *fv_predicted = feat_vec_new(feature_types_nb); + feat_vec *fv_error = feat_vec_new(feature_types_nb); FILE *mcf_file_predicted = myfopen(ctx->input_filename, "r"); int postag_predicted; float max; dico *dico_pos = dico_vec_get_dico(ctx->vocabs, (char *)"POS"); - dico *dico_pos_error = dico_vec_get_dico(ctx->vocabs_error, (char *)"POS"); - + config_oracle = config_new(mcf_file_oracle, ctx->mcd_struct, 5); config_predicted = config_new(mcf_file_predicted, ctx->mcd_struct, 5); @@ -114,7 +124,7 @@ void generate_error_train(FILE *output_file, context *ctx) } // oracle - config2feat_vec_cff(ctx->features_model, config_oracle, ctx->d_perceptron_features, fv_oracle, LOOKUP_MODE); + config2feat_vec_cff(ctx->features_model, config_oracle, ctx->d_perceptron_features, fv_decoder, LOOKUP_MODE); postag_oracle = oracle_tagger(config_oracle); if(ctx->debug_mode){ @@ -124,21 +134,19 @@ void generate_error_train(FILE *output_file, context *ctx) // predicted b0 = word_buffer_b0(config_predicted->bf); - config2feat_vec_cff(ctx->features_model_error, config_predicted, ctx->d_perceptron_features_error, fv_predicted, TRAIN_MODE); - - postag_predicted = feature_table_argmax(fv_oracle, ft, &max); + postag_predicted = feature_table_argmax(fv_decoder, ft, &max); if(ctx->debug_mode){ printf("Predicted : "); - print_word_simple(b0, ctx->mcd_struct_error, dico_pos_error, postag_predicted); + print_word_simple(b0, ctx->mcd_struct, dico_pos, postag_predicted); } if(ctx->debug_mode){ - vcode *vcode_array = feature_table_get_vcode_array(fv_oracle, ft); + vcode *vcode_array = feature_table_get_vcode_array(fv_decoder, ft); for(int i=0; i < 3; i++){ printf("%d\t", i); - printf("%s\t%.4f\n", dico_int2string(dico_pos_error, vcode_array[i].class_code), vcode_array[i].score); + printf("%s\t%.4f\n", dico_int2string(dico_pos, vcode_array[i].class_code), vcode_array[i].score); } free(vcode_array); @@ -150,9 +158,12 @@ void generate_error_train(FILE *output_file, context *ctx) } + // error training + config2feat_vec_cff(ctx->features_model_error, config_predicted, ctx->d_perceptron_features_error, fv_error, TRAIN_MODE); + if(!ctx->debug_mode || output_file!=stdout) { - fprintf(output_file, "%d", ((config_is_equal_tagger(config_oracle, config_predicted,postag_oracle,postag_predicted)))); - feat_vec_print(output_file, fv_predicted); + fprintf(output_file, "%d", ((config_is_equal_tagger(config_oracle, config_predicted, postag_oracle,postag_predicted)))); + feat_vec_print(output_file, fv_error); } movement_tagger(config_oracle, postag_oracle); @@ -160,8 +171,8 @@ void generate_error_train(FILE *output_file, context *ctx) } - feat_vec_free(fv_oracle); - feat_vec_free(fv_predicted); + feat_vec_free(fv_decoder); + feat_vec_free(fv_error); feature_table_free(ft); config_free(config_oracle); config_free(config_predicted); @@ -194,10 +205,6 @@ void error_tagger_set_linguistic_resources_filename(context *ctx) ctx->input_filename = strdup(absolute_filename); } - if(!ctx->mcd_filename) { - ctx->mcd_struct = mcd_build_wpmlgfs(); - } - if(!ctx->cff_filename){ //printf("cff -> stdout\n") } @@ -236,7 +243,7 @@ int main(int argc, char *argv[]) maca_error_predictor_check_options(ctx); ctx->mcd_struct = mcd_read(ctx->mcd_filename, ctx->verbose); - ctx->mcd_struct_error = mcd_read(ctx->l_rules_filename, ctx->verbose); + ctx->mcd_struct_error = mcd_read(ctx->mcd_filename, ctx->verbose);//mcd_read(ctx->l_rules_filename, ctx->verbose); //error mcd_extract_dico_from_corpus(ctx->mcd_struct_error, ctx->input_filename); diff --git a/maca_trans_parser/src/movement_parser.c b/maca_trans_parser/src/movement_parser.c index d53556822e141778d4a7908aa5e4b40e2c0b95ab..7aa7c5e30cd2d30b2fd7d61fd465fcb6c5b2256c 100644 --- a/maca_trans_parser/src/movement_parser.c +++ b/maca_trans_parser/src/movement_parser.c @@ -45,7 +45,8 @@ int movement_left_arc(config *c, int label, float score) /* depset_add(c->ds, word_buffer_b0(c->bf), label, stack_top(c->st)); */ stack_pop(c->st); - config_add_mvt(c, movement_left_code(label)); + + config_add_mvt(c, movement_left_code(label)); return 1; } @@ -76,8 +77,9 @@ int movement_shift(config *c, int stream, float score) stack_push(c->st, word_buffer_b0(c->bf)); word_buffer_move_right(c->bf); - + printf("JE FAIS UN TEST ICI :\n"); config_add_mvt(c, MVT_SHIFT); + printf("TEST TERMINÉ :\n\n"); return 1; } diff --git a/maca_trans_parser/src/movements.c b/maca_trans_parser/src/movements.c index fe865416dc2c43e37d5b613e04ab271c67ac3e8e..2a01f10c9b7f4a503902cf3cc574db5b245e3595 100644 --- a/maca_trans_parser/src/movements.c +++ b/maca_trans_parser/src/movements.c @@ -32,12 +32,13 @@ int movement_eos_undo(config *c) int movement_left_arc(config *c, int movement_code, int label) { + //printf("BEGINNING 1\n"); if(stack_is_empty(config_get_stack(c))) return 0; /* if(word_buffer_is_empty(config_get_buffer(c))) return 0; */ - - /* word on top of the stack should not have a governor */ - if(word_get_gov(stack_top(config_get_stack(c))) != WORD_INVALID_GOV) return 0; - + //printf("BEGINNING 2\n"); + /* word on top of the stack should not have a governor */ // com here bug ? + //if(word_get_gov(stack_top(config_get_stack(c))) != WORD_INVALID_GOV) return 0; + //printf("BEGINNING 3\n"); word *gov = word_buffer_b0(config_get_buffer(c)); word *dep = stack_top(config_get_stack(c)); int dist = (word_get_index(gov)) - (word_get_index(dep)); 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 9cb7a91cd87b2ea7926a7240981449110f882840..6cc38ebbbb71bb41e5d56579dc5b0ffdaea148da 100644 --- a/maca_trans_parser/src/simple_decoder_parser_arc_eager.c +++ b/maca_trans_parser/src/simple_decoder_parser_arc_eager.c @@ -219,7 +219,7 @@ void simple_decoder_parser_arc_eager(context *ctx) } if(result == 0){ - if(ctx->debug_mode) fprintf(stdout, "WARNING : movement cannot be executed doing a SHIFT instead !\n"); + if(ctx->debug_mode) fprintf(stdout, "WARNING : movement cannot be executed doing a SHIFT instead !\n"); result = movement_parser_shift(c); if(result == 0){ /* SHIFT failed no more words to read, let's get out of here ! */ if(ctx->debug_mode) fprintf(stdout, "WARNING : cannot exectue a SHIFT emptying stack !\n"); diff --git a/maca_trans_parser/src/simple_decoder_tagger_error_predictor.c b/maca_trans_parser/src/simple_decoder_tagger_error_predictor.c index 1e98a8972a8ba0be4486565a1250617194888ce6..4d96a0909ddb4916c10727c2ef24e40d9bbafa96 100644 --- a/maca_trans_parser/src/simple_decoder_tagger_error_predictor.c +++ b/maca_trans_parser/src/simple_decoder_tagger_error_predictor.c @@ -179,7 +179,7 @@ void simple_decoder_tagger_error_predictor(context *ctx, char *perc_error_filena break; case 1 : - sprintf(impr[nb]+strlen(impr[nb]),"\t✖\t0"); + sprintf(impr[nb]+strlen(impr[nb]),"\t✖\t-1"); break; case 2 : @@ -217,17 +217,18 @@ void simple_decoder_tagger_error_predictor(context *ctx, char *perc_error_filena if(ctx->debug_mode){ fprintf(stdout, " ***Error detection***\n"); - for(int i=0; i < 4; i++){ + for(int i=0; i < 2; i++){ fprintf(stdout, " %d\t", i); fprintf(stdout, " %d\t%.4f\n", vcode_array_err[i].class_code, vcode_array_err[i].score); } } + float scoreError = vcode_array_err[0].score; free(vcode_array_err); - if (error_detect == 3 && !ctx->trace_mode && !no_back && word_buffer_bm1(c->bf) && word_buffer_bm2(c->bf)){// && (vcode_array_err[0].score-vcode_array_err[1].score)>2.5) { - backward(c); + if (error_detect == 1 && !ctx->trace_mode && scoreError > 0.28 && !no_back && word_buffer_bm1(c->bf) && word_buffer_bm2(c->bf)){ + //backward(c); backward(c); - nb -= 3; + nb -= 2; if(ctx->f2p) add_signature_to_words_in_word_buffer(c->bf, ctx->f2p); @@ -283,7 +284,7 @@ void simple_decoder_tagger_error_predictor(context *ctx, char *perc_error_filena nb += 1; } - else if(error_detect == 3 && !ctx->trace_mode && no_back) + else if(error_detect == 1 && !ctx->trace_mode && no_back) no_back = 0; word_buffer_move_right(c->bf); @@ -291,9 +292,10 @@ void simple_decoder_tagger_error_predictor(context *ctx, char *perc_error_filena for (int i = 0; i < nb; i++) { printf("%s",impr[i]); } - /* config_print(stdout, c); */ - //feat_vec_free(fv); - //feature_table_free(ft); - //config_free(c); + feat_vec_free(fv_error); + feat_vec_free(fv); + feature_table_free(ft_error); + feature_table_free(ft); + config_free(c); //if (ctx->input_filename) fclose(f); }