示例#1
0
文件: word.c 项目: AIDman/Kaldi
void *append_WORD_no_NULL(void *p1, void *p2){
    WORD *tw, *w1 = (WORD *)p1, *w2 = (WORD *)p2;

    tw = get_WORD(); 
    tw->use = 1;
    tw->T1 = w1->T1;
    tw->T2 = w2->T2;
    tw->T_dur = tw->T2 - tw->T1; 
    tw->weight = w1->weight + w2->weight; 
    tw->conf = (w1->conf + w2->conf) / 2.0;
    tw->frag_corr = (w1->frag_corr && w2->frag_corr);

    if (w1->opt_del && w2->opt_del){
      tw->intern_value =
	TEXT_strdup((TEXT*)rsprintf("%s%s",
			      (! w1->opt_del) ? w1->value : w1->intern_value,
			      (! w2->opt_del) ? w2->value : w2->intern_value));
      tw->value = 
      	TEXT_strdup((TEXT*)rsprintf(WORD_OPT_DEL_PRE_STR "%s"
				    WORD_OPT_DEL_POST_STR, tw->intern_value));

      tw->opt_del = TRUE;
    } else {
      if (TEXT_strcmp(w1->value, (TEXT *)"@") == 0)
	tw->value = TEXT_strdup((! w2->opt_del) ? w2->value : w2->intern_value);
      else if (TEXT_strcmp(w2->value,(TEXT *)"@") == 0)
	tw->value = TEXT_strdup((! w1->opt_del) ? w1->value : w1->intern_value);
      else
	tw->value = TEXT_add((! w1->opt_del) ? w1->value : w1->intern_value,
			     (! w2->opt_del) ? w2->value : w2->intern_value);
    }

    return(tw);
}
示例#2
0
文件: word.c 项目: AIDman/Kaldi
WORD *new_WORD(TEXT *t, int id, double t1, double t2, double conf, TEXT *tag1, TEXT *tag2, int fcorr, int odel, double weight){
    WORD *tw = get_WORD();
    int len;
    
    tw->use = 1;
    if (t != (TEXT *)0){
      len = TEXT_strlen(t);
      if (len > 1 && *(t + len - 1) == '*')
	tw->value = TEXT_strndup(t,len-1);
      else
	tw->value = TEXT_strdup(t);
    }
    tw->tag1  = (tag1 == (TEXT *)0) ? tag1 : TEXT_strdup(tag1);
    tw->tag2  = (tag2 == (TEXT *)0) ? tag2 : TEXT_strdup(tag2);
    tw->value_id = id;
    tw->T1 = t1;
    tw->T2 = t2;
    tw->T_dur = t2 - t1;
    tw->weight = weight;
    tw->conf = conf;
    tw->frag_corr = fcorr;
    tw->opt_del = odel;
    return(tw);
}
示例#3
0
文件: range.c 项目: usnistgov/SCTK
static void print_gnu_range_graph(RANK *rank, char *percent_desc, char *testname, char *base, int for_blks, int feedback)
{
    int b,t;
    FILE *fp_dat, *fp_mean, *fp_plt, *fp_median;
    double sum;
    TEXT *mean_name = (TEXT *)0, *dat_name = (TEXT *)0;
    TEXT *plt_name = (TEXT *)0, *basename = (TEXT *)0;
    TEXT *median_name = (TEXT *)0;
    double *pctt, *rnkk;
    int *ind;

    alloc_singarr(pctt,MAX( rank->n_blk , rank->n_trt ),double);
    alloc_singarr(rnkk,MAX( rank->n_blk , rank->n_trt ),double);
    alloc_singarr(ind,MAX( rank->n_blk , rank->n_trt ),int);

    basename = TEXT_strdup((TEXT *)rsprintf("%s%s",(strcmp(base,"-")==0) ? "STATS" : base,
	    (for_blks) ? ".spk" : ".sys"));
    dat_name = TEXT_strdup((TEXT *)rsprintf("%s%s",basename,".dat"));
    /* make the datafiles for the treatements */
    if ((fp_dat = fopen(dat_name,"w")) == (FILE *)0){
	fprintf(stderr,"Error: unable to open GNUPLOT data file %s\n",
		dat_name);
	exit(1);
    } else
	if (feedback >= 1) printf("        Output written to '%s.*'\n",basename);

    mean_name = TEXT_strdup((TEXT *)rsprintf("%s%s",basename,".mean"));
    if ((fp_mean = fopen(mean_name,"w")) == (FILE *)0){
	fprintf(stderr,"Error: unable to open GNUPLOT data file %s\n",
		mean_name);
	exit(1);
    }
    median_name = TEXT_strdup((TEXT *)rsprintf("%s%s",basename,".median"));
    if ((fp_median = fopen(median_name,"w")) == (FILE *)0){
	fprintf(stderr,"Error: unable to open GNUPLOT data file %s\n",
		median_name);
	exit(1);
    }
    plt_name = TEXT_strdup((TEXT *)rsprintf("%s%s",basename,".plt"));
    if ((fp_plt = fopen(plt_name,"w")) == (FILE *)0){
	fprintf(stderr,"Error: unable to open GNUPLOT file %s\n",
		plt_name);
	exit(1);
    } 
    fprintf(fp_plt,"set yrange [%d:0]\n",
	    1 + ((for_blks) ?rank->n_blk  :rank->n_trt ));
    fprintf(fp_plt,"set xrange [0:100]\n");
    fprintf(fp_plt,"set title \"%s\"\n",testname);
    fprintf(fp_plt,"set key\n");
    fprintf(fp_plt,"set ylabel \"%s\"\n",(for_blks) ? "Speaker ID" :"Systems");
    fprintf(fp_plt,"set xlabel \"%s\"\n",percent_desc);
    fprintf(fp_plt,"set ytics (");

    if (for_blks){
	for (b=0;b< rank->n_blk ;b++){
	    double medianval=0.0;
	    sum = 0.0;
	    for (t=0;t< rank->n_trt ;t++){
		fprintf(fp_dat,"%d %f\n",
			b+1,rank->pcts [ rank->trt_srt_ind [ b ]  ][ t ] );
		pctt[t] = rank->pcts [ rank->trt_srt_ind [ b ]  ][ t ] ;
		sum += rank->pcts [ rank->trt_srt_ind [ b ]  ][ t ] ;
	    }

	    rank_double_arr(pctt, rank->n_trt ,ind,rnkk,INCREASING);
	    if ( rank->n_trt  % 2 == 0) { /* handle the even arr len */
		medianval = (pctt[ind[ rank->n_trt  / 2]] + 
			     pctt[ind[( rank->n_trt  / 2) - 1]]) / 2.0;
	    } else { /* handle the odd arr len */
		medianval = pctt[ind[ rank->n_trt  / 2]];
	    }
	    fprintf(fp_mean,"%d %f\n",b+1,sum / (double)( rank->n_trt ));
	    fprintf(fp_median,"%d %f\n",b+1,medianval);
	    fprintf(fp_plt,"\"%s\" %d",rank->blk_name[rank->trt_srt_ind[b]],
		    b+1);
	    if (b !=rank->n_blk -1)
		fprintf(fp_plt,",");
	}
	fprintf(fp_plt,")\n");
    } else {
	for (t=0;t< rank->n_trt ;t++){
	    double medianval=0.0;
	    sum = 0.0;

	    for (b=0;b< rank->n_blk ;b++){
		fprintf(fp_dat,"%d %f\n",
			t+1,rank->pcts [ b ][ rank->blk_srt_ind [ t ]  ] );
		pctt[b] = rank->pcts [ b ][ rank->blk_srt_ind [ t ]  ] ;
		sum += rank->pcts [ b ][ rank->blk_srt_ind [ t ]  ] ;
	    }
    rank_double_arr(pctt, rank->n_blk ,ind,rnkk,INCREASING);
	    if ( rank->n_blk  % 2 == 0) { /* handle the even arr len */
		medianval = (pctt[ind[ rank->n_blk  / 2]] + 
			     pctt[ind[( rank->n_blk  / 2) - 1]]) / 2.0;
	    } else { /* handle the odd arr len */
		medianval = pctt[ind[ rank->n_blk  / 2]];
	    }
	    fprintf(fp_mean,"%d %f\n",t+1,sum / (double)(rank->n_blk ));
	    fprintf(fp_median,"%d %f\n",t+1,medianval);
	    fprintf(fp_plt,"\"%s\" %d",rank->trt_name[rank->blk_srt_ind[t]],
		    t+1);
	    if (t !=rank->n_trt -1)
		fprintf(fp_plt,",");
	}
	fprintf(fp_plt,")\n");
    }

    fprintf(fp_plt,"plot \"%s\" using 2:1 title \"Mean %s\" with lines,",
	    mean_name, percent_desc);
    fprintf(fp_plt,"\"%s\" using 2:1 title \"Median %s\" with lines,",
	    median_name, percent_desc);
    fprintf(fp_plt,"\"%s\" using 2:1 title \"Individual %s\"\n",dat_name,
	    percent_desc);
    fclose(fp_dat);
    fclose(fp_mean);
    fclose(fp_median);
    fclose(fp_plt);

    free_singarr(mean_name  , TEXT);
    free_singarr(dat_name   , TEXT);
    free_singarr(plt_name   , TEXT);
    free_singarr(basename   , TEXT);
    free_singarr(median_name, TEXT);

    free_singarr(pctt,double);
    free_singarr(rnkk,double);
    free_singarr(ind,int);
}
示例#4
0
文件: sc_stats.c 项目: AIDman/Kaldi
void run_multi_sys(SCORES *scor[],int nscor,char *out_dir,int stats,int stats_verbose,int stats_unified, int stats_graphs, char *stats_out_name, char *stats_formula, char *stats_test_name, int reports, int feedback, int linewidth)
{
    RANK rank;
    int nwin=0, **winner[15];
    double **confidence[15];
    char *win_desc[15], *win_id[15], *stat_form_str=formula_str(stats_formula);
    char outroot[200], *sign_str=(char *)0, *wilc_str=(char *)0;
    char outname[200];

    if (feedback >= 1)
	printf("Beginning Multi-System comparisons and reports\n");

    if (strcmp(stats_out_name,"-") == 0)
	strcpy(outroot,stats_out_name);
    else
	sprintf(outroot,"%s%s%s",
		((out_dir != (char *)0) ? out_dir : ""),
		((out_dir != (char *)0) ? "/" : ""),
		stats_out_name);
    /* printf("Out Root = %s\n",outroot); */
    if (strcmp("-",outroot) == 0)
	strcpy(outname,outroot);
    else
	sprintf(outname,"%s.%s",outroot,"stats");


    if (stats > 0 || stats_graphs > 0)
	init_RANK_struct_from_SCORES(&rank, scor, nscor, stats_formula);

    /*    dump_full_RANK_struct(&rank, "Systems", "Speakers", "", "",stats_formula,
			  "test name", "Speaker ranks for the system",
			  "System ranks for the speaker");  */

    if ((stats & STAT_MAPSSWE) > 0){
	win_desc[nwin] = "Matched Pair Sentence Segment (Word Error)";
	win_id[nwin] = "MP";
	if (feedback >= 1) 
	    printf("    Performing the %s Test\n",win_desc[nwin]);
	do_mtch_pairs(scor, nscor, "2", stats_test_name, 
		      !stats_unified, stats_verbose, &winner[nwin],
		      outname, feedback, &confidence[nwin]);
	nwin++;
    }

    if ((stats & STAT_MAPSSWE_SEG) > 0){
        do_mtch_pairs_seg_analysis(scor, nscor, stats_test_name, 1, 1);
    }
    
    if ((stats & STAT_SIGN) > 0){
	win_desc[nwin] = (char *)TEXT_strdup((TEXT*)rsprintf("%s (%s)",
					     "Signed Paired Comparison",
						      stat_form_str));
	sign_str = win_desc[nwin];
	win_id[nwin] = "SI";
	if (feedback >= 1) 
	    printf("    Performing the %s Test\n",win_desc[nwin]);
	perform_signtest(&rank, stats_verbose, !stats_unified, 
			 stat_form_str, *stats_formula, &winner[nwin],
			 outname, feedback, &confidence[nwin]);
	nwin++;
    }

    if ((stats & STAT_WILC) > 0){
	win_desc[nwin] = (char*)TEXT_strdup((TEXT *)rsprintf("%s (%s)",
					 "Wilcoxon Signed Rank",
					 stat_form_str));
	wilc_str = win_desc[nwin];
	win_id[nwin] = "WI";
	if (feedback >= 1) 
	    printf("    Performing the %s Test\n",win_desc[nwin]);
	perform_wilcoxon(&rank, stats_verbose, !stats_unified,
			 stat_form_str, *stats_formula, &winner[nwin],
			 outname, feedback, &confidence[nwin]);
	nwin++;
    }

    if ((stats & STAT_MCN) > 0){
	win_desc[nwin] = "McNemar (Sentence Error)"; win_id[nwin] = "MN";
	if (feedback >= 1) 
	    printf("    Performing the %s Test\n",win_desc[nwin]);
	McNemar_sent(scor, nscor, &winner[nwin], stats_test_name,
		     !stats_unified, stats_verbose,outname,
		     feedback, &confidence[nwin]);
	nwin++;
    }

    if ((stats & STAT_ANOVAR) > 0){
	win_desc[nwin] = "Analysis of Variance by Ranks";
	win_id[nwin] = "AN";
	if (feedback >= 1) 
	    printf("    Performing the %s Test\n",win_desc[nwin]);
	compute_anovar(&rank, stats_verbose, !stats_unified, 
		       &winner[nwin],outname,feedback,&confidence[nwin]);
	nwin++;
    }

    if (stats_unified){
	if (feedback >= 1) 
	    printf("    Printing Unified Statistical Test Reports\n");
#define new
#ifdef new
	print_composite_significance2(&rank, 80, nwin, winner, confidence,
				      win_desc, win_id,
				      1 /*matrix*/, 1 /*int report*/,
				      stats_test_name,outname, feedback,
				      (out_dir != (char *)0) ? out_dir : "");
#endif
#ifdef old
	print_composite_significance(&rank, 80, nwin, winner,
				      win_desc, win_id,
				      1 /*matrix*/, 1 /*int report*/,
				      stats_test_name,outname,feedback,
				      (out_dir != (char *)0) ? out_dir : "");
#endif
    }

    
    if ((stats_graphs & GRAPH_RANGE) > 0){
	if (strcmp("-",outroot) == 0)
	    strcpy(outname,outroot);
	else
	    sprintf(outname,"%s.%s",outroot,"range");
	if (feedback >= 1) printf("    Printing Range Graphs\n");
	print_rank_ranges(&rank, stat_form_str,stats_test_name, outname, feedback);
    }

    if ((stats_graphs & GRAPH_GRANGE) > 0){
	if (strcmp("-",outroot) == 0)
	    strcpy(outname,outroot);
	else
	    sprintf(outname,"%s.%s",outroot,"grange");
	if (feedback >= 1) printf("    Printing GNUPLOT Range Graphs\n");
	print_gnu_rank_ranges(&rank, stat_form_str,stats_test_name, outname, feedback);
    }
    if ((stats_graphs & GRAPH_GRANGE2) > 0){
	if (strcmp("-",outroot) == 0)
	    strcpy(outname,outroot);
	else
	    sprintf(outname,"%s.%s",outroot,"grange2");
	if (feedback >= 1) printf("    Printing GNUPLOT Range Graphs V2\n");
	print_gnu_rank_ranges2(&rank, stat_form_str,stats_test_name, outname, feedback);
    }

    if ((stats_graphs & GRAPH_DET) > 0){
      if (strcmp("-",outroot) != 0){
	if (make_SCORES_DET_curve(scor, nscor,outroot,feedback,stats_test_name)
	    != 0)
	  exit(1);
      } else {
	fprintf(scfp,"Warning: DET plot can not go to STDOUT\n");
      }
    }

    strcpy(outname,outroot);

    if ((reports & REPORT_SUM) > 0)
	print_N_system_summary(scor, nscor, outname, stats_test_name, 0, feedback);

    if ((reports & REPORT_RSUM) > 0)
	print_N_system_summary(scor, nscor, outname, stats_test_name, 1,
			       feedback);
    if ((reports & REPORT_ESUM) > 0)
	print_N_system_executive_summary(scor, nscor, outname,
					 stats_test_name, 0, feedback);
    if ((reports & REPORT_RESUM) > 0)
	print_N_system_executive_summary(scor, nscor, outname,
					 stats_test_name, 1, feedback);
    if ((reports & REPORT_PRN) > 0)
	print_N_SCORE(scor, nscor, outname, linewidth, feedback, 0);

    if ((reports & REPORT_LUR) > 0)
	print_N_lur(scor, nscor, outname, stats_test_name, feedback);

    if (stats > 0 || stats_graphs > 0){
	int i;
	for (i=0; i<nwin; i++)
	    free_2dimarr(winner[i],rank.n_trt,int);
	free_RANK(&rank);
    }
示例#5
0
文件: word.c 项目: AIDman/Kaldi
void set_WORD_tag1(WORD *w, TEXT *t){
    if (w->tag1 != (TEXT *)0) TEXT_free(w->tag1);
    w->tag1 = TEXT_strdup(t);
}