Beispiel #1
0
    public void FinishLearning()
    {
        PA = new double[tags.Count(), tags.Count()];
        for (int i = 0; i < tags.Count(); ++i)
        {
            for (int j = 0; j < tags.Count(); ++j)
            {
                if (T_counts[i] > 0)
                {
                    double p = (double)A_counts[i, j] / (double)T_counts[i];
                    PA[i, j] = p;
                }
                else
                {
                    PA[i, j] = 0.0;
                }
            }
        }

        PB = new Dictionary <int, Dictionary <int, double> >();
        foreach (var k1 in B_counts)
        {
            Dictionary <int, double> b = new Dictionary <int, double>();
            foreach (var k2 in k1.Value)
            {
                double pb = (double)k2.Value / (double)T_counts[k1.Key];
                b.Add(k2.Key, pb);
            }

            PB.Add(k1.Key, b);
        }

        return;
    }
    public void FinishLearning()
    {
        wrt_train.Close();
        wrt_test.Close();
        wrt_test2.Close();

        using (System.IO.StreamWriter wrt = new System.IO.StreamWriter("rnnsharp_tags.txt"))
        {
            for (int i = 0; i < tags.Count(); ++i)
            {
                wrt.WriteLine("{1}", i, tags.GetIdByIndex(i));
            }
        }


        string cmd = string.Format("{0}\\rnnsharp_train.cmd", System.IO.Directory.GetCurrentDirectory());

        System.Diagnostics.Process p = new System.Diagnostics.Process();
        p.StartInfo.Arguments = null;
        p.StartInfo.FileName  = cmd;

        Console.WriteLine("Executing {0}", p.StartInfo.FileName);

        bool r = p.Start();

        p.WaitForExit();

        return;
    }
Beispiel #3
0
    public void Init()
    {
        foreach (string w in new[] { "надо", "подо", "между", "выше", "ниже" })
        {
            undividable_words.Add(w);
        }

        tags = new TagBook("POS_prediction");

        string str_tags =

            /*
             * @"
             * ЧАСТИЦА:БЫ{},
             * ЧАСТИЦА:ЛИ{},
             * ЧАСТИЦА:КА{},
             *
             * ГЛАГОЛ:БЫТЬ{},
             * ИНФИНИТИВ:БЫТЬ{},
             * ГЛАГОЛ:ХОТЕТЬ{},
             * ИНФИНИТИВ:ХОТЕТЬ{},
             * ГЛАГОЛ:МОЧЬ{},
             * ИНФИНИТИВ:МОЧЬ{},
             * 'ДОЛЖЕН'
             * 'ДОЛЖНА'
             * 'НЕ'
             * 'ДАВАЙ'
             * 'ДАВАЙТЕ'
             * 'ДАЙ'
             *
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ИМ ЧИСЛО:ЕД РОД:ЖЕН
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ИМ ЧИСЛО:ЕД РОД:МУЖ
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ИМ ЧИСЛО:ЕД РОД:СР
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ИМ ЧИСЛО:МН
             *
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:РОД ЧИСЛО:ЕД РОД:ЖЕН
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:РОД ЧИСЛО:ЕД РОД:МУЖ
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:РОД ЧИСЛО:ЕД РОД:СР
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:РОД ЧИСЛО:МН
             *
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ПАРТ ЧИСЛО:ЕД РОД:ЖЕН
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ПАРТ ЧИСЛО:ЕД РОД:МУЖ
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ПАРТ ЧИСЛО:ЕД РОД:СР
             *
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ТВОР ЧИСЛО:ЕД РОД:ЖЕН
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ТВОР ЧИСЛО:ЕД РОД:МУЖ
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ТВОР ЧИСЛО:ЕД РОД:СР
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ТВОР ЧИСЛО:МН
             *
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ВИН ЧИСЛО:ЕД РОД:ЖЕН
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ВИН ЧИСЛО:ЕД РОД:МУЖ
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ВИН ЧИСЛО:ЕД РОД:СР
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ВИН ЧИСЛО:МН
             *
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ДАТ ЧИСЛО:ЕД РОД:ЖЕН
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ДАТ ЧИСЛО:ЕД РОД:МУЖ
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ДАТ ЧИСЛО:ЕД РОД:СР
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ДАТ ЧИСЛО:МН
             *
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ПРЕДЛ ЧИСЛО:ЕД РОД:ЖЕН
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ПРЕДЛ ЧИСЛО:ЕД РОД:МУЖ
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ПРЕДЛ ЧИСЛО:ЕД РОД:СР
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ПРЕДЛ ЧИСЛО:МН
             *
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:МЕСТ ЧИСЛО:ЕД РОД:ЖЕН
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:МЕСТ ЧИСЛО:ЕД РОД:МУЖ
             * СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:МЕСТ ЧИСЛО:ЕД РОД:СР
             *
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ИМ ЧИСЛО:ЕД РОД:ЖЕН
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ИМ ЧИСЛО:ЕД РОД:МУЖ
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ИМ ЧИСЛО:ЕД РОД:СР
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ИМ ЧИСЛО:МН
             *
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:РОД ЧИСЛО:ЕД РОД:ЖЕН
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:РОД ЧИСЛО:ЕД РОД:МУЖ
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:РОД ЧИСЛО:ЕД РОД:СР
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:РОД ЧИСЛО:МН
             *
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ТВОР ЧИСЛО:ЕД РОД:ЖЕН
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ТВОР ЧИСЛО:ЕД РОД:МУЖ
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ТВОР ЧИСЛО:ЕД РОД:СР
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ТВОР ЧИСЛО:МН
             *
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ВИН ЧИСЛО:ЕД РОД:ЖЕН
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ВИН ЧИСЛО:ЕД РОД:МУЖ
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ВИН ЧИСЛО:ЕД РОД:СР
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ВИН ЧИСЛО:МН
             *
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ДАТ ЧИСЛО:ЕД РОД:ЖЕН
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ДАТ ЧИСЛО:ЕД РОД:МУЖ
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ДАТ ЧИСЛО:ЕД РОД:СР
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ДАТ ЧИСЛО:МН
             *
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ПРЕДЛ ЧИСЛО:ЕД РОД:ЖЕН
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ПРЕДЛ ЧИСЛО:ЕД РОД:МУЖ
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ПРЕДЛ ЧИСЛО:ЕД РОД:СР
             * ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ПРЕДЛ ЧИСЛО:МН
             *
             * ПРИЛАГАТЕЛЬНОЕ КРАТКИЙ РОД:ЖЕН ЧИСЛО:ЕД
             * ПРИЛАГАТЕЛЬНОЕ КРАТКИЙ РОД:МУЖ ЧИСЛО:ЕД
             * ПРИЛАГАТЕЛЬНОЕ КРАТКИЙ РОД:СР ЧИСЛО:ЕД
             * ПРИЛАГАТЕЛЬНОЕ КРАТКИЙ ЧИСЛО:МН
             *
             * ПРИЛАГАТЕЛЬНОЕ СТЕПЕНЬ:СРАВН
             *
             * МЕСТОИМЕНИЕ ПАДЕЖ:ИМ ЧИСЛО:ЕД ЛИЦО:1
             * МЕСТОИМЕНИЕ ПАДЕЖ:ИМ ЧИСЛО:МН ЛИЦО:1
             *
             * МЕСТОИМЕНИЕ ПАДЕЖ:ИМ ЧИСЛО:ЕД ЛИЦО:2
             * МЕСТОИМЕНИЕ ПАДЕЖ:ИМ ЧИСЛО:МН ЛИЦО:2
             *
             * МЕСТОИМЕНИЕ ПАДЕЖ:ИМ ЧИСЛО:ЕД ЛИЦО:3 РОД:МУЖ
             * МЕСТОИМЕНИЕ ПАДЕЖ:ИМ ЧИСЛО:ЕД ЛИЦО:3 РОД:ЖЕН
             * МЕСТОИМЕНИЕ ПАДЕЖ:ИМ ЧИСЛО:ЕД ЛИЦО:3 РОД:СР
             * МЕСТОИМЕНИЕ ПАДЕЖ:ИМ ЧИСЛО:МН ЛИЦО:3
             *
             * МЕСТОИМЕНИЕ ПАДЕЖ:РОД ЧИСЛО:ЕД
             * МЕСТОИМЕНИЕ ПАДЕЖ:РОД ЧИСЛО:МН
             *
             * МЕСТОИМЕНИЕ ПАДЕЖ:ТВОР ЧИСЛО:ЕД
             * МЕСТОИМЕНИЕ ПАДЕЖ:ТВОР ЧИСЛО:МН
             *
             * МЕСТОИМЕНИЕ ПАДЕЖ:ВИН ЧИСЛО:ЕД
             * МЕСТОИМЕНИЕ ПАДЕЖ:ВИН ЧИСЛО:МН
             *
             * МЕСТОИМЕНИЕ ПАДЕЖ:ДАТ ЧИСЛО:ЕД
             * МЕСТОИМЕНИЕ ПАДЕЖ:ДАТ ЧИСЛО:МН
             *
             * МЕСТОИМЕНИЕ ПАДЕЖ:ПРЕДЛ ЧИСЛО:ЕД
             * МЕСТОИМЕНИЕ ПАДЕЖ:ПРЕДЛ ЧИСЛО:МН
             *
             * МЕСТОИМ_СУЩ ПАДЕЖ:ИМ
             * МЕСТОИМ_СУЩ ПАДЕЖ:РОД
             * МЕСТОИМ_СУЩ ПАДЕЖ:ТВОР
             * МЕСТОИМ_СУЩ ПАДЕЖ:ВИН
             * МЕСТОИМ_СУЩ ПАДЕЖ:ДАТ
             * МЕСТОИМ_СУЩ ПАДЕЖ:ПРЕДЛ
             *
             * ЧИСЛИТЕЛЬНОЕ ПАДЕЖ:ИМ
             * ЧИСЛИТЕЛЬНОЕ ПАДЕЖ:РОД
             * ЧИСЛИТЕЛЬНОЕ ПАДЕЖ:ТВОР
             * ЧИСЛИТЕЛЬНОЕ ПАДЕЖ:ВИН
             * ЧИСЛИТЕЛЬНОЕ ПАДЕЖ:ДАТ
             * ЧИСЛИТЕЛЬНОЕ ПАДЕЖ:ПРЕДЛ
             *
             * ГЛАГОЛ МОДАЛЬНЫЙ
             * ГЛАГОЛ ПЕРЕХОДНОСТЬ:ПЕРЕХОДНЫЙ
             * ГЛАГОЛ
             * БЕЗЛИЧ_ГЛАГОЛ
             * ИНФИНИТИВ МОДАЛЬНЫЙ
             * ИНФИНИТИВ ПЕРЕХОДНОСТЬ:ПЕРЕХОДНЫЙ
             * ИНФИНИТИВ
             * ДЕЕПРИЧАСТИЕ МОДАЛЬНЫЙ
             * ДЕЕПРИЧАСТИЕ ПЕРЕХОДНОСТЬ:ПЕРЕХОДНЫЙ
             * ДЕЕПРИЧАСТИЕ
             * ПРЕДЛОГ
             * ПОСЛЕЛОГ
             * СОЮЗ
             * ЧАСТИЦА
             * ПУНКТУАТОР
             * НАРЕЧИЕ
             * ВВОДНОЕ
             * NUM_WORD
             * UNKNOWNENTRIES
             * BETH:BEGIN{}
             * BETH:END{}
             * ";
             */
            @"ГЛАГОЛ
ИНФИНИТИВ
ПРИЛАГАТЕЛЬНОЕ
ДЕЕПРИЧАСТИЕ
ПРЕДЛОГ
СУЩЕСТВИТЕЛЬНОЕ
МЕСТОИМЕНИЕ
ЧИСЛИТЕЛЬНОЕ
МЕСТОИМ_СУЩ
СОЮЗ
ЧАСТИЦА
НАРЕЧИЕ
ПОСЛЕЛОГ
БЕЗЛИЧ_ГЛАГОЛ
ПУНКТУАТОР
UNKNOWNENTRIES
ВВОДНОЕ
NUM_WORD
BETH";

        tags.Load(str_tags, gren);

        A_counts = new int[tags.Count(), tags.Count()];
        for (int i = 0; i < tags.Count(); ++i)
        {
            for (int j = 0; j < tags.Count(); ++j)
            {
                A_counts[i, j] = 0;
            }
        }

        T_counts = new int[tags.Count()];
        for (int i = 0; i < tags.Count(); ++i)
        {
            T_counts[i] = 0;
        }

        B_counts = new Dictionary <int, Dictionary <int, int> >();

        return;
    }
    public void Init()
    {
        tags = new TagBook("POS_prediction");

        string str_tags =

/*
 * @"
 * ГЛАГОЛ
 * ИНФИНИТИВ
 * ПРИЛАГАТЕЛЬНОЕ
 * ДЕЕПРИЧАСТИЕ
 * ПРЕДЛОГ
 * СУЩЕСТВИТЕЛЬНОЕ
 * МЕСТОИМЕНИЕ
 * ЧИСЛИТЕЛЬНОЕ
 * МЕСТОИМ_СУЩ
 * СОЮЗ
 * ЧАСТИЦА
 * НАРЕЧИЕ
 * ПОСЛЕЛОГ
 * БЕЗЛИЧ_ГЛАГОЛ
 * ПУНКТУАТОР
 * UNKNOWNENTRIES
 * ВВОДНОЕ
 * NUM_WORD
 * BETH
 * ";*/

            @"
ГЛАГОЛ ПЕРЕХОДНОСТЬ:ПЕРЕХОДНЫЙ
ГЛАГОЛ ПЕРЕХОДНОСТЬ:НЕПЕРЕХОДНЫЙ
ИНФИНИТИВ ПЕРЕХОДНОСТЬ:ПЕРЕХОДНЫЙ
ИНФИНИТИВ ПЕРЕХОДНОСТЬ:НЕПЕРЕХОДНЫЙ
ДЕЕПРИЧАСТИЕ ПЕРЕХОДНОСТЬ:ПЕРЕХОДНЫЙ
ДЕЕПРИЧАСТИЕ ПЕРЕХОДНОСТЬ:НЕПЕРЕХОДНЫЙ

СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ЗВАТ
СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ИМ
СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:РОД
СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ПАРТ
СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ТВОР
СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ВИН
СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ДАТ
СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:ПРЕДЛ
СУЩЕСТВИТЕЛЬНОЕ ПАДЕЖ:МЕСТ

ПРИЛАГАТЕЛЬНОЕ КРАТКИЙ
ПРИЛАГАТЕЛЬНОЕ СТЕПЕНЬ:СРАВН

ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ИМ
ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:РОД
ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ТВОР
ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ВИН
ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ДАТ
ПРИЛАГАТЕЛЬНОЕ ПАДЕЖ:ПРЕДЛ

МЕСТОИМЕНИЕ ПАДЕЖ:ИМ
МЕСТОИМЕНИЕ ПАДЕЖ:РОД
МЕСТОИМЕНИЕ ПАДЕЖ:ТВОР
МЕСТОИМЕНИЕ ПАДЕЖ:ВИН
МЕСТОИМЕНИЕ ПАДЕЖ:ДАТ
МЕСТОИМЕНИЕ ПАДЕЖ:ПРЕДЛ

МЕСТОИМ_СУЩ ПАДЕЖ:ИМ
МЕСТОИМ_СУЩ ПАДЕЖ:РОД
МЕСТОИМ_СУЩ ПАДЕЖ:ТВОР
МЕСТОИМ_СУЩ ПАДЕЖ:ВИН
МЕСТОИМ_СУЩ ПАДЕЖ:ДАТ
МЕСТОИМ_СУЩ ПАДЕЖ:ПРЕДЛ

ГЛАГОЛ
ИНФИНИТИВ
ДЕЕПРИЧАСТИЕ
ПРЕДЛОГ
ЧИСЛИТЕЛЬНОЕ
СОЮЗ
ЧАСТИЦА
НАРЕЧИЕ
ПОСЛЕЛОГ
БЕЗЛИЧ_ГЛАГОЛ
ПУНКТУАТОР
UNKNOWNENTRIES
ВВОДНОЕ
NUM_WORD
BETH
";



        tags.Load(str_tags, gren);

        A_counts = new int[tags.Count(), tags.Count()];
        for (int i = 0; i < tags.Count(); ++i)
        {
            for (int j = 0; j < tags.Count(); ++j)
            {
                A_counts[i, j] = 0;
            }
        }

        T_counts = new int[tags.Count()];
        for (int i = 0; i < tags.Count(); ++i)
        {
            T_counts[i] = 0;
        }

        B_counts = new Dictionary <int, Dictionary <string, int> >();

        return;
    }