コード例 #1
0
ファイル: Raschl.cs プロジェクト: lnl122/Solver2
        }                                             // струкрура данных для одной строчки расчлененок

        /// <summary>
        /// решает одну расчлененку, это уже отдельный поток
        /// </summary>
        /// <param name="s1">строка в формате "строитель(3)блеф(2)картон(2)</param>
        /// <param name="slov">количество слов</param>
        /// <returns></returns>
        private List <string> ProcessOne(string s1, int slov)
        {
            List <string> res = new List <string>();

            if (s1.Trim().Length == 0)
            {
                return(res);
            }
            OneStr os = Prepare(s1);

            string[]      wrds  = Transposition(os);
            List <string> wrds2 = Spaces(wrds, slov);
            SpellChecker  sc    = new SpellChecker();

            res = sc.Check(wrds2);
            Answer.Add(OT, 3, res, -1);
            return(res);
        }
コード例 #2
0
ファイル: Words.cs プロジェクト: lnl122/Solver2
        public List <string> all_assoc25;   // ассоциации к найденным словам, все подряд

        // создает объект из текста, где слова разделены пробелами
        // вход - строка текста
        // выход - сам объект
        public Words(string str)
        {
            // создаем части объектов. пока что пустые.
            str           = str.ToLower();
            src           = str;
            ru            = new List <string>();
            ru_check      = new List <string>();
            en            = new List <string>();
            en_trans      = new List <string>();
            all_find      = new List <string>();
            all_base      = new List <string>();
            all_base10    = new List <string>();
            all_assoc     = new List <string>();
            all_assoc25   = new List <string>();
            f_b_noun      = new List <string>();
            f_b_adjective = new List <string>();
            f_b_verb      = new List <string>();
            f_b_others    = new List <string>();

            // уберем грязные слова
            foreach (string s1 in badwrds)
            {
                str = str.Replace(" " + s1 + " ", " ");
            }
            str = str.Replace("  ", " ").Replace("  ", " ").Replace("  ", " ").Replace("  ", " ").Replace("  ", " ").Replace("  ", " ").Replace("  ", " ").Replace("  ", " ").Replace("  ", " ").Replace("  ", " ").Replace("  ", " ").Replace("  ", " ").Replace("  ", " ").Replace("  ", " ");
            string[] ar = str.Split(' ');

            // разберем слова по языкам - ру или ен.
            foreach (string ss in ar)
            {
                if (ss.Length > 1)
                {
                    bool eng = false, rus = false, oth = false;
                    for (int i = 0; i < ss.Length; i++)
                    {
                        char c = ss[i];
                        if ((c >= 'a') && (c <= 'z'))
                        {
                            eng = true;
                        }
                        else if (((c >= 'а') && (c <= 'я')) || (c == 'ё'))
                        {
                            rus = true;
                        }
                        else
                        {
                            oth = true;
                        }                    // буквоцыфры и незнакомые языки выбросим
                    }
                    if (!rus && eng && !oth)
                    {
                        en.Add(ss);
                    }
                    if (rus && !eng && !oth)
                    {
                        ru.Add(ss);
                    }
                }
            }

            // переведем en, проверим орфографию у ru
            if (en.Count > 0)
            {
                List <string> temp2 = TranslateEnRu(en);
                var           spch  = new SpellChecker();
                en_trans.AddRange(spch.Check(temp2));
                spch.Close();
            }
            if (ru.Count > 0)
            {
                var spch = new SpellChecker();
                ru_check.AddRange(spch.Check(ru));
                spch.Close();
            }

            // соберем вместе результат
            all_find.AddRange(ru_check);
            all_find.AddRange(en_trans);
            List <string> lt = new List <string>(all_find);

            // убирем дупы, ранжируем. источник - lt
            all_find = KillDupesAndRange(lt);

            // найдем базовые слова, уберем дупы, ранжируем по виду части речи, ранжируем по частоте
            List <string>[] temp1 = FindBaseWord(lt);
            f_b_noun      = temp1[0];
            f_b_adjective = temp1[1];
            f_b_verb      = temp1[2];
            f_b_others    = temp1[3];
            // выберем в базовые только существительные. *** возможно позже будет нужно и прилагательные - надо замерить эффеткивность
            all_base    = KillDupesAndRange(f_b_noun);
            all_base10  = KillDupesAndRange(f_b_noun, 10);
            all_assoc25 = FindAssociations25();
            // найдем ассоциации ко всем базовым словам, уберем дупы
            //all_assoc = KillDupesAndRange(Associations.Get(all_base));//вынесено  ниже в отдельный метод

            // объект создан, все счастливо танцую и поют, как в индийских фильмах
        }