Skip to content
Snippets Groups Projects
Commit 395684fc authored by Alexis Nasr's avatar Alexis Nasr
Browse files

added prediction.c in maca_morpho

parent e9ccdd69
Branches
No related tags found
No related merge requests found
set(SOURCES set(SOURCES
src/feat_fct.c src/feat_fct.c
src/context.c src/context.c
src/vectorize.c
) )
...@@ -21,3 +22,9 @@ target_link_libraries(fplm2cff maca_common) ...@@ -21,3 +22,9 @@ target_link_libraries(fplm2cff maca_common)
target_link_libraries(fplm2cff maca_morpho) target_link_libraries(fplm2cff maca_morpho)
install (TARGETS fplm2cff DESTINATION bin) install (TARGETS fplm2cff DESTINATION bin)
add_executable(predict ./src/predict.c)
target_link_libraries(predict perceptron)
target_link_libraries(predict maca_common)
target_link_libraries(predict maca_morpho)
install (TARGETS predict DESTINATION bin)
...@@ -13,6 +13,7 @@ void context_free(context *ctx) ...@@ -13,6 +13,7 @@ void context_free(context *ctx)
{ {
if(ctx->program_name) free(ctx->program_name); if(ctx->program_name) free(ctx->program_name);
if(ctx->fplm_filename) free(ctx->fplm_filename); if(ctx->fplm_filename) free(ctx->fplm_filename);
if(ctx->cfw_filename) free(ctx->cfw_filename);
if(ctx->language) free(ctx->language); if(ctx->language) free(ctx->language);
if(ctx->maca_data_path) free(ctx->maca_data_path); if(ctx->maca_data_path) free(ctx->maca_data_path);
free(ctx); free(ctx);
...@@ -30,6 +31,7 @@ context *context_new(void) ...@@ -30,6 +31,7 @@ context *context_new(void)
ctx->language = strdup("fr"); ctx->language = strdup("fr");
ctx->maca_data_path = NULL; ctx->maca_data_path = NULL;
ctx->features_filename = NULL; ctx->features_filename = NULL;
ctx->cfw_filename = NULL;
return ctx; return ctx;
} }
...@@ -62,6 +64,13 @@ void context_features_filename_help_message(context *ctx){ ...@@ -62,6 +64,13 @@ void context_features_filename_help_message(context *ctx){
fprintf(stderr, "\t-x --feat <file> : features dictionary file name\n"); fprintf(stderr, "\t-x --feat <file> : features dictionary file name\n");
} }
void context_weights_matrix_filename_help_message(context *ctx){
fprintf(stderr, "\t-w --weights <file> : weight matrix (cfw) filename\n");
}
void context_features_model_help_message(context *ctx){
fprintf(stderr, "\t-F --feat_model <file> : feature model file name\n");
}
context *context_read_options(int argc, char *argv[]) context *context_read_options(int argc, char *argv[])
{ {
...@@ -71,7 +80,7 @@ context *context_read_options(int argc, char *argv[]) ...@@ -71,7 +80,7 @@ context *context_read_options(int argc, char *argv[])
ctx->program_name = strdup(argv[0]); ctx->program_name = strdup(argv[0]);
static struct option long_options[9] = static struct option long_options[10] =
{ {
{"help", no_argument, 0, 'h'}, {"help", no_argument, 0, 'h'},
{"verbose", no_argument, 0, 'v'}, {"verbose", no_argument, 0, 'v'},
...@@ -81,12 +90,13 @@ context *context_read_options(int argc, char *argv[]) ...@@ -81,12 +90,13 @@ context *context_read_options(int argc, char *argv[])
{"fplm", required_argument, 0, 'f'}, {"fplm", required_argument, 0, 'f'},
{"maca_data_path", required_argument, 0, 'D'}, {"maca_data_path", required_argument, 0, 'D'},
{"fm", required_argument, 0, 'F'}, {"fm", required_argument, 0, 'F'},
{"feat", required_argument, 0, 'x'} {"feat", required_argument, 0, 'x'},
{"weights", required_argument, 0, 'w'}
}; };
optind = 0; optind = 0;
opterr = 0; opterr = 0;
while ((c = getopt_long (argc, argv, "hvdf:L:M:D:F:x:", long_options, &option_index)) != -1){ while ((c = getopt_long (argc, argv, "hvdf:L:M:D:F:x:w:", long_options, &option_index)) != -1){
switch (c) switch (c)
{ {
case 'd': case 'd':
...@@ -113,6 +123,9 @@ context *context_read_options(int argc, char *argv[]) ...@@ -113,6 +123,9 @@ context *context_read_options(int argc, char *argv[])
case 'x': case 'x':
ctx->features_filename = strdup(optarg); ctx->features_filename = strdup(optarg);
break; break;
case 'w':
ctx->cfw_filename = strdup(optarg);
break;
} }
} }
......
...@@ -18,6 +18,7 @@ typedef struct { ...@@ -18,6 +18,7 @@ typedef struct {
char *maca_data_path; char *maca_data_path;
char *fm_filename; char *fm_filename;
char *features_filename; char *features_filename;
char *cfw_filename;
} context; } context;
...@@ -31,4 +32,6 @@ void context_language_help_message(context *ctx); ...@@ -31,4 +32,6 @@ void context_language_help_message(context *ctx);
void context_fplm_help_message(context *ctx); void context_fplm_help_message(context *ctx);
void context_maca_data_path_help_message(context *ctx); void context_maca_data_path_help_message(context *ctx);
void context_features_filename_help_message(context *ctx); void context_features_filename_help_message(context *ctx);
void context_weights_matrix_filename_help_message(context *ctx);
void context_features_model_help_message(context *ctx);
#endif #endif
...@@ -7,43 +7,7 @@ ...@@ -7,43 +7,7 @@
#include "feat_vec.h" #include "feat_vec.h"
#include "dico.h" #include "dico.h"
#include "util.h" #include "util.h"
#include "vectorize.h"
#define LOOKUP_MODE 1
#define TRAIN_MODE 2
int get_feat_value(feat_model *fm, char *form, dico *dico_features, int feat_nb, int mode)
{
feat_desc *fd = fm->array[feat_nb];
int i;
int feat_val;
char str[10];
/* the name of the feature is built in fm->string and its value in the dictionnary (dico_features) is returned */
fm->string[0] = '\0';
for(i=0; i < fd->nbelem; i++){
strcat(fm->string, fd->array[i]->name);
feat_val = fd->array[i]->fct(form);
sprintf(str, "%d", feat_val);
strcat(fm->string, str);
/* catenate_int(fm->string, feat_val); */
}
if(mode == LOOKUP_MODE){
if(fm->string)
return dico_string2int(dico_features, fm->string);
}
return dico_add(dico_features, fm->string);
}
feat_vec *form2fv(char *form, feat_vec *fv, feat_model *fm, dico *dico_features)
{
int i;
feat_vec_empty(fv);
for(i=0; i < fm->nbelem; i++)
feat_vec_add(fv, get_feat_value(fm, form, dico_features, i, TRAIN_MODE));
return fv;
}
int main(int argc, char *argv[]) int main(int argc, char *argv[])
...@@ -55,6 +19,7 @@ int main(int argc, char *argv[]) ...@@ -55,6 +19,7 @@ int main(int argc, char *argv[])
context_fplm_help_message(ctx); context_fplm_help_message(ctx);
context_maca_data_path_help_message(ctx); context_maca_data_path_help_message(ctx);
context_features_filename_help_message(ctx); context_features_filename_help_message(ctx);
context_features_model_help_message(ctx);
exit(1); exit(1);
} }
feat_vec *fv = feat_vec_new(10); feat_vec *fv = feat_vec_new(10);
...@@ -64,7 +29,7 @@ int main(int argc, char *argv[]) ...@@ -64,7 +29,7 @@ int main(int argc, char *argv[])
while(strcmp(form, "end")){ while(strcmp(form, "end")){
fscanf(stdin, "%s", form); fscanf(stdin, "%s", form);
printf("form = %s\n", form); printf("form = %s\n", form);
form2fv(form, fv, fm, dico_features); form2fv(form, fv, fm, dico_features, ADD_MODE);
/* void feat_vec_print_string(feat_vec *fv, dico *dico_features); */ /* void feat_vec_print_string(feat_vec *fv, dico *dico_features); */
feat_vec_print(stdout, fv); feat_vec_print(stdout, fv);
} }
......
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "context.h"
#include "feat_model.h"
#include "feat_vec.h"
#include "dico.h"
#include "util.h"
#include "vectorize.h"
#include "feature_table.h"
void predict_help_message(context *ctx)
{
context_general_help_message(ctx);
context_language_help_message(ctx);
context_fplm_help_message(ctx);
context_maca_data_path_help_message(ctx);
context_features_filename_help_message(ctx);
context_weights_matrix_filename_help_message(ctx);
context_features_model_help_message(ctx);
exit(1);
}
int main(int argc, char *argv[])
{
context *ctx = context_read_options(argc, argv);
if(ctx->help) predict_help_message(ctx);
feature_table *cfw = feature_table_load(ctx->cfw_filename, ctx->verbose);
feat_vec *fv = feat_vec_new(10);
dico *dico_features = dico_read(ctx->features_filename, 0.5);
feat_model *fm = feat_model_read(ctx->fm_filename, feat_lib_build(), ctx->verbose);
char form[100];
int class;
float max;
while(strcmp(form, "end")){
fscanf(stdin, "%s", form);
printf("form = %s\n", form);
form2fv(form, fv, fm, dico_features, LOOKUP_MODE);
class = feature_table_argmax(fv, cfw, &max);
feat_vec_print(stdout, fv);
printf("class = %d\n", class);
}
if(ctx->features_filename)
dico_print(ctx->features_filename, dico_features);
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"vectorize.h"
int get_feat_value(feat_model *fm, char *form, dico *dico_features, int feat_nb, int mode)
{
feat_desc *fd = fm->array[feat_nb];
int i;
int feat_val;
char str[10];
/* the name of the feature is built in fm->string and its value in the dictionnary (dico_features) is returned */
fm->string[0] = '\0';
for(i=0; i < fd->nbelem; i++){
strcat(fm->string, fd->array[i]->name);
feat_val = fd->array[i]->fct(form);
sprintf(str, "%d", feat_val);
strcat(fm->string, str);
/* catenate_int(fm->string, feat_val); */
}
if(mode == LOOKUP_MODE){
if(fm->string)
return dico_string2int(dico_features, fm->string);
}
return dico_add(dico_features, fm->string);
}
feat_vec *form2fv(char *form, feat_vec *fv, feat_model *fm, dico *dico_features, int mode)
{
int i;
feat_vec_empty(fv);
for(i=0; i < fm->nbelem; i++)
feat_vec_add(fv, get_feat_value(fm, form, dico_features, i, mode));
return fv;
}
#ifndef __VECTORIZE__
#define __VECTORIZE__
#include"dico.h"
#include"feat_model.h"
#include"feat_vec.h"
#define LOOKUP_MODE 1
#define ADD_MODE 2
feat_vec *form2fv(char *form, feat_vec *fv, feat_model *fm, dico *dico_features, int mode);
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment