⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ts_tree_4.cc

📁 这是处理语音信号的程序
💻 CC
字号:
// file: ts_tree_4.cc//// system include files//#include <stdlib.h>#include <string.h>#include <memory.h>#include <ctype.h>// isip include files//#include "tie_state.h"#include "tie_state_constants.h"// method: read_trees_cc//// arguments://   Decision_tree**& decision_trees: (output) the decision trees//   int_4& num_trees : (output) number of trees read//   Questions***& questions : (output) test questions//   int_4*& num_questions : (output) number of questions//   FILE* fp_in: (input) the input decision tree file//// return: a logical_1 indicating status//// this method reads in the decision trees from a file//logical_1 read_trees_cc(Decision_tree**& decision_trees_a,			int_4& num_trees_a, 			Question***& questions_a,			int_4*& num_questions_a,			FILE* fp_in_a) {    // define some local variables  //  char_1* buffer = new char_1[ISIP_MAX_STRING_LENGTH];  char_1* buffer_pos = buffer;  char_1* temp_buf = (char_1*)NULL;  char_1* delimiter = (char_1*)"=";    // parameters for decision trees  //  int_4 tree_ind = (int_4)0;  float_4 split_threshd = 0.0;  float_4 merge_threshd = 0.0;  float_4 num_occ_threshd = 0;  int_4 tree_count = 0;  char_1* cph = (char_1*)NULL;  int_4 st_pos = 0;    // paramenters for dt_node  //    Dt_node** dt_nodes = (Dt_node**)NULL;     // all the dt_nodes in a tree  int_4 level = (int_4)0;  int_4 label = (int_4)0;    Question* opt_question = (Question*)NULL;    int_4 num_nodes = (int_4)0;  int_4 curr_nd_ind = (int_4)0;  int_4 l_child_ind = (int_4)0;  int_4 r_child_ind = (int_4)0;  // define memory  //  memset((char*)buffer, 0, ISIP_MAX_STRING_LENGTH);    // read in the number of trees and common decision tree parameters  // such as thresholds  //    while (fgets((char*)buffer_pos, ISIP_MAX_STRING_LENGTH, fp_in_a) &&	 (*buffer_pos != 't')) {    // ignore the comment lines    //    if (buffer_pos[0] == (char_1)'#') {            // do nothing      //      continue;          }        else {            // find the delimited value      //      temp_buf = (char_1*)strtok((char*)buffer_pos, (char*)delimiter);            // parse this string      //      while (temp_buf != (char_1*)NULL) {		// move the pointer to first non-whitespace	//	while (isspace((char)(*temp_buf))) {	  temp_buf++;	}		// read the number of trees	//	if (strcmp((char*)temp_buf, (char*)NUM_TREES) == 0) {	  temp_buf = (char_1*)strtok((char*)NULL, (char*)delimiter);	  num_trees_a = atoi((char*)temp_buf);	  // initialize the decision trees	  //		  decision_trees_a = new Decision_tree*[num_trees_a];	  questions_a = new Question**[num_trees_a];	  num_questions_a = new int_4[num_trees_a];	  break;	}		// read the split, merge and num_occupancy  thresholds	//	else if (strcmp((char*)temp_buf, (char*)SPLIT_THRESHOLD) == 0) {	  temp_buf = (char_1*)strtok((char*)NULL, (char*)delimiter);	  split_threshd =  atof((char*)temp_buf);	  break;	}		else if (strcmp((char*)temp_buf, (char*)MERGE_THRESHOLD) == 0) {	  temp_buf = (char_1*)strtok((char*)NULL, (char*)delimiter);	  merge_threshd =  atof((char*)temp_buf);	  break;	}		else if (strcmp((char*)temp_buf, (char*)NUM_OCC_THRESHOLD) == 0) {	  temp_buf = (char_1*)strtok((char*)NULL, (char*)delimiter);	  num_occ_threshd =  atof((char*)temp_buf);		  break;	}	break;	      } // end while temp_buf is not null    } // end of else loop  } // end while fgets  // start reading each tree  //    // find the delimited value  //  temp_buf = (char_1*)strtok((char*)buffer_pos, (char*)delimiter);    // while the line is not empty  //  while (temp_buf != (char_1*)NULL) {        // move the pointer to first non-whitespace    //    while (isspace((char)(*temp_buf))) {      temp_buf++;    }        // read in the tree index and number of node    //    if (strcmp((char*)temp_buf, "tree_index") == 0) {            temp_buf = (char_1*)strtok((char*)NULL, (char*)delimiter);      tree_ind = atoi((char*)temp_buf);            // initialize a new decision tree      //      decision_trees_a[tree_ind] = new Decision_tree();      decision_trees_a[tree_ind]->set_split_threshd_cc(split_threshd);      decision_trees_a[tree_ind]->set_merge_threshd_cc(merge_threshd);      decision_trees_a[tree_ind]->set_num_occ_threshd_cc(num_occ_threshd);            // read number of nodes in this tree and initialize these nodes      //       fgets((char*)buffer_pos,ISIP_MAX_STRING_LENGTH,fp_in_a);      temp_buf = (char_1*)strtok((char*)buffer_pos, (char*)delimiter);      temp_buf = (char_1*)strtok((char*)NULL, "\n");      num_nodes = atoi((char*)temp_buf);      // set up for next tree      //      if (dt_nodes != (Dt_node**)NULL) {	delete [] dt_nodes;	dt_nodes = (Dt_node**)NULL;      }      dt_nodes = new Dt_node*[num_nodes];      questions_a[tree_ind] = new Question*[num_nodes];      num_questions_a[tree_ind] = num_nodes;            fgets((char*)buffer_pos,ISIP_MAX_STRING_LENGTH,fp_in_a);      temp_buf = (char_1*)strtok((char*)buffer_pos, (char*)delimiter);      temp_buf = (char_1*)strtok((char*)NULL, "\n");      cph = temp_buf;      decision_trees_a[tree_ind] ->set_cph_cc(cph);            fgets((char*)buffer_pos,ISIP_MAX_STRING_LENGTH,fp_in_a);      temp_buf = (char_1*)strtok((char*)buffer_pos, (char*)delimiter);      temp_buf = (char_1*)strtok((char*)NULL, "\n");      st_pos = atoi((char*)temp_buf);      decision_trees_a[tree_ind] ->set_state_pos_cc(st_pos);            for(int_4 i = 0; i< num_nodes; i++) {	dt_nodes[i] = new Dt_node();	questions_a[tree_ind][i] = new Question();      }            tree_count++;            // move on to the next word      //	      temp_buf = (char_1*)strtok((char*)NULL, (char*)delimiter);    }  }  while ((fgets((char*)buffer_pos,ISIP_MAX_STRING_LENGTH,fp_in_a)) &&	 (tree_count <= num_trees_a)) {      // find the delimited value    //    temp_buf = (char_1*)strtok((char*)buffer_pos, (char*)delimiter);        // while the line is not empty    //    while (temp_buf != (char_1*)NULL) {            // move the pointer to first non-whitespace      //      while (isspace((char)(*temp_buf))) {	temp_buf++;      }            // read in the tree index and number of node      //      if (strcmp((char*)temp_buf, "tree_index") == 0) {	temp_buf = (char_1*)strtok((char*)NULL, (char*)delimiter);	tree_ind = atoi((char*)temp_buf);		// initialize a new decision tree	//	decision_trees_a[tree_ind] = new Decision_tree();	decision_trees_a[tree_ind]->set_split_threshd_cc(split_threshd);	decision_trees_a[tree_ind]->set_merge_threshd_cc(merge_threshd);	decision_trees_a[tree_ind]->set_num_occ_threshd_cc(num_occ_threshd);		// read number of nodes in this tree and initialize these nodes	// 	fgets((char*)buffer_pos,ISIP_MAX_STRING_LENGTH,fp_in_a);	temp_buf = (char_1*)strtok((char*)buffer_pos, (char*)delimiter);	temp_buf = (char_1*)strtok((char*)NULL, "\n");	num_nodes = atoi((char*)temp_buf);	// set up for next tree	//	if (dt_nodes != (Dt_node**)NULL) {	  delete [] dt_nodes;	  dt_nodes = (Dt_node**)NULL;	}	dt_nodes = new Dt_node*[num_nodes];	questions_a[tree_ind] = new Question*[num_nodes];	num_questions_a[tree_ind] = num_nodes;      	fgets((char*)buffer_pos,ISIP_MAX_STRING_LENGTH,fp_in_a);	temp_buf = (char_1*)strtok((char*)buffer_pos, (char*)delimiter);	temp_buf = (char_1*)strtok((char*)NULL, "\n");	cph = temp_buf;	decision_trees_a[tree_ind] ->set_cph_cc(cph);	fgets((char*)buffer_pos,ISIP_MAX_STRING_LENGTH,fp_in_a);	temp_buf = (char_1*)strtok((char*)buffer_pos, (char*)delimiter);	temp_buf = (char_1*)strtok((char*)NULL, "\n");	st_pos = atoi((char*)temp_buf);	decision_trees_a[tree_ind]->set_state_pos_cc(st_pos);		for(int_4 i = 0; i< num_nodes; i++) {	  dt_nodes[i] = new Dt_node();	  questions_a[tree_ind][i] = new Question();	}	tree_count++;		// move on to the next word	//		temp_buf = (char_1*)strtok((char*)NULL, (char*)delimiter);      }      // current node index      //      else if (strcmp((char*)temp_buf, "N") == 0) {	temp_buf = (char_1*)strtok((char*)NULL, " ");	curr_nd_ind = atoi((char*)temp_buf) - 1;		// if it is the root node	//	if(curr_nd_ind == 0) {	  decision_trees_a[tree_ind]->set_root_cc(dt_nodes[curr_nd_ind]);	}		temp_buf = (char_1*)strtok((char*)NULL, (char*)delimiter);      }            // level of current node      //      else if (strcmp((char*)temp_buf, "Level") == 0) {	temp_buf = (char_1*)strtok((char*)NULL, " ");	level = atoi((char*)temp_buf);		// set the level	//	dt_nodes[curr_nd_ind]->set_level_cc(level);	temp_buf = (char_1*)strtok((char*)NULL, (char*)delimiter);      }      // read leaf flag      //      else if (strcmp((char*)temp_buf, "LF") == 0) {		temp_buf = (char_1*)strtok((char*)NULL, " ");		if(strcmp((char*)temp_buf, "N") == 0) {	  // this is not a leaf node	  //	  dt_nodes[curr_nd_ind]->set_leaf_flag_cc(ISIP_FALSE);	  // read the following non-leaf node information 	  //		  	  temp_buf = (char_1*)strtok((char*)NULL, (char*)delimiter);	  	    	  while (temp_buf != (char_1*)NULL) {	    	    // read the left child node	    //	    if(strcmp((char*)temp_buf, "Y_CH") == 0) {	      temp_buf = (char_1*)strtok((char*)NULL, " ");	    	      l_child_ind = atoi((char*)temp_buf) - 1;	      dt_nodes[curr_nd_ind]->set_l_child_cc(dt_nodes[l_child_ind]);	      dt_nodes[l_child_ind]->set_parent_cc(dt_nodes[curr_nd_ind]);	      	      temp_buf = (char_1*)strtok((char*)NULL, (char*)delimiter);	    }	    	    // read the right child node	    //	    if(strcmp((char*)temp_buf, "N_CH") == 0) {	      temp_buf = (char_1*)strtok((char*)NULL, " ");	      	      r_child_ind = atoi((char*)temp_buf) - 1;	      dt_nodes[curr_nd_ind]->set_r_child_cc(dt_nodes[r_child_ind]);	      dt_nodes[r_child_ind]->set_parent_cc(dt_nodes[curr_nd_ind]);	      temp_buf = (char_1*)strtok((char*)NULL, (char*)delimiter);	    }	  	    // read optimal question	    //	    if(strcmp((char*)temp_buf, "Q") == 0) {	      opt_question = questions_a[tree_ind][curr_nd_ind];	      temp_buf = (char_1*)strtok((char*)NULL, " ");	    	      if(strcmp((char*)temp_buf, "L")==0) {		opt_question->set_direction_cc(ISIP_TRUE);	      }	      else {		opt_question->set_direction_cc(ISIP_FALSE);	      }	      temp_buf = (char_1*)strtok((char*)NULL, "\n");	      opt_question->set_attribute_cc(temp_buf);	      dt_nodes[curr_nd_ind]->set_opt_question_cc(opt_question);	      	      temp_buf = (char_1*)strtok((char*)NULL, (char*)delimiter);	    }	  } // end read non-leaf information	} 		else {	  	  // this is a leaf node	  //	  dt_nodes[curr_nd_ind]->set_leaf_flag_cc(ISIP_TRUE);	  	  // read the following leaf node information 	  //	  	  temp_buf = (char_1*)strtok((char*)NULL, (char*)delimiter);	 	  	  while (temp_buf != (char_1*)NULL) {	    	    if(strcmp((char*)temp_buf, "State") == 0) {	      temp_buf = (char_1*)strtok((char*)NULL, " ");	      	      label = atoi((char*)temp_buf);	      dt_nodes[curr_nd_ind]->set_label_cc(label);	      temp_buf = (char_1*)strtok((char*)NULL, (char*)delimiter);	    }	    	    else {	      temp_buf = (char_1*)strtok((char*)NULL, (char*)delimiter);	    }	  }	} // end read leaf node information      }      // move on to the next word      //            else {	temp_buf = (char_1*)strtok((char*)NULL, (char*)delimiter);      }    }  }      // free memory  //  delete [] buffer;  buffer = (char_1*)NULL;  if (dt_nodes != (Dt_node**)NULL) {    delete [] dt_nodes;    dt_nodes = (Dt_node**)NULL;  }    // exit gracefully  //  return ISIP_TRUE;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -