예제 #1
0
        public List <string> all_assoc;     // ассоциации к найденным словам, все подряд

        public Words(string str)
        {
            // создаем части объектов. пока что пустые.
            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>();
            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_assoc = KillDupesAndRange(Associations.Get(all_base));//вынесено  ниже в отдельный метод

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