예제 #1
0
        /// <summary>
        /// распознание и решение гибридов картинок
        /// </summary>
        /// <param name="T">таб</param>
        /// <returns>true</returns>
        public bool Process(OneTab T)
        {
            OT = T;
            string resout = "";

            // создаем массив путей из больших картинок
            string[] SmallImagePath = Image.GetSmallImagePathes(T, T.level.urls, T.iRows, T.iCols);

            // отрисуем их в ГУИ
            string html = Picture.GetPicsHtml(SmallImagePath);

            T.wbPictures.Invoke(new Action(() => { T.wbPictures.DocumentText = html; }));

            // из путей к картинкам делаем коллекции слов
            List <Words> TextsFromPics = Image.GetAllDescriptions(SmallImagePath);

            // решаем, собственно
            int min = T.iGybridMin;
            int cnt = TextsFromPics.Count;

            for (int i = 0; i < cnt; i++)
            {
                for (int j = 0; j < cnt; j++)
                {
                    if (i == j)
                    {
                        continue;
                    }
                    // надо сравнить наборы слов для i и j
                    Words w1 = TextsFromPics[i];
                    Words w2 = TextsFromPics[j];

                    // приоритет 3 - для гибридов по базовым словам
                    // приоритет 4 - для остальных
                    // приоритет 5 - для ассоциаций ко всему найденному
                    if ((w1 != null) && (w2 != null))
                    {
                        if ((w1.all_base != null) && (w2.all_base != null))
                        {
                            List <string> wru1 = Words.KillDupesAndRange(w1.ru, 10);
                            List <string> wru2 = Words.KillDupesAndRange(w2.ru, 10);
                            wru1.AddRange(w1.all_base);
                            wru2.AddRange(w2.all_base);
                            string resout2 = FindGybrids(T, wru1, wru2, i, j, min, 3);
                            resout = resout + resout2 + "\r\n";

                            /*
                             * List<string> ls1 = new List<string>();
                             * List<string> ls2 = new List<string>();
                             * ls1.AddRange(w1.all_base); ls1.AddRange(w1.all_assoc25);
                             * ls2.AddRange(w2.all_base); ls2.AddRange(w2.all_assoc25);
                             * //ls1.AddRange(w1.all_base); ls1.AddRange(w1.all_assoc25); ls1.AddRange(w1.ru_check); ls1.AddRange(w1.en_trans); ls1.AddRange(w1.f_b_noun); ls1.AddRange(w1.f_b_adjective);
                             * //ls2.AddRange(w2.all_base); ls2.AddRange(w2.all_assoc25); ls2.AddRange(w2.ru_check); ls2.AddRange(w2.en_trans); ls2.AddRange(w2.f_b_noun); ls2.AddRange(w2.f_b_adjective);
                             * ls1 = Words.KillDupesAndRange(ls1);
                             * ls2 = Words.KillDupesAndRange(ls2);
                             * FindGybrids(T, ls1, ls2, i, j, min, 4);
                             *
                             * иначе получаем чрезмерно много вариантов
                             */
                        }
                    }
                    //List<string> ass1 = Words.KillDupesAndRange(Associations.Get(ls1));
                    //List<string> ass2 = Words.KillDupesAndRange(Associations.Get(ls2));
                    //FindGybrids(T, ass1, ass2, i, j, min, 5);
                    //иначе получаем чрезмерно много вариантов
                }
            }

            T.tbSectors.Invoke(new Action(() => { T.btSolve.Enabled = true; }));
            T.tbTextHints.Invoke(new Action(() => { T.tbTextHints.Text = resout; }));
            T.tcTabText.Invoke(new Action(() => { T.tcTabText.SelectTab(1); }));

            return(true);
        }