Select Git revision
fplm2cff.c 1.73 KiB
#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"
#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[])
{
context *ctx = context_read_options(argc, argv);
feat_vec *fv = feat_vec_new(10);
dico *dico_features = dico_new("dico_features", 1000);
feat_model *fm = feat_model_read(ctx->fm_filename, feat_lib_build(), ctx->verbose);
char form[100];
while(strcmp(form, "end")){
fscanf(stdin, "%s", form);
printf("form = %s\n", form);
form2fv(form, fv, fm, dico_features);
/* void feat_vec_print_string(feat_vec *fv, dico *dico_features); */
feat_vec_print(stdout, fv);
}
/* dico_print_fh(stdout, dico_features); */
dico_print("xx", dico_features);
}