Skip to content
Snippets Groups Projects
Commit 77764b6d authored by Marjorie Armando's avatar Marjorie Armando
Browse files

update of how we generate code_class file

parent b9618dfd
No related branches found
No related tags found
No related merge requests found
...@@ -11,6 +11,6 @@ ...@@ -11,6 +11,6 @@
int choose_class(char* class); int choose_class(char* class);
int extract_class_position(CLASS class); int extract_class_position(CLASS class);
void extract_morpho_feature(CLASS class, char* morpho_feature, char* morpho); 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 #endif
...@@ -74,7 +74,6 @@ void create_cff(context* ctx) ...@@ -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) 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 i=0;
int tmp_code;
char morpho_feature[10]; char morpho_feature[10];
extract_morpho_feature(class, morpho_feature, morpho); 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 ...@@ -86,26 +85,17 @@ void write_cff(FILE *cff, CLASS class, FILE* code_class, char* form, char* morph
feat_vec_print(cff, fv); feat_vec_print(cff, fv);
return; 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 == TENSE)
if(class != PERSON)
{ {
FILE* tmp = fopen("tmp.txt","w+"); fprintf(cff,"%d", associate_number_to_classes(code_class,class,morpho_feature,0));
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));
form2fv(form, fv, fm, dico_features, ADD_MODE); form2fv(form, fv, fm, dico_features, ADD_MODE);
feat_vec_print(cff, fv); feat_vec_print(cff, fv);
fclose(tmp);
remove("tmp.txt");
} }
else else
{ {
for(i=0; i<(int)strlen(morpho_feature);i++) for(i=0; i<(int)strlen(morpho_feature);i++)
{ {
tmp_code = morpho_feature[i]; fprintf(cff,"%d", associate_number_to_classes(code_class,class,morpho_feature,i));
fprintf(cff,"%d", associate_number_to_classes(code_class,tmp_code));
form2fv(form, fv, fm, dico_features, ADD_MODE); form2fv(form, fv, fm, dico_features, ADD_MODE);
feat_vec_print(cff, fv); feat_vec_print(cff, fv);
} }
......
...@@ -91,16 +91,28 @@ void extract_morpho_feature(CLASS class, char* morpho_feature, char* morpho) ...@@ -91,16 +91,28 @@ 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**/ * 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 code = 0;
int cl; char tmp[20];
char tmp[10];
rewind(classes_code); rewind(classes_code);
fscanf(classes_code,"%s",tmp); fscanf(classes_code,"%s",tmp);
while(fscanf(classes_code,"%d %d\n",&code,&cl) == 2) while(fscanf(classes_code,"%d %s\n",&code,tmp) == 2)
if(cl == class) {
if(class == TENSE)
{
if(!strcmp(tmp, morpho_feature))
return code; return code;
fprintf(classes_code, "%d %d\n", code+1, class); }
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; return code+1;
} }
...@@ -99,7 +99,7 @@ void make_prediction(FILE* predictions, FILE* code_class, CLASS cl, int* errors, ...@@ -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) void errors_nb(FILE* code_class, CLASS class, int class_predicted, int* errors, char* morpho)
{ {
int i; int i;
int size = 0; int size = 10;
int real_class[10]; int real_class[10];
char morpho_feature[10]; char morpho_feature[10];
extract_morpho_feature(class,morpho_feature,morpho); extract_morpho_feature(class,morpho_feature,morpho);
...@@ -113,32 +113,23 @@ void errors_nb(FILE* code_class, CLASS class, int class_predicted, int* errors, ...@@ -113,32 +113,23 @@ 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 extract_real_class(FILE* code_class, CLASS class, char* morpho_feature, int* real_class)
{ {
int size = -1; int size = -1;
int tmp_code;
int i; int i;
if(morpho_feature[0]=='\0') if(morpho_feature[0]=='\0')
{ {
size++; size++;
real_class[size]=0; 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++; size++;
real_class[size] = associate_number_to_classes(code_class,tmp_code); real_class[size] = associate_number_to_classes(code_class,class,morpho_feature,0);
fclose(tmp);
remove("tmp.txt");
} }
else 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++; size++;
tmp_code = morpho_feature[i]; real_class[size] = associate_number_to_classes(code_class,class,morpho_feature,i);
real_class[size] = associate_number_to_classes(code_class,tmp_code);
} }
} }
return size; return size;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment