📄 dec_write_3.cc
字号:
// file: dec_write_3.cc//// system include files//#include <memory.h>#include <string.h>// isip include files//#include "decoder.h"#include "decoder_constants.h" // method: write_output_cc//// arguments:// char_1*& nbest_hypo: (input/output) output string pointer// Path_list* final_plist: (input) final partial path list//// return: logical_1 indicating status//// this method writes the decoder output hypothesis to file// Note: for Communicator calling//logical_1 Decoder::write_nbest_cc(char_1*& nbest_hypo_a, Path_list* final_plist_a) { // check file // if (nbest_hypo_a == (char_1*)NULL) { error_handler_cc((char_1*)"write_nbest_cc", (char_1*)"NULL input nbest_hypo pointer"); } nbest_hypo_a[0] = '\0'; char_1* tmp_hypo = nbest_hypo_a; // dummy variables // int_4 num_paths = (int_4)0; int_4 frame_index = (int_4)0; static char_1* hypothesis = new char_1[ISIP_MAX_STRING_LENGTH]; static char_1* temp_string = new char_1[ISIP_MAX_STRING_LENGTH]; Lattice_node* lat_node = (Lattice_node*)NULL; Link_node* next_pnode = (Link_node*)NULL; Nbest_node* nnode = (Nbest_node*)NULL; Nbest_node* prev_node = (Nbest_node*)NULL; Word* word = (Word*)NULL; Hash_table* hyp_table = new Hash_table((int_4)ISIP_2EXP16); Hash_cell* hyp_cell = (Hash_cell*)NULL; Memory_manager* manager = Link_list::get_manager_cc(); // get the partial paths list // Link_list* path_list = final_plist_a->get_paths_cc(); // loop through this list and get unique nbest hypothesis // if (path_list != (Link_list*)NULL) { for (Link_node* node = path_list->get_head_cc(); node != (Link_node*)NULL; node = next_pnode) { // get the nbest node and the lattice node corresponding to this // partial path // nnode = (Nbest_node*)(node->get_item_cc()); lat_node = nnode->get_lnode_cc(); frame_index = lat_node->get_frame_index_cc(); word = lat_node->get_word_cc(); prev_node = nnode; // back track through the nbest nodes corresponding to this // partial path and populate the hypothesis // while(word != (Word*)NULL) { // add word to hypothesis // sprintf((char*)temp_string, "%s %s", (char*)word->get_name_cc(), (char*)hypothesis); strcpy((char*)hypothesis, (char*)temp_string); // get the previous node/word // prev_node = prev_node->get_prev_cc(); lat_node = prev_node->get_lnode_cc(); frame_index = lat_node->get_frame_index_cc(); word = lat_node->get_word_cc(); } // get next partial hypothesis in the final list // next_pnode=node->get_next_cc(); // see if this hypothesis exists in the hash table // hyp_cell = hyp_table->hash_lookup_cc(hypothesis); // if the hypothesis already exists, remove this node from the path list // this can be done because the list already ordered // if (hyp_cell != (Hash_cell*)NULL) { // remove the nbest node form the final list // delete nnode; // free the corresponding link node // path_list->remove_cc(node); } // else add to the hypothesis table // else { hyp_cell = manager->new_hash_cc(); hyp_cell->set_cc(hypothesis, (void_p)nnode); hyp_table->hash_insert_cc(hyp_cell); } // print the hypothesis and reset the string // memset(hypothesis, (int_4)0, strlen((char*)hypothesis)); memset(temp_string, (int_4)0, strlen((char*)temp_string)); } } // get the partial paths list // path_list = final_plist_a->get_paths_cc(); // loop through this list and print the unique nbest hypothesis // if (path_list != (Link_list*)NULL) { for (Link_node* node = path_list->get_head_cc(); node != (Link_node*)NULL && num_paths < num_nbest_d; node = next_pnode) { // get the nbest node and the lattice node corresponding to this // partial path // nnode = (Nbest_node*)(node->get_item_cc()); lat_node = nnode->get_lnode_cc(); frame_index = lat_node->get_frame_index_cc(); word = lat_node->get_word_cc(); prev_node = nnode; // get the hypothesis if there is any // if (word != NULL) { // get the utterance score // sprintf((char*)hypothesis, "%d %f", (int)frame_d, nnode->get_score_cc()); // back track through the nbest nodes corresponding to this // partial path and populate the hypothesis // while(word != (Word*)NULL) { // add word to hypothesis // sprintf((char*)temp_string, "%s %s", (char*)word->get_name_cc(), (char*)hypothesis); strcpy((char*)hypothesis, (char*)temp_string); // get the previous node/word // prev_node = prev_node->get_prev_cc(); lat_node = prev_node->get_lnode_cc(); frame_index = lat_node->get_frame_index_cc(); word = lat_node->get_word_cc(); } // print the hypothesis // tmp_hypo += sprintf((char*)tmp_hypo, "%s\n", (char_1*)hypothesis); } // get next partial hypothesis in the final list // next_pnode=node->get_next_cc(); // increment number of paths hypothesized so far // num_paths++; // print the hypothesis and reset the string // memset(hypothesis, (int_4)0, strlen((char*)hypothesis)); memset(temp_string, (int_4)0, strlen((char*)temp_string)); } } // clean up the hash table // // remove the hash table of nbest nodes // Hash_cell** hcells = hyp_table->get_cells_cc(); Hash_cell* hcell = (Hash_cell*)NULL; int_4 hsize = hyp_table->get_size_cc(); for (int_4 k = 0; k < hsize; k++) { for (Hash_cell* cell = hcells[k]; cell != (Hash_cell*)NULL; cell = hcell) { hcell = cell->get_next_cc(); manager_d->delete_cc(cell); } hcells[k] = (Hash_cell*)NULL; } delete hyp_table; // exit gracefully // return ISIP_TRUE;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -