コード例 #1
0
ファイル: BaseModel.cs プロジェクト: Corniel/CRFSharp
        string get_index(string p, int pos, ref int i, Tagger tagger)
        {
            if (p[i] != '[')
            {
                return null;
            }
            i++;

            var col = 0;
            var row = 0;
            var neg = 1;

            if (p[i] == '-')
            {
                neg = -1;
                i++;
            }

            while (i < p.Length)
            {
                if (p[i] >= '0' && p[i] <= '9')
                {
                    row = 10 * row + (p[i] - '0');
                }
                else if (p[i] == ',')
                {
                    i++;
                    goto NEXT1;
                }
                else return null;

                i++;
            }

        NEXT1:
            while (i < p.Length)
            {
                if (p[i] >= '0' && p[i] <= '9')
                {
                    col = 10 * col + (p[i] - '0');
                }
                else if (p[i] == ']')
                {
                    goto NEXT2;
                }
                else return null;

                i++;
            }
        NEXT2:
            row *= neg;

            if (col < 0 || col >= xsize_)
            {
                return null;
            }
            var idx = pos + row;
            if (idx < 0)
            {
                return "_B-" + (-idx).ToString();
            }
            if (idx >= tagger.word_num)
            {
                return "_B+" + (idx - tagger.word_num + 1).ToString();
            }

            return tagger.x_[idx][col];
        }
コード例 #2
0
ファイル: BaseModel.cs プロジェクト: Corniel/CRFSharp
        public string apply_rule(string p, int pos, Tagger tagger)
        {
            var feature_function = new StringBuilder();
            string r;
            for (var i = 0; i < p.Length; i++)
            {
                if (p[i] == '%')
                {
                    i++;
                    switch (p[i])
                    {
                        case 'x':
                            i++;
                            r = get_index(p, pos, ref i, tagger);
                            if (r == null)
                            {
                                return "";
                            }
                            feature_function.Append(r);
                            break;
                        default:
                            return "";
                    }
                }
                else
                {
                    feature_function.Append(p[i]);
                }
            }

            return feature_function.ToString();
        }