public int termbuf_build(crf_term_out term_buf) { if (vlevel_ > 0) { //Calcuate the sequence label probability term_buf.prob = prob(); } short this_word_num = get_word_num(); for (int i = 0; i < this_word_num; ++i) { term_buf.result_[i] = yname(result_[i]); switch (vlevel_) { case 0: term_buf.weight_[i] = 0.0; break; case 2: term_buf.weight_[i] = prob(i); break; case 3: term_buf.weight_[i] = prob(i); break; } } return(Utils.ERROR_SUCCESS); }
//Output raw result with probability private string OutputRawResult(List <List <string> > inbuf, crf_term_out[] crf_out, SegDecoderTagger tagger, StringWriter sw) { //best N-result for (int k = 0; k < crf_out.Length; k++) { if (crf_out[k] == null) { //No more result break; } StringBuilder sb = new StringBuilder(); crf_term_out crf_seg_out = crf_out[k]; //Show the entire sequence probability //For each token for (int i = 0; i < inbuf.Count; i++) { //Show all features for (int j = 0; j < inbuf[i].Count; j++) { sb.Append(inbuf[i][j]); sb.Append("\t"); } //Show the best result and its probability sb.Append(crf_seg_out.result_[i]); if (tagger.vlevel_ > 1) { sb.Append("\t"); sb.Append(crf_seg_out.weight_[i]); //Show the probability of all tags sb.Append("\t"); for (int j = 0; j < tagger.ysize_; j++) { sb.Append(tagger.yname(j)); sb.Append("/"); sb.Append(tagger.prob(i, j)); if (j < tagger.ysize_ - 1) { sb.Append("\t"); } } } sb.AppendLine(); } if (tagger.vlevel_ > 0) { sw.WriteLine("#{0}", crf_seg_out.prob); } sw.WriteLine(sb.ToString().Trim()); sw.WriteLine(); } return(sw.ToString()); }
//Segment given text public int Segment(crf_term_out[] pout, //segment result DecoderTagger tagger, //Tagger per thread List<List<string>> inbuf //feature set for segment ) { var ret = 0; if (inbuf.Count == 0) { //Empty input string return Utils.ERROR_SUCCESS; } ret = tagger.reset(); if (ret < 0) { return ret; } ret = tagger.add(inbuf); if (ret < 0) { return ret; } //parse ret = tagger.parse(); if (ret < 0) { return ret; } //wrap result ret = tagger.output(pout); if (ret < 0) { return ret; } return Utils.ERROR_SUCCESS; }
//Output raw result with probability private void OutputRawResultToFile(List<List<string>> inbuf, crf_term_out[] crf_out, SegDecoderTagger tagger, StreamWriter sw) { for (var k = 0; k < crf_out.Length; k++) { if (crf_out[k] == null) { //No more result break; } var sb = new StringBuilder(); var crf_seg_out = crf_out[k]; //Show the entire sequence probability //For each token for (var i = 0; i < inbuf.Count; i++) { //Show all features for (var j = 0; j < inbuf[i].Count; j++) { sb.Append(inbuf[i][j]); sb.Append("\t"); } //Show the best result and its probability sb.Append(crf_seg_out.result_[i]); if (tagger.vlevel_ > 1) { sb.Append("\t"); sb.Append(crf_seg_out.weight_[i]); //Show the probability of all tags sb.Append("\t"); for (var j = 0; j < tagger.ysize_; j++) { sb.Append(tagger.yname(j)); sb.Append("/"); sb.Append(tagger.prob(i, j)); if (j < tagger.ysize_ - 1) { sb.Append("\t"); } } } sb.AppendLine(); } if (tagger.vlevel_ > 0) { sw.WriteLine("#{0}", crf_seg_out.prob); } sw.WriteLine(sb.ToString().Trim()); sw.WriteLine(); } }
public int output(crf_term_out[] pout) { var n = 0; var ret = 0; if (nbest_ == 1) { //If only best result and no need probability, "next" is not to be used ret = termbuf_build(pout[0]); if (ret < 0) { return ret; } } else { //Fill the n best result var iNBest = nbest_; if (pout.Length < iNBest) { iNBest = pout.Length; } for (n = 0; n < iNBest; ++n) { ret = next(); if (ret < 0) { break; } ret = termbuf_build(pout[n]); if (ret < 0) { return ret; } } } return Utils.ERROR_SUCCESS; }
public int termbuf_build(crf_term_out term_buf) { if (vlevel_ > 0) { //Calcuate the sequence label probability term_buf.prob = prob(); } var this_word_num = get_word_num(); for (var i = 0; i < this_word_num; ++i) { term_buf.result_[i] = yname(result_[i]); switch (vlevel_) { case 0: term_buf.weight_[i] = 0.0; break; case 2: term_buf.weight_[i] = prob(i); break; } } return Utils.ERROR_SUCCESS; }