Разработка автоматизированной системы классификации товаров по их изображениям
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
i++)
{[i] = new List();[i].Add(list[i]);
}resultList;
}[splits];splitSize = count / splits;lastSplit = count% splits;(int i = 0; i < splits - 1; i++)
{[i] = new List();(int j = 0; j < splitSize; j++)
{[i].Add(list[i * splitSize + j]);
}
}[splits - 1] = new List();(int j = 0; j < splitSize + lastSplit; j++)
{[splits - 1].Add(list[splits - 1 * splitSize + j]);
}splittedList;
}static int CountWorkAmount[] list)
{counter = 0;(var l in list)(var el in l)++;counter;
}
}
}
МодульDBWorker
using System;System.Collections.Generic;System.Linq;System.Text;System.Data;System.Data.SqlClient;grabberMolotok.DBEngine
{class DBEngine
{connectionString; //строка подключенияCategoryTable categoryTable; //таблица категорийImageTable imageTable; //таблица изображенийSettingsTable settingsTable; //таблица настроекDBEngine()
{builder = new SqlConnectionStringBuilder();.DataSource = ".\\SQLExpress";.InitialCatalog = "molotokdb";.IntegratedSecurity = true;= builder.ToString();();
}InitTables()
{= new CategoryTable(connectionString);= new ImageTable(connectionString);= new SettingsTable(connectionString);
}void ClearTables()
{.Clear();.Clear();
}
}
}System;System.Collections.Generic;System.Linq;System.Text;System.Data;System.Data.SqlClient;grabberMolotok.DBEngine
{class CategoryTable : EngineTable
{CategoryTable(string connectionString)
{.tableName = "Categories";.connectionString = connectionString;
}void Insert(List categories)
{(this)
{connection = new SqlConnection(connectionString);insertCategoryCommand = new SqlCommand("sp_InsertCategory", connection);.CommandType = CommandType.StoredProcedure;.UpdatedRowSource = UpdateRowSource.OutputParameters;(insertCategoryCommand.Parameters);.Open();(var category in categories)
{(insertCategoryCommand.Parameters, category);.ExecuteNonQuery();
}.Close();
}
}void Insert(Category c)
{(this)
{connection = new SqlConnection(connectionString);insertCategoryCommand = new SqlCommand("sp_InsertCategory", connection);.CommandType = CommandType.StoredProcedure;.UpdatedRowSource = UpdateRowSource.OutputParameters;(insertCategoryCommand.Parameters);.Open();(insertCategoryCommand.Parameters, c);.ExecuteNonQuery();.Close();
}
}List GetAll()
{(this)
categoryList=newList();getCommand = new SqlCommand("SELECT * FROM " + tableName, connection);.Open();reader = getCommand.ExecuteReader();(reader.Read())
{.Add(GetFromReader(reader));
}.Close();categoryList;
}
}Category GetById(int id)
{(this)
categoryList=newList();getCommand = new SqlCommand("SELECT * FROM " + tableName + " WHERE id=@id", connection);.Parameters.Add(new SqlParameter("@id", id));.Open();reader = getCommand.ExecuteReader();(reader.Read())= GetFromReader(reader);.Close();c;
}
}
#region Мелкие функцииCategory GetFromReader(SqlDataReader reader)
{c = new Category();.id = (int)reader["id"];.level = (int)reader["level"];.name = (string)reader["name"];.url = (string)reader["url"];.parentURL = (string)reader["parentUrl"];c;
}void GetCommandParameters(SqlParameterCollection parameters)
{.Clear();.Add("@id", SqlDbType.Int);.Add("@level", SqlDbType.Int);.Add("@name", SqlDbType.VarChar);.Add("@url", SqlDbType.VarChar);.Add("@parentUrl", SqlDbType.VarChar);
}void FillCommandParameters(SqlParameterCollection parameters, Category c)
{["@id"].Value = c.id;["@level"].Value = c.level;["@name"].Value = c.name;["@url"].Value = c.url;["@parentUrl"].Value = c.parentURL;
}
#endregion
}
}
Модуль Grabber
using System;System.Collections.Generic;System.Linq;System.Text;System.Net;System.IO;System.Windows.Forms;System.Text.RegularExpressions;System.Threading;System.Diagnostics;grabberMolotok.Threading;grabberMolotok
{Grabber
{.DBEngine dbEngine; //движок БД categories; //категорииgetItemCounter; //счетчик получения товаров getItemWorkAmount; //объём работы получения товаровgetItemThreadCount; //количество потоков получения товаров
public int GetItemThreadCount
{{ return getItemThreadCount; }{ getItemThreadCount = value; }
}saveImageCounter; //счетчик сохранения изображений saveItemWorkAmount; //объём работы сохранения изображенийsaveItemThreadCount; //количество потоков сохранения изображений
public int SaveItemThreadCount
{{ return saveItemThreadCount; }{ saveItemThreadCount = value; }
}
#region Событияdelegate void AllCategoriesParseCompletedEventHandler();static event AllCategoriesParseCompletedEventHandler AllCategoriesParseCompletedEvent;delegate void AllCategoriesImageSaveCompletedEventHandler();static event AllCategoriesImageSaveCompletedEventHandler AllCategoriesImageSaveCompletedEvent;delegate void CategoriesGotEventHandler();static event CategoriesGotEventHandler CategoriesGotEvent;OnCategoryParseComplete()
{++;(getItemCounter == getItemWorkAmount)
{();
}
}OnCategoryImageSaveComplete()
{++;(saveImageCounter == saveItemWorkAmount)
{(AllCategoriesImageSaveCompletedEvent != null)();
}
}
#endregion СобытияGrabber()
();=0;=-1;=8;=0;=-1;">{.CategoryParseCompletedEvent += new Category.CategoryParseCompletedEventHandler(this.OnCategoryParseComplete);.CategoryImageSaveCompletedEvent += new Category.CategoryImageSaveCompletedEventHandler(this.OnCategoryImageSaveComplete);= new DBEngine.DBEngine();= new List();= 0;= -1;= 8;= 0;= -1;
saveItemThreadCount = 8;
}
///
/// Получает список категорий с молотка
/// void GetCategories()
{.WriteLine("Получение категорий с сайта");
columnDivList=null;();= wB.WaitElement("pagecontent1", 10000)
.GetInnerElements("table", 0)
.GetInnerElements("tbody", 0)
.GetInnerElements("tr", 3)
.GetInnerElements("td", 1)
.GetInnerElements("div");(var columnDiv in columnDivList)
{.AddRange(columnDiv.GetInnerElements("div"));
}.WriteLine("Категории получены с сайта");
ParseCategories(categoriesHtmlList);(CategoriesGotEvent != null)
CategoriesGotEvent();
}
///
/// Парсит полученные с молотка категории
///
/// categoriesHtmlList)
{.WriteLine("Начался парс категорий");
string[] LastLevelURL = new string[4];catName;catURL;catClass;catLevel;catSiteId;wholeStopwatch = Stopwatch.StartNew();(var categoryHtml in categoriesHtmlList)
{
//Stopwatch stopwatch = Stopwatch.StartNew();= GetName(categoryHtml);= GetURL(categoryHtml);= GetClass(categoryHtml);= GetLevel(catClass);= GetSiteID(categoryHtml);c = null;(catLevel)
{0:
{= new Category(catURL, "this is root", catName, 0, catLevel);[0] = catURL;.Add(c);;
}1:
{= new Category(catURL, LastLevelURL[0], catName, catSiteId, catLevel);[1] = catURL;.Add(c);;
}2:
{= new Category(catURL, LastLevelURL[1], catName, catSiteId, catLevel);[2] = catURL;.Add(c);;
}3:
{= new Category(catURL, LastLevelURL[2], catName, catSiteId, catLevel);[3] = catURL;.Add(c);;
}4:
{= new Category(catURL, LastLevelURL[3], catName, catSiteId, catLevel);.Add(c);;
}: { break; }
}
//stopwatch.Stop();
//Debug.Writ