コード例 #1
0
ファイル: post-process.c プロジェクト: Legend5/level-1-1st
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);
   } 
}
コード例 #2
0
ファイル: post-process.c プロジェクト: eugeneai/link-grammar
/**
 * 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);
	}
}