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 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 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"; }