diff --git a/maca_morpho/src/fplm.h b/maca_morpho/src/fplm.h index 206d1a499bd0f646292670d3c03a2ba833de0d20..5806772b0bb9d18242182c71cdb687baac146dc7 100644 --- a/maca_morpho/src/fplm.h +++ b/maca_morpho/src/fplm.h @@ -11,6 +11,6 @@ int choose_class(char* class); int extract_class_position(CLASS class); void extract_morpho_feature(CLASS class, char* morpho_feature, char* morpho); - int associate_number_to_classes(FILE* classes_code, int class); + int associate_number_to_classes(FILE* classes_code, CLASS class, char* morpho_feature, int current_morpho_feature); #endif diff --git a/maca_morpho/src/fplm2cff_fct.c b/maca_morpho/src/fplm2cff_fct.c index 1f0ceaa96b506f99a67886f38f5a2f67dd361c07..7417a745a0976d705c7402029139310201040379 100644 --- a/maca_morpho/src/fplm2cff_fct.c +++ b/maca_morpho/src/fplm2cff_fct.c @@ -74,7 +74,6 @@ void create_cff(context* ctx) void write_cff(FILE *cff, CLASS class, FILE* code_class, char* form, char* morpho, feat_vec *fv, feat_model *fm, dico *dico_features) { int i=0; - int tmp_code; char morpho_feature[10]; extract_morpho_feature(class, morpho_feature, morpho); @@ -86,26 +85,17 @@ void write_cff(FILE *cff, CLASS class, FILE* code_class, char* form, char* morph feat_vec_print(cff, fv); return; } - //for example if the tense is 'PS' the class' number will be the ASCII code of 'P' concatenate with the ASCII code of 'S' - if(class != PERSON) + if(class == TENSE) { - FILE* tmp = fopen("tmp.txt","w+"); - for(i=0; i<(int)strlen(morpho_feature); i++) - fprintf(tmp,"%d", morpho_feature[i]); - rewind(tmp); - fscanf(tmp, "%d", &tmp_code); - fprintf(cff,"%d", associate_number_to_classes(code_class,tmp_code)); + fprintf(cff,"%d", associate_number_to_classes(code_class,class,morpho_feature,0)); form2fv(form, fv, fm, dico_features, ADD_MODE); feat_vec_print(cff, fv); - fclose(tmp); - remove("tmp.txt"); } else { for(i=0; i<(int)strlen(morpho_feature);i++) { - tmp_code = morpho_feature[i]; - fprintf(cff,"%d", associate_number_to_classes(code_class,tmp_code)); + fprintf(cff,"%d", associate_number_to_classes(code_class,class,morpho_feature,i)); form2fv(form, fv, fm, dico_features, ADD_MODE); feat_vec_print(cff, fv); } diff --git a/maca_morpho/src/fplm_fct.c b/maca_morpho/src/fplm_fct.c index 4a40a967d12744c2d8d7130d4eaee5bc4630375b..dce8bfdee1e8bec9e642d95c220165109e49246f 100644 --- a/maca_morpho/src/fplm_fct.c +++ b/maca_morpho/src/fplm_fct.c @@ -89,18 +89,30 @@ void extract_morpho_feature(CLASS class, char* morpho_feature, char* morpho) } } -/**Write the code_class file (use in predict to know the real class) +/** Write the code_class file (use in predict to know the real class) * Return the class' code**/ -int associate_number_to_classes(FILE* classes_code, int class) +int associate_number_to_classes(FILE* classes_code, CLASS class, char* morpho_feature, int current_morpho_feature) { - int code=0; - int cl; - char tmp[10]; + int code = 0; + char tmp[20]; rewind(classes_code); fscanf(classes_code,"%s",tmp); - while(fscanf(classes_code,"%d %d\n",&code,&cl) == 2) - if(cl == class) - return code; - fprintf(classes_code, "%d %d\n", code+1, class); + while(fscanf(classes_code,"%d %s\n",&code,tmp) == 2) + { + if(class == TENSE) + { + if(!strcmp(tmp, morpho_feature)) + return code; + } + else + { + if(tmp[0] == morpho_feature[current_morpho_feature]) + return code; + } + } + if(class == TENSE) + fprintf(classes_code, "%d %s\n", code+1, morpho_feature); + else + fprintf(classes_code, "%d %c\n", code+1, morpho_feature[current_morpho_feature]); return code+1; } diff --git a/maca_morpho/src/predict_fct.c b/maca_morpho/src/predict_fct.c index 13f0df7146cd0635d262a95c87520b0050b7d78e..59238eaec4adc977cbba9c36d6d131aa4a08d5d6 100644 --- a/maca_morpho/src/predict_fct.c +++ b/maca_morpho/src/predict_fct.c @@ -99,7 +99,7 @@ void make_prediction(FILE* predictions, FILE* code_class, CLASS cl, int* errors, void errors_nb(FILE* code_class, CLASS class, int class_predicted, int* errors, char* morpho) { int i; - int size = 0; + int size = 10; int real_class[10]; char morpho_feature[10]; extract_morpho_feature(class,morpho_feature,morpho); @@ -113,34 +113,25 @@ void errors_nb(FILE* code_class, CLASS class, int class_predicted, int* errors, int extract_real_class(FILE* code_class, CLASS class, char* morpho_feature, int* real_class) { int size = -1; - int tmp_code; int i; if(morpho_feature[0]=='\0') { size++; real_class[size]=0; } - else if(class != PERSON) + else if(class == TENSE) { - FILE* tmp = fopen("tmp.txt","w+"); - for(i=0; i<(int)strlen(morpho_feature); i++) - fprintf(tmp,"%d", morpho_feature[i]); - rewind(tmp); - fscanf(tmp, "%d", &tmp_code); size++; - real_class[size] = associate_number_to_classes(code_class,tmp_code); - fclose(tmp); - remove("tmp.txt"); + real_class[size] = associate_number_to_classes(code_class,class,morpho_feature,0); } else { - for(i=0; i<(int)strlen(morpho_feature);i++) + for(i=0; i<(int)strlen(morpho_feature);i++) //do not parcour the array if it's the tense !! { size++; - tmp_code = morpho_feature[i]; - real_class[size] = associate_number_to_classes(code_class,tmp_code); + real_class[size] = associate_number_to_classes(code_class,class,morpho_feature,i); } - } + } return size; }