static int model_attrs_to_string(crfsuite_dictionary_t* dic, int id, char const **pstr) { crf1dm_t *crf1dm = (crf1dm_t*)dic->internal; *pstr = crf1dm_to_attr(crf1dm, id); return 0; }
void crf1dm_dump(crf1dm_t* crf1dm, FILE *fp) { int j; uint32_t i; feature_refs_t refs; const header_t* hfile = crf1dm->header; /* Dump the file header. */ fprintf(fp, "FILEHEADER = {\n"); fprintf(fp, " magic: %c%c%c%c\n", hfile->magic[0], hfile->magic[1], hfile->magic[2], hfile->magic[3]); fprintf(fp, " size: %d\n", hfile->size); fprintf(fp, " type: %c%c%c%c\n", hfile->type[0], hfile->type[1], hfile->type[2], hfile->type[3]); fprintf(fp, " version: %d\n", hfile->version); fprintf(fp, " num_features: %d\n", hfile->num_features); fprintf(fp, " num_labels: %d\n", hfile->num_labels); fprintf(fp, " num_attrs: %d\n", hfile->num_attrs); fprintf(fp, " off_features: 0x%X\n", hfile->off_features); fprintf(fp, " off_labels: 0x%X\n", hfile->off_labels); fprintf(fp, " off_attrs: 0x%X\n", hfile->off_attrs); fprintf(fp, " off_labelrefs: 0x%X\n", hfile->off_labelrefs); fprintf(fp, " off_attrrefs: 0x%X\n", hfile->off_attrrefs); fprintf(fp, "}\n"); fprintf(fp, "\n"); /* Dump the labels. */ fprintf(fp, "LABELS = {\n"); for (i = 0;i < hfile->num_labels;++i) { const char *str = crf1dm_to_label(crf1dm, i); #if 0 int check = crf1dm_to_lid(crf1dm, str); if (i != check) { fprintf(fp, "WARNING: inconsistent label CQDB\n"); } #endif fprintf(fp, " %5d: %s\n", i, str); } fprintf(fp, "}\n"); fprintf(fp, "\n"); /* Dump the attributes. */ fprintf(fp, "ATTRIBUTES = {\n"); for (i = 0;i < hfile->num_attrs;++i) { const char *str = crf1dm_to_attr(crf1dm, i); #if 0 int check = crf1dm_to_aid(crf1dm, str); if (i != check) { fprintf(fp, "WARNING: inconsistent attribute CQDB\n"); } #endif fprintf(fp, " %5d: %s\n", i, str); } fprintf(fp, "}\n"); fprintf(fp, "\n"); /* Dump the transition features. */ fprintf(fp, "TRANSITIONS = {\n"); for (i = 0;i < hfile->num_labels;++i) { crf1dm_get_labelref(crf1dm, i, &refs); for (j = 0;j < refs.num_features;++j) { crf1dm_feature_t f; int fid = crf1dm_get_featureid(&refs, j); const char *from = NULL, *to = NULL; crf1dm_get_feature(crf1dm, fid, &f); from = crf1dm_to_label(crf1dm, f.src); to = crf1dm_to_label(crf1dm, f.dst); fprintf(fp, " (%d) %s --> %s: %f\n", f.type, from, to, f.weight); } } fprintf(fp, "}\n"); fprintf(fp, "\n"); /* Dump the transition features. */ fprintf(fp, "STATE_FEATURES = {\n"); for (i = 0;i < hfile->num_attrs;++i) { crf1dm_get_attrref(crf1dm, i, &refs); for (j = 0;j < refs.num_features;++j) { crf1dm_feature_t f; int fid = crf1dm_get_featureid(&refs, j); const char *attr = NULL, *to = NULL; crf1dm_get_feature(crf1dm, fid, &f); #if 0 if (f.src != i) { fprintf(fp, "WARNING: an inconsistent attribute reference.\n"); } #endif attr = crf1dm_to_attr(crf1dm, f.src); to = crf1dm_to_label(crf1dm, f.dst); fprintf(fp, " (%d) %s --> %s: %f\n", f.type, attr, to, f.weight); } } fprintf(fp, "}\n"); fprintf(fp, "\n"); }