コード例 #1
0
ファイル: DecoderTagger.cs プロジェクト: Folk19/Experiment
        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);
        }
コード例 #2
0
        //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());
        }
コード例 #3
0
ファイル: Decoder.cs プロジェクト: Corniel/CRFSharp
        //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;
        }
コード例 #4
0
ファイル: DecoderConsole.cs プロジェクト: Corniel/CRFSharp
        //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();
            }
        }
コード例 #5
0
ファイル: DecoderTagger.cs プロジェクト: Corniel/CRFSharp
        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;
        }
コード例 #6
0
ファイル: DecoderTagger.cs プロジェクト: Corniel/CRFSharp
        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;
        }