예제 #1
0
    public void Init()
    {
        // -------------------------------------------

        suffix2vector = new String2Vector(System.IO.Path.Combine(Program.WORD_FEATURES, "suffices.txt"));

        context_span = Program.CONTEXT_SPAN;                                     // число токенов, которые используются для генерации вектора X
        x_len        = (context_span * 2 + 1) * suffix2vector.GetVectorLength(); // размерность пространства признаков


        // -------------------------------------------

        suffix_len = Program.SUFFIX_LEN;

        // Распознаваемые признаки

        string y_str =
            @"
СУЩЕСТВИТЕЛЬНОЕ
ПРИЛАГАТЕЛЬНОЕ
МЕСТОИМЕНИЕ
МЕСТОИМ_СУЩ
ЧИСЛИТЕЛЬНОЕ
ГЛАГОЛ
ВВОДНОЕ
БЕЗЛИЧ_ГЛАГОЛ
NUM_WORD
ИНФИНИТИВ
ДЕЕПРИЧАСТИЕ
ПРЕДЛОГ
ПОСЛЕЛОГ
СОЮЗ
ЧАСТИЦА
ПУНКТУАТОР
НАРЕЧИЕ
UNKNOWNENTRIES
ПРИТЯЖ_ЧАСТИЦА
";

        y_picker   = new List <SVM_X_Picker>();
        y_patterns = new List <SVM_ResultPatterns>();

        int y_index = 0;

        foreach (string line in y_str.Split('\n'))
        {
            string l = line.Trim();
            if (!string.IsNullOrEmpty(l))
            {
                SVM_X_Picker m = new SVM_X_Picker(line, gren, y_index++);
                y_picker.Add(m);

                SVM_ResultPatterns p = new SVM_ResultPatterns();
                y_patterns.Add(p);
            }
        }

        return;
    }
예제 #2
0
    public bool ProcessSample(SampleData sample)
    {
        Sample2Patterns(sample, y_patterns);

        if (wrt_train == null)
        {
            wrt_train      = new List <System.IO.StreamWriter>();
            train_filename = new List <string>();

            /*
             * // для SVM
             * for( int i = 0; i < y_picker.Count; ++i )
             * {
             *  string train_path = string.Format( "svm_train_{0}.txt", i );
             *  train_filename.Add( train_path );
             *  wrt_train.Add( new System.IO.StreamWriter( train_path ) );
             * }*/

            string train_path = "maxent_train.txt";
            train_filename.Add(train_path);
            wrt_train.Add(new System.IO.StreamWriter(train_path));
        }

        /*
         * for( int i = 0; i < y_picker.Count; ++i )
         * {
         * y_patterns[i].Write( wrt_train[i] );
         * y_patterns[i].Clear();
         * }
         */

        for (int y = 0; y < y_picker.Count; ++y)
        {
            SVM_ResultPatterns patterns = y_patterns[y];

            for (int i = 0; i < patterns._X.Count; ++i)
            {
                if (patterns._Y[i] == 1.0)
                {
                    wrt_train[0].Write("{0} ", y);

                    for (int j = 0; j < patterns._X[i].Length; ++j)
                    {
                        wrt_train[0].Write(" {0}:{1}", patterns._X[i][j].Index, (2.0 + patterns._X[i][j].Value).ToString(new System.Globalization.CultureInfo("en-US")));
                    }

                    wrt_train[0].WriteLine("");
                }
            }

            wrt_train[0].Flush();

            patterns.Clear();
        }

        return(true);
    }