/* * ------------------------------------------------------------------------ * * "rcqpCmd_attribute_size(SEXP inAttribute)" -- * * * * ------------------------------------------------------------------------ */ SEXP rcqpCmd_attribute_size(SEXP inAttribute) { SEXP result = R_NilValue; char * a; Attribute * attribute; int size; int found = 0; if (!isString(inAttribute) || length(inAttribute) != 1) error("argument 'attribute' must be a string"); PROTECT(inAttribute); a = (char*)CHAR(STRING_ELT(inAttribute,0)); /* Need to try all possible attribute types */ attribute = cqi_lookup_attribute(a, ATT_POS); if (attribute != NULL) { size = cl_max_cpos(attribute); if (size < 0) { UNPROTECT(1); rcqp_send_error(); } else { found = 1; } } else { attribute = cqi_lookup_attribute(a, ATT_STRUC); if (attribute != NULL) { size = cl_max_struc(attribute); if (size < 0) { size = 0; } else { found = 1; } } else { attribute = cqi_lookup_attribute(a, ATT_ALIGN); if (attribute != NULL) { size = cl_max_alg(attribute); if (size < 0) { UNPROTECT(1); rcqp_send_error(); } else { found = 1; } } else { UNPROTECT(1); rcqp_error_code(cqi_errno); } } } if (found) { result = PROTECT(allocVector(INTSXP, 1)); INTEGER(result)[0] = size; } UNPROTECT(2); return result; }
void do_cqi_cl_attribute_size(void) { char *a; Attribute *attribute; int size; a = cqi_read_string(); /* need to try all possible attribute types */ if (server_debug) Rprintf( "CQi: CQI_CL_ATTRIBUTE_SIZE('%s')\n", a); attribute = cqi_lookup_attribute(a, ATT_POS); if (attribute != NULL) { size = cl_max_cpos(attribute); if (size < 0) { send_cl_error(); } else { cqi_data_int(size); } } else { attribute = cqi_lookup_attribute(a, ATT_STRUC); if (attribute != NULL) { size = cl_max_struc(attribute); if (size < 0) { /* send_cl_error(); */ /* current version of CL considers 0 regions a data access error condition, but we want to allow that */ cqi_data_int(0); } else { cqi_data_int(size); } } else { attribute = cqi_lookup_attribute(a, ATT_ALIGN); if (attribute != NULL) { size = cl_max_alg(attribute); if (size < 0) { send_cl_error(); } else { cqi_data_int(size); } } else { cqi_command(cqi_errno); /* return errno from the last lookup */ } } } free(a); }
/** * Prints statistical information about a corpus to STDOUT. * * Each corpus attribute gets info printed about it: * tokens and types for a P-attribute, number of instances * of regions for an S-attribute, number of alignment * blocks for an A-attribute. * * @param corpus The corpus to analyse. */ void describecorpus_show_statistics (Corpus *corpus) { Attribute *a; int tokens, types, regions, blocks; for (a = corpus->attributes; a; a = a->any.next) { switch(a->any.type) { case ATT_POS: Rprintf("p-ATT %-16s ", a->any.name); tokens = cl_max_cpos(a); types = cl_max_id(a); if ((tokens > 0) && (types > 0)) Rprintf("%10d tokens, %8d types", tokens, types); else Rprintf(" NO DATA"); break; case ATT_STRUC: Rprintf("s-ATT %-16s ", a->any.name); regions = cl_max_struc(a); if (regions >= 0) { Rprintf("%10d regions", regions); if (cl_struc_values(a)) Rprintf(" (with annotations)"); } else Rprintf(" NO DATA"); break; case ATT_ALIGN: Rprintf("a-ATT %-16s ", a->any.name); blocks = cl_max_alg(a); if (blocks >= 0) { Rprintf("%10d alignment blocks", blocks); if (cl_has_extended_alignment(a)) Rprintf(" (extended)"); } else Rprintf(" NO DATA"); break; default: Rprintf("??? %-16s (unknown attribute type)", a->any.name); break; } Rprintf("\n"); } Rprintf("\n"); }