void prune_irrelevant_rules(Postprocessor *pp) { /* call this (a) after having called post_process_scan_linkage() on all generated linkages, but (b) before calling post_process() on any particular linkage. Here we mark all rules which we know (from having accumulated a set of link names appearing in *any* linkage) won't ever be needed. */ pp_rule *rule; int coIDX, cnIDX, rcoIDX=0, rcnIDX=0; /* If we didn't scan any linkages, there's no pruning to be done. */ if (pp_linkset_population(pp->set_of_links_of_sentence)==0) return; for (coIDX=0;;coIDX++) { rule = &(pp->knowledge->contains_one_rules[coIDX]); if (rule->msg==NULL) break; if (pp_linkset_match_bw(pp->set_of_links_of_sentence, rule->selector)) { /* mark rule as being relevant to this sentence */ pp->relevant_contains_one_rules[rcoIDX++] = coIDX; pp_linkset_add(pp->set_of_links_in_an_active_rule, rule->selector); } } pp->relevant_contains_one_rules[rcoIDX] = -1; /* end sentinel */ for (cnIDX=0;;cnIDX++) { rule = &(pp->knowledge->contains_none_rules[cnIDX]); if (rule->msg==NULL) break; if (pp_linkset_match_bw(pp->set_of_links_of_sentence, rule->selector)) { pp->relevant_contains_none_rules[rcnIDX++] = cnIDX; pp_linkset_add(pp->set_of_links_in_an_active_rule, rule->selector); } } pp->relevant_contains_none_rules[rcnIDX] = -1; if (verbosity>1) { printf("Saw %i unique link names in all linkages.\n", pp_linkset_population(pp->set_of_links_of_sentence)); printf("Using %i 'contains one' rules and %i 'contains none' rules\n", rcoIDX, rcnIDX); } }
/** * Call this (a) after having called post_process_scan_linkage() on all * generated linkages, but (b) before calling post_process() on any * particular linkage. Here we mark all rules which we know (from having * accumulated a set of link names appearing in *any* linkage) that won't * ever be needed. */ static void prune_irrelevant_rules(Postprocessor *pp) { pp_rule *rule; int coIDX, cnIDX, rcoIDX = 0, rcnIDX = 0; /* If we didn't scan any linkages, there's no pruning to be done. */ if (pp_linkset_population(pp->set_of_links_of_sentence) == 0) return; for (coIDX = 0; ; coIDX++) { rule = &(pp->knowledge->contains_one_rules[coIDX]); if (rule->msg == NULL) break; if (pp_linkset_match_bw(pp->set_of_links_of_sentence, rule->selector)) { /* Mark rule as being relevant to this sentence */ pp->relevant_contains_one_rules[rcoIDX++] = coIDX; pp_linkset_add(pp->set_of_links_in_an_active_rule, rule->selector); } } pp->relevant_contains_one_rules[rcoIDX] = -1; /* end sentinel */ for (cnIDX = 0; ; cnIDX++) { rule = &(pp->knowledge->contains_none_rules[cnIDX]); if (rule->msg == NULL) break; if (pp_linkset_match_bw(pp->set_of_links_of_sentence, rule->selector)) { pp->relevant_contains_none_rules[rcnIDX++] = cnIDX; pp_linkset_add(pp->set_of_links_in_an_active_rule, rule->selector); } } pp->relevant_contains_none_rules[rcnIDX] = -1; if (debug_level(5)) { printf("PP: Saw %zd unique link names in all linkages.\n", pp_linkset_population(pp->set_of_links_of_sentence)); printf("PP: Using %i 'contains one' rules and %i 'contains none' rules\n", rcoIDX, rcnIDX); } }