static void print_parse_statistics(Sentence sent, Parse_Options opts) { if (sentence_num_linkages_found(sent) > 0) { if (sentence_num_linkages_found(sent) > parse_options_get_linkage_limit(opts)) { fprintf(stdout, "Found %d linkage%s (%d of %d random " \ "linkages had no P.P. violations)", sentence_num_linkages_found(sent), sentence_num_linkages_found(sent) == 1 ? "" : "s", sentence_num_valid_linkages(sent), sentence_num_linkages_post_processed(sent)); } else { fprintf(stdout, "Found %d linkage%s (%d had no P.P. violations)", sentence_num_linkages_post_processed(sent), sentence_num_linkages_found(sent) == 1 ? "" : "s", sentence_num_valid_linkages(sent)); } if (sentence_null_count(sent) > 0) { fprintf(stdout, " at null count %d", sentence_null_count(sent)); } fprintf(stdout, "\n"); } }
static void batch_process_some_linkages(Label label, Sentence sent, Command_Options* copts) { Parse_Options opts = copts->popts; if (there_was_an_error(label, sent, opts)) { /* If we found at least one good linkage, print it. */ if (sentence_num_valid_linkages(sent) > 0) { Linkage linkage = NULL; int i; for (i=0; i<sentence_num_linkages_post_processed(sent); i++) { if (0 == sentence_num_violations(sent, i)) { linkage = linkage_create(i, sent, opts); break; } } process_linkage(linkage, copts); linkage_delete(linkage); } fprintf(stdout, "+++++ error %d\n", batch_errors); } else { if (test_enabled(test, "batch-print-parse-statistics")) { print_parse_statistics(sent, opts, copts); } } }
/* * call-seq: * sentence.linkages -> array * * Returns an Array of LinkParser::Linkage objects which represent the * parts parsed from the sentence for the current linkage. * */ static VALUE rlink_sentence_linkages( VALUE self ) { struct rlink_sentence *ptr = get_sentence( self ); int i, count = 0; VALUE rary; if ( !RTEST(ptr->parsed_p) ) rlink_sentence_parse( 0, 0, self ); count = sentence_num_valid_linkages( (Sentence)ptr->sentence ); rary = rb_ary_new2( count ); for ( i = 0; i < count; i++ ) { VALUE linkage; VALUE args[2]; args[0] = INT2FIX( i ); args[1] = self; linkage = rb_class_new_instance( 2, args, rlink_cLinkage ); rb_ary_store( rary, i, linkage ); } return rary; }
static int there_was_an_error(Label label, Sentence sent, Parse_Options opts) { if (sentence_num_valid_linkages(sent) > 0) { if (label == UNGRAMMATICAL) { batch_errors++; return UNGRAMMATICAL; } if ((sentence_disjunct_cost(sent, 0) == 0.0) && (label == PARSE_WITH_DISJUNCT_COST_GT_0)) { batch_errors++; return PARSE_WITH_DISJUNCT_COST_GT_0; } } else { if (label != UNGRAMMATICAL) { batch_errors++; return UNGRAMMATICAL; } } return 0; }
static void batch_process_some_linkages(Label label, Sentence sent, Command_Options* copts) { Parse_Options opts = copts->popts; if (there_was_an_error(label, sent, opts)) { /* If linkages were found, print them */ if (sentence_num_linkages_found(sent) > 0) { Linkage linkage = NULL; /* If we found at least one good linkage, print it. */ if (sentence_num_valid_linkages(sent) > 0) { int i; for (i=0; i<sentence_num_linkages_post_processed(sent); i++) { if (0 == sentence_num_violations(sent, i)) { linkage = linkage_create(i, sent, opts); break; } } } else { /* This linkage will be bad; no good ones were found. */ linkage = linkage_create(0, sent, opts); } process_linkage(linkage, copts); linkage_delete(linkage); } fprintf(stdout, "+++++ error %d\n", batch_errors); } else { if (strstr(test, ",batch_print_parse_statistics,")) { print_parse_statistics(sent, opts); } } }
static int process_some_linkages(Sentence sent, Command_Options* copts) { int c; int i, num_to_query, num_to_display, num_displayed; Linkage linkage; double corpus_cost; Parse_Options opts = copts->popts; if (verbosity > 0) print_parse_statistics(sent, opts); num_to_query = sentence_num_linkages_post_processed(sent); if (!copts->display_bad) { num_to_display = MIN(sentence_num_valid_linkages(sent), DISPLAY_MAX); } else { num_to_display = MIN(num_to_query, DISPLAY_MAX); } for (i=0, num_displayed=0; i<num_to_query; i++) { if ((sentence_num_violations(sent, i) > 0) && !copts->display_bad) { continue; } linkage = linkage_create(i, sent, opts); /* Currently, sat solver returns NULL when there ain't no more */ if (!linkage) break; if (verbosity > 0) { if ((sentence_num_valid_linkages(sent) == 1) && !copts->display_bad) { fprintf(stdout, " Unique linkage, "); } else if (copts->display_bad && (sentence_num_violations(sent, i) > 0)) { fprintf(stdout, " Linkage %d (bad), ", num_displayed+1); } else { fprintf(stdout, " Linkage %d, ", num_displayed+1); } corpus_cost = linkage_corpus_cost(linkage); if (corpus_cost < 0.0f) { fprintf(stdout, "cost vector = (UNUSED=%d DIS=%5.2f LEN=%d)\n", linkage_unused_word_cost(linkage), linkage_disjunct_cost(linkage), linkage_link_cost(linkage)); } else { fprintf(stdout, "cost vector = (CORP=%6.4f UNUSED=%d DIS=%5.2f LEN=%d)\n", corpus_cost, linkage_unused_word_cost(linkage), linkage_disjunct_cost(linkage), linkage_link_cost(linkage)); } } process_linkage(linkage, copts); linkage_delete(linkage); if (++num_displayed < num_to_display) { if (!strstr(test, ",auto-next-linkage,")) { if (verbosity > 0) { fprintf(stdout, "Press RETURN for the next linkage.\n"); } c = fget_input_char(stdin, stdout, copts); if (c != '\n') return c; } } else { break; } } return 'x'; }
//############################################################################################################ static int process_some_linkages(Sentence sent, Parse_Options opts , int num ,char * tmp_path,char * file_name) //############################################################################################################ { int c; int i, num_displayed, num_to_query; Linkage linkage; double corpus_cost; if (verbosity > 0) print_parse_statistics(sent, opts); if (!parse_options_get_display_bad(opts)) { num_to_query = MIN(sentence_num_valid_linkages(sent), DISPLAY_MAX); } else { num_to_query = MIN(sentence_num_linkages_post_processed(sent), DISPLAY_MAX); } for (i=0, num_displayed=0; i<num_to_query; i++) { /*###########################*/ if (i==num) { /*###########################*/ if ((sentence_num_violations(sent, i) > 0) && (!parse_options_get_display_bad(opts))) { continue; } linkage = linkage_create(i, sent, opts); if (verbosity > 0) { if ((sentence_num_valid_linkages(sent) == 1) && (!parse_options_get_display_bad(opts))) { // fprintf(stdout, " Unique linkage, "); } else if ((parse_options_get_display_bad(opts)) && (sentence_num_violations(sent, i) > 0)) { // fprintf(stdout, " Linkage %d (bad), ", i+1); } else { // fprintf(stdout, " Linkage %d, ", i+1); } if (!linkage_is_canonical(linkage)) { // fprintf(stdout, "non-canonical, "); } if (linkage_is_improper(linkage)) { // fprintf(stdout, "improper fat linkage, "); } if (linkage_has_inconsistent_domains(linkage)) { // fprintf(stdout, "inconsistent domains, "); } corpus_cost = linkage_corpus_cost(linkage); if (corpus_cost < 0.0f) { /* fprintf(stdout, "cost vector = (UNUSED=%d DIS=%d AND=%d LEN=%d)\n", linkage_unused_word_cost(linkage), linkage_disjunct_cost(linkage), linkage_and_cost(linkage), linkage_link_cost(linkage));*/ } else { /* fprintf(stdout, "cost vector = (CORP=%6.4f UNUSED=%d DIS=%d AND=%d LEN=%d)\n", corpus_cost, linkage_unused_word_cost(linkage), linkage_disjunct_cost(linkage), linkage_and_cost(linkage), linkage_link_cost(linkage)); */ } } //################################################## process_linkage(linkage, opts,tmp_path,file_name); //################################################## // process_linkage(linkage, opts); linkage_delete(linkage); if (++num_displayed < num_to_query) { if (verbosity > 0) { // fprintf(stdout, "Press RETURN for the next linkage.\n"); } c = fget_input_char(stdin, stdout, opts); if (c != '\n') return c; } /*##################*/ } // if num /*#################*/ } return 'x'; }
void process_some_linkages(Sentence sent, Parse_Options opts) { int i, c, num_displayed, num_to_query; Linkage linkage; if (verbosity > 0) print_parse_statistics(sent, opts); if (!parse_options_get_display_bad(opts)) { num_to_query = MIN(sentence_num_valid_linkages(sent), DISPLAY_MAX); } else { num_to_query = MIN(sentence_num_linkages_post_processed(sent), DISPLAY_MAX); } for (i=0, num_displayed=0; i<num_to_query; ++i) { if ((sentence_num_violations(sent, i) > 0) && (!parse_options_get_display_bad(opts))) { continue; } linkage = linkage_create(i, sent, opts); if (verbosity > 0) { if ((sentence_num_valid_linkages(sent) == 1) && (!parse_options_get_display_bad(opts))) { fprintf(stdout, " Unique linkage, "); } else if ((parse_options_get_display_bad(opts)) && (sentence_num_violations(sent, i) > 0)) { fprintf(stdout, " Linkage %d (bad), ", i+1); } else { fprintf(stdout, " Linkage %d, ", i+1); } if (!linkage_is_canonical(linkage)) { fprintf(stdout, "non-canonical, "); } if (linkage_is_improper(linkage)) { fprintf(stdout, "improper fat linkage, "); } if (linkage_has_inconsistent_domains(linkage)) { fprintf(stdout, "inconsistent domains, "); } fprintf(stdout, "cost vector = (UNUSED=%d DIS=%d AND=%d LEN=%d)\n", linkage_unused_word_cost(linkage), linkage_disjunct_cost(linkage), linkage_and_cost(linkage), linkage_link_cost(linkage)); } process_linkage(linkage, opts); linkage_delete(linkage); if (++num_displayed < num_to_query) { if (verbosity > 0) { fprintf(stdout, "Press RETURN for the next linkage.\n"); } if ((c=fget_input_char(stdin, stdout, opts)) != '\n') { ungetc(c, stdin); input_pending = TRUE; break; } } } }
static const char *process_some_linkages(FILE *in, Sentence sent, Command_Options* copts) { int i, num_to_query, num_to_display, num_displayed; Linkage linkage; double corpus_cost; Parse_Options opts = copts->popts; int display_max = DISPLAY_MAX; bool auto_next_linkage = false; i = auto_next_linkage_test(test); if (i != 0) { display_max = i; auto_next_linkage = true; } if (verbosity > 0) print_parse_statistics(sent, opts, copts); num_to_query = sentence_num_linkages_post_processed(sent); if (!copts->display_bad) { num_to_display = MIN(sentence_num_valid_linkages(sent), display_max); } else { num_to_display = MIN(num_to_query, display_max); } for (i=0, num_displayed=0; i<num_to_query; i++) { if ((sentence_num_violations(sent, i) > 0) && !copts->display_bad) { continue; } linkage = linkage_create(i, sent, opts); /* Currently, sat solver sets the linkage violation indication * only when it creates the linkage as a result of the above call. */ if ((sentence_num_violations(sent, i) > 0) && !copts->display_bad) { continue; } /* Currently, sat solver returns NULL when there ain't no more */ if (!linkage) { if (verbosity > 0) { if (0 == i) fprintf(stdout, "No linkages found.\n"); else fprintf(stdout, "No more linkages.\n"); } break; } if (verbosity > 0) { if ((sentence_num_valid_linkages(sent) == 1) && !copts->display_bad) { fprintf(stdout, "\tUnique linkage, "); } else if (copts->display_bad && (sentence_num_violations(sent, i) > 0)) { fprintf(stdout, "\tLinkage %d (bad), ", num_displayed+1); } else { fprintf(stdout, "\tLinkage %d, ", num_displayed+1); } corpus_cost = linkage_corpus_cost(linkage); if (corpus_cost < 0.0f) { fprintf(stdout, "cost vector = (UNUSED=%d DIS=%5.2f LEN=%d)\n", linkage_unused_word_cost(linkage), linkage_disjunct_cost(linkage), linkage_link_cost(linkage)); } else { fprintf(stdout, "cost vector = (CORP=%6.4f UNUSED=%d DIS=%5.2f LEN=%d)\n", corpus_cost, linkage_unused_word_cost(linkage), linkage_disjunct_cost(linkage), linkage_link_cost(linkage)); } } process_linkage(linkage, copts); linkage_delete(linkage); if (++num_displayed < num_to_display) { if (!auto_next_linkage) { if ((verbosity > 0) && (!copts->batch_mode) && isatty_stdin && isatty_stdout) { fprintf(stdout, "Press RETURN for the next linkage.\n"); } char *rc = fget_input_string(stdin, stdout, /*check_return*/true); if ((NULL == rc) || (*rc != '\n')) return rc; } } else { break; } } return "x"; }
/* * Class: LinkGrammar * Method: numLinkages * Signature: ()I */ JNIEXPORT jint JNICALL Java_org_linkgrammar_LinkGrammar_getNumLinkages(JNIEnv *env, jclass cls) { per_thread_data *ptd = get_ptd(env, cls); return sentence_num_valid_linkages(ptd->sent); }