Beispiel #1
0
        public void PrintLemma(Lemma l)
        {
            FlexiaModel flexModel   = _flexiaModels[l.FlexModelNo];
            AccentModel accentModel = _accentModels[l.AccentModelNo];
            UserSession session     = _userSessions[l.SessionNo];

            Console.WriteLine("=== {0} {1} {2} {3} ===", l.Base, _gramtab.LookupAncode(l.TypeAncode), flexModel.Forms.Count,
                              accentModel.AccentForms.Count);
            int formNo = 0;

            foreach (Flexia form in flexModel.Forms)
            {
                if (!string.IsNullOrWhiteSpace(form.Prefix))
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.Write(form.Prefix);
                }
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write(l.Base);
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.Write(form.Flexion);
                int accent = accentModel.AccentForms[formNo];
                Console.Write(" {0} ", accent);
                string accWord = AccentHelper.SetAccent(form.Prefix + l.Base + form.Flexion, accent);
                Console.Write(" " + accWord + " ");
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.Write("\t" + _gramtab.LookupAncode(form.Ancode));
                Console.ResetColor();
                Console.WriteLine();
                formNo++;
            }
            if (l.PrefixSetNo.HasValue)
            {
                PrefixSet prefixSet = _prefixSets[l.PrefixSetNo.Value];
                Console.WriteLine("PrefixSets:");
                foreach (string pref in prefixSet.Prefixes)
                {
                    Console.WriteLine(pref);
                }
            }
            Console.WriteLine("-------------------");
        }
Beispiel #2
0
        public void PrintLookup(string word)
        {
            FormInterpretations forms = Lookup(word);

            if (forms != null)
            {
                foreach (var kvp in forms.AccentToAncodes)
                {
                    Console.WriteLine("Accent {0} {1}", kvp.Key, AccentHelper.SetAccent(word, kvp.Key));
                    foreach (ushort ancodeNo in kvp.Value)
                    {
                        Console.WriteLine("    {0}", _gramtab.LookupByNo(ancodeNo));
                    }
                }
            }
            else
            {
                Console.WriteLine(word + " not found");
            }
        }
Beispiel #3
0
        public virtual void ProcessWord()
        {
            Console.WriteLine(_currentWord);
            FormInterpretations forms = _morph.Lookup(_currentWord);

            if (forms != null)
            {
                if (forms.AccentToAncodes.Count == 1)
                {
                    SingleAccentWords.Add(AccentHelper.SetAccent(_currentWord, forms.AccentToAncodes.Keys.First()));
                }
                else
                {
                    ManyAccentWords.Add(_currentWord);
                }
            }
            else
            {
                NotFoundWords.Add(_currentWord);
            }
        }
Beispiel #4
0
        public void PrintStat()
        {
            StreamWriter manyAccentWords = File.CreateText(Path.Combine(_workDir, "manyAccentWords.txt"));
            //- ударение НЕ задано (255)
            //-ударение задано однозначно(совпадает во всех интерпретациях)
            //-ударение задано омонимично(различается в интерпретациях)
            int cntUndefinedAccentOneVowel   = 0;
            int cntUndefinedAccentMoreVowels = 0;
            int cntSingleAccentOneVowel      = 0;
            int cntSingleAccentMoreVowels    = 0;
            int cntTwoAccent      = 0;
            int cntManyAccent     = 0;
            int cntManyAccentReal = 0;

            foreach (var kvp in _dawg)
            {
                string form   = kvp.Key;
                int    vowels = AccentHelper.CountVowels(form);
                if (kvp.Value.AccentToAncodes.Count == 1)
                {
                    int ac = kvp.Value.AccentToAncodes.Keys.First();
                    if (ac == 255)
                    {
                        if (vowels == 1)
                        {
                            cntUndefinedAccentOneVowel++;
                        }
                        else
                        {
                            cntUndefinedAccentMoreVowels++;
                        }
                    }
                    else
                    {
                        if (vowels == 1)
                        {
                            cntSingleAccentOneVowel++;
                        }
                        else
                        {
                            cntSingleAccentMoreVowels++;
                        }
                    }
                }
                else if (kvp.Value.AccentToAncodes.Count == 2)
                {
                    cntTwoAccent++;
                }
                else
                {
                    cntManyAccent++;
                    if (kvp.Value.AccentToAncodes.Keys.All(a => a != 255))
                    {
                        cntManyAccentReal++;
                        manyAccentWords.WriteLine("{0}, {1}, {2}", vowels, form,
                                                  string.Join("-", kvp.Value.AccentToAncodes.Keys));
                    }
                }
            }
            Console.WriteLine("cntUndefinedAccent           {0}", cntUndefinedAccentOneVowel + cntUndefinedAccentMoreVowels);
            Console.WriteLine("cntUndefinedAccentOneVowel   {0}", cntUndefinedAccentOneVowel);
            Console.WriteLine("cntUndefinedAccentMoreVowels {0}", cntUndefinedAccentMoreVowels);
            Console.WriteLine("cntSingleAccent              {0}", cntSingleAccentOneVowel + cntSingleAccentMoreVowels);
            Console.WriteLine("cntSingleAccentOneVowel      {0}", cntSingleAccentOneVowel);
            Console.WriteLine("cntSingleAccentMoreVowels    {0}", cntSingleAccentMoreVowels);
            Console.WriteLine("cntTwoAccent                 {0}", cntTwoAccent);
            Console.WriteLine("cntManyAccent                {0}", cntManyAccent);
            Console.WriteLine("cntManyAccentReal            {0}", cntManyAccentReal);
            Console.WriteLine("sum                          {0}",
                              cntUndefinedAccentOneVowel + cntUndefinedAccentMoreVowels +
                              cntSingleAccentOneVowel + cntSingleAccentMoreVowels +
                              cntTwoAccent + cntManyAccent);
            manyAccentWords.Close();
        }
Beispiel #5
0
        public void PrintStat2()
        {
            // !!!
            // Здесь число интерпретаций, а не форм слова

            // Общее число форм
            List <WordForm> forms = AllForms.ToList();

            Console.WriteLine("forms: {0}", forms.Count);

            // статистика по гласным
            foreach (var g in forms
                     .Select(f => AccentHelper.CountVowels(f.ToString()))
                     .GroupBy(i => i)
                     .OrderBy(g => g.Key))
            {
                Console.WriteLine("форм где {0} гласных: {1}", g.Key, g.Count());
            }

            //количество форм, где менее двух гласных(ударение итак однозначно)
            int cntVo01 = forms.Count(f => AccentHelper.CountVowels(f.ToString()) <= 1);

            Console.WriteLine("количество форм, где менее двух гласных(ударение итак однозначно): " + cntVo01);

            //количество форм с двумя и более гласными, для которых
            var forms2 = forms.Where(f => AccentHelper.CountVowels(f.ToString()) > 1).ToList();

            //var forms15 = forms.Where(f => AccentHelper.CountVowels(f.ToString()) == 15).ToList();
            //foreach (var f in forms15)
            //{
            //	Console.WriteLine(f);
            //}

            Console.WriteLine("количество форм с двумя и более гласными: " + forms2.Count);
            //	-ударение НЕ задано(255)
            Console.WriteLine("  ударение НЕ задано(255): " + forms2.Count(f => f.Accent == 255));

            // Следующие 2 посчитаны в MorphAn.PrintStat
            //	-ударение задано однозначно(совпадает во всех интерпретациях)
            //-ударение задано омонимично(различается в интерпретациях)

            //-FlexiaModels с приставками
            var flexModelWithPre    = _flexiaModels.Where(fm => fm.Forms.Any(f => !string.IsNullOrWhiteSpace(f.Prefix))).ToList();
            var flexModelWithPreAll = _flexiaModels.Where(fm => fm.Forms.All(f => !string.IsNullOrWhiteSpace(f.Prefix))).ToList();

            Console.WriteLine("FlexiaModels с приставками: {0}", flexModelWithPre.Count);
            Console.WriteLine("FlexiaModels все с приставками: {0}", flexModelWithPreAll.Count);
            //-формы с приставками
            var formsWithPre = forms.Where(form => !string.IsNullOrWhiteSpace(form.Flexia.Prefix)).ToList();

            Console.WriteLine("формы с приставками: {0}", formsWithPre.Count);


            // все леммы, имеющие Prefix Set
            //var prefixLemmas = Lemmas.Where(l => l.PrefixSetNo.HasValue).ToList();
            //Console.WriteLine("PrefixSet lemmas: {0}", prefixLemmas.Count);
            //foreach (var g in prefixLemmas.GroupBy(l => l.PrefixSetNo.Value))
            //{
            //	Console.WriteLine("{0}", string.Join("; ", _prefixSets[g.Key].Prefixes));
            //	foreach (Lemma l in g)
            //	{
            //		Console.WriteLine("    {0}", l.Base);
            //	}
            //}
        }