Разработка автоматизированной системы классификации товаров по их изображениям

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



eLine(((double)stopwatch.ElapsedTicks / (double)Stopwatch.Frequency).ToString());

}.Stop();.WriteLine("Время парса всех категорий " + ((double)wholeStopwatch.ElapsedTicks / (double)Stopwatch.Frequency).ToString() + "с");

Debug.WriteLine("Парс категорий окончен");

}

#region Методы DBEnginevoid ClearTables()

{.ClearTables();

}void ClearCategories()

{.categoryTable.Clear();

}string ReadSetting(string settingName)

{dbEngine.settingsTable.ReadSetting(settingName);

}

///

/// Сохраняет ссылки на изображения в БД

///

/// void SaveImages(Category c)

{.imageTable.Insert(c.categoryImages);

}

///

/// Загружает ссылки на изображения из БД

///

/// void LoadImages(Category c)

{.categoryImages = dbEngine.imageTable.GetImagesInCategory(c);

}

///

/// Сохраняет категории в БД

///

public void SaveCategories()

{.categoryTable.Insert(categories);

}Category GetCategoryById(int id)

{dbEngine.categoryTable.GetById(id);

}

///

/// Загружает категории из БД

///

public void LoadCategories()

{= dbEngine.categoryTable.GetAll();(CategoriesGotEvent != null)();

}

#endregion

#region Работа со списком категорий

///

/// Возвращает список дочерних категорий (рекурсивная)

///

///

/// GetAllChildCategories(Category root)

{();.AddRange(.FindAll((Category category)

{category.parentURL == root.url;

}

)

0&&root.level 0 && root.level < 4)

{(int i = 0; i < count; i++)

{.AddRange(GetAllChildCategories(childs[i]));

}

}childs;

}

///

/// Возвращает список дочерних категорий

///

///

/// GetChildCategories(Category root)

{();.AddRange(.FindAll((Category category)

{category.parentURL == root.url;

}

)

);childs;

}

///

/// Возвращает категории уровня 0

///

/// GetRoots()

{();.AddRange(.FindAll((Category category)

{category.level == 0;

}

)

);roots;

}

#endregion

#region Вспомогательные функции

GetName(HtmlElement e)

{(e.FirstChild != null && e.FirstChild.FirstChild != null) return e.FirstChild.FirstChild.InnerText;"";

}GetURL(HtmlElement e)

{(e.FirstChild != null) return e.FirstChild.GetAttribute("href").Replace("about:", "

}GetClass(HtmlElement e)

{classExpression = new Regex(@"class=.{1}([\w\d\s]*)", RegexOptions.IgnoreCase | RegexOptions.Compiled);match = classExpression.Match(e.OuterHtml);(match.Success)

{match.Groups[1].Value;

}"";

}GetLevel(string classLevel)

{classExpression = new Regex(@"(\d{1})", RegexOptions.IgnoreCase | RegexOptions.Compiled);match = classExpression.Match(classLevel);(match.Success)

{Convert.ToInt32(match.Groups[1].Value);

}-1;

}

{siteIdExpression = new Regex(@"(\d{5,})", RegexOptions.IgnoreCase | RegexOptions.Compiled);match = siteIdExpression.Match(e.OuterHtml);(match.Success)

{Convert.ToInt32(match.Groups[1].Value);

}-1;

}

#endregion

///

/// Получает изображения в категории, в несколько потоков

///

/// cats)

{.WriteLine("Запуск потоков парса ссылок на изображения");

this.getItemCounter = 0;.getItemWorkAmount = cats.Count;preparedList = ThreadHelper.SplitList(cats, getItemThreadCount);(var categories in preparedList)

{thread = new Thread(()

{(var cat in categories)

{.GetItems();.Sleep(10);

}

}

);.SetApartmentState(ApartmentState.STA);.Start();.Join(10);

}

}void ParallelSaveImagesToDisk(List cats)

{.WriteLine("Запуск потоков закачки изображений");

this.saveImageCounter = 0;.saveItemWorkAmount = cats.Count;initialDirectory = ReadSetting("initialDirectory");preparedList = ThreadHelper.SplitList(cats, saveItemThreadCount);(var categories in preparedList)

{thread = new Thread(()

{(var cat in categories)

{.SaveImages(initialDirectory);.Sleep(10);

}

}

);.SetApartmentState(ApartmentState.STA);.Start();.Join(10);

}

}

}

}System;System.Collections.Generic;System.Linq;System.Text;System.Net;System.IO;System.Text.RegularExpressions;System.Windows.Forms;System.Threading;System.Diagnostics;grabberMolotok

{class Category

{

public int id; //ИД категории в системе сайта

public int level; //Уровень вложенияstring name; //Названиеstring url; //ссылкаstring parentURL; //ссылка на категорию-родительList categoryImages; //изображения товаров

#region Событияdelegate void CategoryParseCompletedEventHandler();static event CategoryParseCompletedEventHandler CategoryParseCompletedEvent;delegate void CategoryImageSaveCompletedEventHandler();static event CategoryImageSaveCompletedEventHandler CategoryImageSaveCompletedEvent;

#endregion

#region КонструкторыCategory(string url, string parentURL, string name, int id, int level)

{.url = url;.parentURL = parentURL;.name = name;.id = id;.level = level;= new List();

}Category(string url)

{.id = -1;.level = -1;.name = null;.url = url;.parentURL = null;= new List();

}Category()

{.id = -1;.level = -1;.name = null;.url = null;.parentURL = null;= new List();

}

#endregion

///

/// Получает список товаров в категории

///

public void GetItems()

htmlItems=newList();url = this.url;.NavigateFromRequest(url);

{htmlPageCount = wB.WaitElement("tabMainBox", 20000)

.GetInnerElements("div", 0)

.GetInnerElements("div", 0)

.GetInnerElements("div", 0)

(\d*)", RegexOptions.IgnoreCase | RegexOptions.Compiled);match = pageCountRegex.Match(htmlPageCount.OuterHtml);(match.Success)

{= Convert.ToInt32(match.Groups[1].Value);

}

}(NullReferenceException)

{= 1;

}(int i = 1; i <= pageCount; i++)

{(int tries = 0; tries < 5; tries++)

{

{

//Stopwatch watch = Stopwatch.StartNew();.NavigateFromRequest("

.GetInnerElements("div", 1)

.GetInnerElements("table", 0)

.GetInnerElements("tbody", 0)

.GetInnerElements("tr")

);

//watch.Stop();

//Debug.WriteLine(((double)watch.ElapsedTicks / (double)Stopwatch.Frequency).ToString());;

}(NullReferenceException)

{.Sleep(50);

}

}

}(htmlItems);();

}

///

/// Парсит товары в категории

///

///

/// itemsHtmlList)

{.WriteLine("Начался парс товаров");

Regex itemIdRegex = new Regex("data-id=\"([\\d]*)", RegexOptions.IgnoreC