/// <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); }