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

📄 lat_wer_3.cc

📁 这是处理语音信号的程序
💻 CC
字号:
// file: lat_wer_3.cc//// isip include files//#include "lattice.h"#include "lattice_constants.h"// method: grow_paths_cc//// arguments://  int_4 nref: (input) number of reference words//  Word** words: (input) list of reference words//  Link_list* holder: (input) the list that holds all old paths//  Link_list** lists: (input) the link lists to save paths//  Link_node** markers: (input) the link lists markers//  Lattice_path*& best: (output) the best path at this point//// return: an int_4 with number of active lists//// this method grows paths and dynamically aligns them with the// reference transcription//int_4 Lattice::grow_paths_cc(int_4 nref_a, Word** words_a,			     Link_list* holder_a, Link_list** lists_a,			     Link_node** markers_a, Lattice_path*& best_a) {  // dummy variables  //  int_4 idx = (int_4)0;  int_4 lidx = (int_4)0;  int_4 pos = (int_4)0;  int_4 type = (int_4)0;  int_4 score = (int_4)0;  logical_1 best_flag = ISIP_FALSE;  logical_1 grow_flag = ISIP_FALSE;    Word* lword = (Word*)NULL;  Lattice_node* latn = (Lattice_node*)NULL;  Lattice_node* latnode = (Lattice_node*)NULL;  Link_list* lat_list = (Link_list*)NULL;  // memory manager  //  Memory_manager* manager = Link_list::get_manager_cc();    // lattice paths  //  Lattice_path* newpath = (Lattice_path*)NULL;  Lattice_path* lpath = (Lattice_path*)NULL;   // link nodes  //  Link_node* nd = (Link_node*)NULL;  Link_node* pd = (Link_node*)NULL;    // marker nodes for active lists  //  int_4 count = (int_4)0;  int_4* active = new int_4[num_nodes_d];  for (int_4 i = 0; i < num_nodes_d; i++) {    active[i] = (int_4)-1;    markers_a[i] = (Link_node*)NULL;    if (lists_a[i] != (Link_list*)NULL) {      markers_a[i] = lists_a[i]->get_curr_cc();      if (markers_a[i] != (Link_node*)NULL) {	active[count++] = i;      }    }  }  // loop over all active link lists  //  for (int_4 i = 0; i < count; i++) {    // break if a best path is found    //    if (best_flag == ISIP_TRUE) {      break;    }        // loop over all nodes in the list    //    for (nd = lists_a[active[i]]->get_head_cc(); nd != (Link_node*)NULL;	 nd = pd) {            // get the next node      //      pd = nd->get_next_cc();            // get the lattice path and mark it as valid for growing      //      lpath = (Lattice_path*)(nd->get_item_cc());      grow_flag = ISIP_FALSE;      // lattice path parameters      //      pos = lpath->get_pos_cc();      type = lpath->get_type_cc();      score = lpath->get_score_cc();            // get the current lattice node      //      latnode = lpath->get_curr_cc();      lidx = latnode->get_node_index_cc();            // a sentence end must match with the reference sentence      // end, so no need to grow further if all words in the      // reference are covered      //      if (pos < nref_a - 1) {	// get the next possible lattice nodes	//	lat_list = latnode->get_next_nodes_cc();		// make sure this lattice node can be grown further	//	if (lat_list != (Link_list*)NULL) {	  	  // loop over all next lattice nodes	  //	  for (Link_node* lnd = lat_list->get_head_cc();	       lnd != (Link_node*)NULL; lnd = lnd->get_next_cc()) {	    	    // get the lattice node, the word and the lat node index	    //	    latn = (Lattice_node*)(lnd->get_item_cc());	    lword = latn->get_word_cc();	    idx = latn->get_node_index_cc();	    	    // compare this word with the corresponding word in the	    // reference list.	    //	    if (lword == words_a[pos + 1]) {	      	      // this word matches, so grow a new path with type	      // correct and put it in the correct list	      //	      newpath = manager->new_lpath_cc();	      newpath->project_cc(lpath, latn, LATTICE_PATH_CORRECT);	      if (best_a != (Lattice_path*)NULL) {		if (newpath->get_score_cc() >= best_a->get_score_cc()) {		  if (add_path_cc(lists_a[idx], markers_a[idx], newpath)		      == ISIP_TRUE) {		    grow_flag = ISIP_TRUE;		  }		}		else {		  manager->delete_cc(newpath);		}	      }	      else if (add_path_cc(lists_a[idx], markers_a[idx], newpath)		       == ISIP_TRUE) {		grow_flag = ISIP_TRUE;	      }	    } // end if words match	    	    // if the word is !NULL then align the !NULL to the previous	    // reference word with no penalty. It will be stripped out	    // later	    //	    else if (lword == null_word_d) {	      	      newpath = manager->new_lpath_cc();	      newpath->project_cc(lpath, latn, LATTICE_PATH_SKIP);	      if (best_a != (Lattice_path*)NULL) {		if (newpath->get_score_cc() >= best_a->get_score_cc()) {		  if (add_path_cc(lists_a[idx], markers_a[idx], newpath)		      == ISIP_TRUE) {		    grow_flag = ISIP_TRUE;		  }		}		else {		  manager->delete_cc(newpath);		}	      }	      else if (add_path_cc(lists_a[idx], markers_a[idx], newpath)		       == ISIP_TRUE) {		grow_flag = ISIP_TRUE;	      }	    } // end if words match	    	    else {	      	      // the new word cannot be a sentence end if substitution	      // or insertion	      //	      if (lword != words_a[nref_a - 1]) {				// create a substitution path and put it in the correct		// list		//		newpath = manager->new_lpath_cc();		newpath->project_cc(lpath, latn, LATTICE_PATH_SUBSTITUTION);		if (best_a != (Lattice_path*)NULL) {		  if (newpath->get_score_cc() >= best_a->get_score_cc()) {		    if (add_path_cc(lists_a[idx], markers_a[idx], newpath)			== ISIP_TRUE) {		      grow_flag = ISIP_TRUE;		    }		  }		  else {		    manager->delete_cc(newpath);		  }		}		else if (add_path_cc(lists_a[idx], markers_a[idx], newpath)			 == ISIP_TRUE) {		  grow_flag = ISIP_TRUE;		}				// create the insertion path and put it in the correct		// list		//		newpath = manager->new_lpath_cc();		newpath->project_cc(lpath, latn, LATTICE_PATH_INSERTION);		if (best_a != (Lattice_path*)NULL) {		  if (newpath->get_score_cc() >= best_a->get_score_cc()) {		    if (add_path_cc(lists_a[idx], markers_a[idx], newpath)			== ISIP_TRUE) {		      grow_flag = ISIP_TRUE;		    }		  }		  else {		    manager->delete_cc(newpath);		  }		}		else if (add_path_cc(lists_a[idx], markers_a[idx], newpath)			 == ISIP_TRUE) {		  grow_flag = ISIP_TRUE;		}	      } // end if word is not sentence end	      	      // create the deletion path and put it in the correct	      // list	      //	      newpath = manager->new_lpath_cc();	      newpath->project_cc(lpath, latnode, LATTICE_PATH_DELETION);	      if (best_a != (Lattice_path*)NULL) {		if (newpath->get_score_cc() >= best_a->get_score_cc()) {		  if (add_path_cc(lists_a[lidx], markers_a[lidx], newpath)		      == ISIP_TRUE) {		    grow_flag = ISIP_TRUE;		  }		}		else {		  manager->delete_cc(newpath);		}	      }	      else if (add_path_cc(lists_a[lidx], markers_a[lidx], newpath)		       == ISIP_TRUE) {		grow_flag = ISIP_TRUE;	      }	    } // end else make subs, ins or dels	  } // end loop over all next lattice nodes	} // end if lattice list exists      } // end if pos is not at end            // otherwise check if this is the best path      //      else {		// get the current word	//	lword = (Word*)NULL;	if (latnode != (Lattice_node*)NULL) {	  lword = latnode->get_word_cc();	}		// make sure that the utterance ends in sentence end	//	if (lword == words_a[nref_a - 1]) {	  	  // update the best path	  //	  if (best_a == (Lattice_path*)NULL) {	    best_a = lpath;	    grow_flag = ISIP_TRUE;	  }	  else if (best_a->get_score_cc() < lpath->get_score_cc()) {	    holder_a->remove_cc(best_a);	    manager->delete_cc(best_a);	    best_a = lpath;	    grow_flag = ISIP_TRUE;	  }		  // set flag if a correct hypothesis is found	  //	  if (best_a->get_score_cc() == (int_4)0) {	    best_flag = ISIP_TRUE;	  }	} // end if word is sentence end word      } // end else check best path      // add this path node to the list of paths to keep      //      if (grow_flag == ISIP_TRUE) {	holder_a->insert_cc(lpath);      }      // otherwise remove this path as it cannot grow any further      //      else {	manager->delete_cc(lpath);      }            // remove this node from the list      //      lists_a[active[i]]->remove_cc(nd);            // break if this was the marker node or a best path is found      //      if (best_flag == ISIP_TRUE) {	break;      }      if (nd == markers_a[active[i]]) {	markers_a[active[i]] = (Link_node*)NULL;	break;      }    } // end for loop over nodes  } // end for all i    // reset count if a best path is found  //  if (best_flag == ISIP_TRUE) {    count = (int_4)0;  }    // free memory  //  delete [] active;  active = (int_4*)NULL;  // exit gracefully  //  return count;}

⌨️ 快捷键说明

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