ПРАВИТЕЛЬСТВО РОССИЙСКОЙ ФЕДЕРАЦИИ
Пермский филиал
федерального государственного автономного образовательного
учреждения высшего профессионального образования
"Национальный исследовательский университет
"Высшая школа экономики"
Факультет бизнес-информатики
Кафедра информационных технологий в бизнесе
ОТЧЕТ
о прохождении преддипломной практики
на базе НИУ ВШЭ Пермь
Преддипломная практика бакалавра
Работу выполнил:
студент группы БИ-10-2
4 курса факультета бизнес-информатики
Руководитель практики:
старший преподаватель кафедры информационных технологий в бизнесе
“_____” 20__ г.
Пермь 2014
Введение
В данной работе рассматривается исследование спроса на специальности в сфере ИТ услуг. Для этого разработана информационная система, способная собирать и обрабатывать данные из сети «Интернет». Работа предназначена для тех, кто хочет определиться в выборе специализации, оценить свои разработки с точки зрения востребованности или даже предугадать грядущие тренды.
Таким образом объектом исследования будет считаться рынок ИТ услуг, а предметом изменения величины спроса на те или иные услуги.
На сегодняшний день одним из самых динамичных рынков является рынок ИТ услуг. И Россия далеко не исключение. Наоборот, по данным исследования Минэкономразвития, объем российского рынка информационных технологий в 2013 г. составил 762 млрд. руб. Эти данные предоставляются в мониторинге об итогах социально-экономического развития РФ в 2013 г.
За 2012 г., по результатам аналогичного исследования, объем рынка ИТ составлял 716 млрд руб., а в 2011 г. –649млрд. Таким образом, за год данный показатель возрос на 46млрд руб., а относительно 2011 г. – на 113 млрд руб.
Таким образом, мы видим постоянно возрастающую динамику рынка. В свою очередь это говорит о том, что рынок еще не до конца насыщен и открыт как для владельцев стартапов так и для обычных специалистов.
Однако создать успешныйстартап, или не прогадать с местом и спецификой работы является довольно сложной задачей. Все дело в динамике рынка, тренды сменяют друг друга очень быстро, и этот процесс постоянно ускоряется. Для сравнения можно привести прогнозы компании Gartner за 2012 и 2013 года [1].
Десять ключевых ИТ-трендов на 2012 год по мнению Gartner:
1. Эволюция виртуализации.
2. Большие объемы данных: отслеживание и анализ закономерностей.
3. Энергоэффективность и мониторинг энергопотребления.
4. Контекстно-зависимые приложения.
5. Сохранение и обучение персонала.
6. Социальные сети.
7. Консюмеризация.
8. Объем вычислений в пересчете на квадратный фут.
9. Облачные вычисления.
10. Конвергенция инфраструктуры.
Аналогичные данные на 2013 год:
1. Повсеместное проникновение мобильных устройств
2. Мобильные приложения и HTML5
3. Частные облака
4. Корпоративные магазины приложений
5. «Интернет вещей»
6. Гибридные и облачные технологии
7. Большие данные
8. Аналитика в действии
9. Вычисления в оперативной памяти
10. Интегрированные экосистемы
Разумеется, это всего лишь прогнозы и они не должны были сбываться со стопроцентной вероятностью. Однако по ним можно судить насколько динамичен ИТ рынок. Ведь всего лишь за год 90% трендов сменилась, а остальные сменили свои позиции в ТОПе.
Таким образом, для создания успешного стартапа необходимо предугадывать состояние рынка на год – полгода вперед. Либо, по крайней мере, быть очень хорошо осведомленным по потребностям рынка в текущий момент.
Для крупных компаний решение этого вопроса не является проблемой, так как они имеют целые отделы по анализу рынка и широким спектром инструментов для создания прогнозов. Даже если крупная компания не имеет подобного отдела, она в состоянии заказать исследования у другой специализированной компании.
Для людей, у которых нет доступа к мощным корпоративным инструментам в этой области не существует доступных аналогов для проведения рыночного анализа, поэтому они обречены полагаться лишь на свой опыт.
Таким образом, целью этой работы является создание доступного и функционального приложения для анализа спроса на российском ИТ рынке.
Для достижения поставленной цели были выдвинуты следующие задачи:
анализ специальной литературы, сбор, систематизация и обобщение инструктивных и нормативных материалов;
анализ предметной области;
анализ методологий;
анализ форм отчетности;
анализ информационных технологий для разработки системы;
разработка информационно-аналитической системы «Анализ спроса на рынке ИТ услуг»;
тестирование о отладка разработанной системы.
Глава 1. Анализ и описание средств разработки
Выполнение данной работы в конечном итоге сводится к разработке программы, которая собирает необходимые данные и на и х основе выдает различные аналитические результаты.
Таким образом, приложение, реализующее анализ рынка, должно состоять из трех основных частей:
сбор данных;
обработка и подготовка информации;
методы анализа и прогноза.
Последний пункт также подразумевает и визуализацию полученных результатов. Каждый из описанных выше пунктов затрагивает разные технологические сферы и, соответственно, реализуется при помощи разных технологий. Основной платформой для разработки служит .NET,среда поддерживающая данную платформу - VisualStudio 2010, а в качестве языка разработки выступает C#. Данные собираются из вакансий, размещенных на сайте «Хедхантер.ру» - hh.ru.
Ниже приведены некоторые толкования понятия платформа.
Платфо́рма — аппаратный и/или программный комплекс, служащий основой для различных вычислительных систем. [2] Из-за емкости определения, не отражено такое ключевое свойство как многоуровневость.
Платфо́рма- нижний слой многоуровневой организации вычислительной системы (аппаратура, операционная система, прикладное программное обеспечение), на который опираются ОС и прикладное ПО. [3] Данное определение полностью описывает концептуальную суть платформы.
Для начала рассмотрим дерево целей.
1. Подготовка к сборуданных.
1.1. Анализ сайта (hh.ru).
1.1.1. Анализ ссылки GET запроса для отображения вакансий интересующей области.
1.1.2. Анализ особенностей вывода данных.
1.1.3. Определение проблемных мест и разработка методов для их решения.
1.2. Поиск и анализ необходимых средств для реализации сбора данных.
2. Разработкаалгоритма «Парсинга»
2.1. Проектирование базы данных.
2.2. Использование ссылки GET запроса, как начальной ссылки для алгоритма парсинга.
2.3. Использование выбранных инструментов для реализации алгоритма парсинга и сбора подробной информации о каждой вакансии.
2.4. Занесение полученной информации в базу данных.
3. Реализациялатентно-семантическогоанализа.
3.1. Поиск и анализ существующих алгоритмов семантического анализа.
3.2. Реализация семантического анализа.
4. Реализацияметодов Data Mining.
4.1. Реализация статистики.
4.2. Реализация метода поиска ассоциаций.
5. Визуализация полученных результатов.
Следует уточнить, что в рамках преддипломной практики будут реализованы не все заявленные методы.
Основными критериями при выборе средств и инструментов будут являться:
1. Доступность – подразумевает свободное распространение продукта, так как не существует бюджета на создание данного проекта.
2. Популярность – необходимо выбирать наиболее широко распространённые средства, так как для них написано больше контента и, соответственно, рассмотрено большее количество различных проблем и вопросов.
3. Функциональность – широта возможностей средства, чем больше возможностей, тем гибче будет создаваемое приложение.
4. Эффективность – подразумевается простота в использовании в связке с получением желаемого результата. Чем проще язык тем проще в нем разобраться, но качество исполнения при этом не должно страдать.
Таким образом, обосновывая выбор платформы, можно сказать, что VisualStudio является одним их наиболее мощных платформ для программирования. Поддерживает множество языков. А также предоставляет удобный интерфейс для программирования и отладки. В качестве языка программирования был выбран C#. Существует мнение, что это лучший язык длябизнес приложений. Его достоинствами являются максимальная простота, очень высокая функциональность, судя по количеству библиотек и классов, а также наличие официального сайта-справочника, где описана каждый метод или поле для каждого класса.
Место сбора данных
HeadHunter — российская компания интернет-рекрутмента, функционирующее на территориях России, Украины, Белоруссии, Казахстана.
Портал предназначается для поиска профессионалов. Качество соискателей осуществлялось за счет разделения прав доступа к резюме, такой подход послужил залогом защиты информации. Сайт был реализован с целью предоставить максимально удобную площадку для работодателей и соискателей. Основные доходы получались за счет продажи информации из базы данных резюме. Портал быстро стал популярным, и количество пользователей вскоре превысило миллион.Стратегия компании — инвестиции в новые технологии и совершенствование существующих сервисов. Все вакансии и резюме на сайте hh.ru проходят ручную проверку модераторами. Открытый доступ присутствует только данным месячной давности. К более старым вакансиям и резюме доступ платный, и осуществляет за счет доступа к базе данных. Как для работодателей, так и для соискателей HeadHunter предоставляет набор инструментов для эффективной работы.
В качестве информационной базы для данного проекта был выбран этот именно этот сайт, потому что для статистики и других методов преимущественно важно количество данных для анализа. Чем больше данных тем точнее получится результат. В свою очередь HeadHunter является крупнейшим сайтом обладающим подобного рода информацией. Таким образом, данный сайт подходит под все критерии кроме доступности. Так как данная компания защищает свою информацию. Однако эта проблема решаема и не несет больших сложностей.
Библиотеки работы с HTML
Парсинг – это синтаксический анализ документов, который автоматически осуществляетсяпарсером – специальной программой или скриптом. Идеей парсингаявляетсядобыча определенной информации из тела документа, преимущественно в качестве документа является страница сайта.Параметры отбора и анализаназначаютсязаранее.
Три этапапарсинга являются поэтапными стадиями процесса. Первый этап этосбор информации. Второй этап заключается в анализе данных, обработке и преобразовании в нужный формат. Последний этап – предоставление результата, вывод данных. Наиболее часто парсинг опирается на систему регулярных выражений.
Для работы с xml и xml-подобными документами (HTML базируется на XML), существуют анализаторы. Выделяются два типа анализаторов – DOM и SAX. Оба анализатора принципиально отличаются по алгоритму работы. SAX выполняет фрагментарную обработку. Такой подход позволяет эффективно работать собъемными документами. Однако такой подход не всегда является оптимальным. DOM-анализатор загружает весь документ в память компьютера, формирует дерево узлов. Узлами называют отдельные элементы дом интерфейса, в данном контексте речь идет об HTMLтегах. Далеепри помощи инструментов (XPath или jQuery) легко произвести навигацию, поиск, замену и т.д. Наиболее распространённым является DOM-анализатор, его часто используют в JS, C#, PHP, Python и т.д.
Для расширенного анализа в XML были включены технологии XLink. XPath, Xpointer.
XPath (XML PathLanguage) — язык запросов к элементам XML-документа. Разработан для организации доступа к частям документа XML в файлах трансформации XSLT и является стандартом консорциума W3C. XPathпризван реализовать навигацию по DOM в XML. В XPath используется компактный синтаксис, отличный от принятого в XML.
БиблиотекаLibxml2реализоваласьнаLinux для проекта GNOME. Сейчас повсеместно применяется во множествепарсеров. Официальный сайт - http://www.xmlsoft.org. Проект изначально разрабатывается наС, но уже портирован на большинство языков программирования, в том числе и на Паскаль. Для подключения libxml2 к своему проекту используется откомпилированный код (либо компилируемый исходник). В среде Windows это динамическая библиотека libxml2.dll, в Линуксах libxml2.so. В среде freePascal проект реализован в библиотеке под названием xml2. Libxml2 это XSLT-процессор, в нем доступныXQuery, XPath. Он поддерживает HTML, есть встроенные функции для парсинга. Подходит для работы с большинством кодировок, а так же способен конвертировать документы в различные кодировки. Имеет множество функции для работы в архитектуре DOM и SAX. На данный момент есть множество примеров на языке С.
Отличительной чертой библиотекиInternettoolsявляется поддержка XPath 2. Данный язык является следующей версией языкаXPATH1.0 однако весьма скудное количество библиотек поддерживает его. Помимо всегореализованы такие функции как simplehtmlparser и htmltreeparser. Реализован продвинутый метод шаблонного поиска
HtmlAgilityPack (HAP) является.NETбиблиотекой, котораяработает в архитектуре DOM. Данная библиотекапереводит узлы htmlстраницы в объектыклассаHTMLDocument. Данный класс полностью идентиченвстроенному классу XMLDocument, и является лишь своеобразной оберткой.
Ввиду этого доступны такие возможности как:
Linq to Objects (via LINQ to Xml)
XPATH
XSLT
Всего данная библиотека насчитывает 20 классов, среди которых GetElementbyId(), CreateAttribute(), CreateElement() и другие.
Для реализации алгоритма парсинга была выбрана именно эта библиотека, поскольку она компактна, поддерживает все основные технологии (XPATHи другие), проста в плане интеграции и концептуального понимания. Является самой используемой библиотекой работы сHTML дляC#. Основной причиной является то, что она разработана специально для .NET приложений, чем и является данный проект. Таким образом, соблюдены все критерии.
Базы данных
Реляционная модель данных (РМД) — логическая модель данных, прикладная теория построения баз данных, которая является приложением к задачам обработки данных таких разделов математики как теории множеств и логика первого порядка.
Реляционная модель данных основывается на правилах предикатов первого порядка логики и теории математических множеств. Все данные в такой модели представлены в виде кортежей, сгруппированных в отношения [9]. В математике кортеж— упорядоченный конечный набор длины n (где n — любое натуральное число либо 0), каждый из элементов которого x_i принадлежит некоторому множеству X_i, 1< i < n. Элементы кортежа могут повторяться в нём любое число раз (этим, в частности, он отличается от упорядоченного множества, куда каждый элемент может входить только в одном экземпляре). n-арным отношением R, или отношением R степени n, называют подмножество декартовa произведения множеств D_1, D_2, ..., D_n (n>= 1), не обязательно различных. Исходные множества D_1, D_2, ..., D_n называют в модели доменами. Отношение имеет простую графическую интерпретацию в виде таблицы, столбцы (поля, атрибуты) которой соответствуют вхождениям доменов в отношение, а строки (записи) — наборам из n значений, взятых из исходных доменов. Число строк (кортежей) называют мощностью отношения. Таким образом, реляционная модель данных включает в себя 3 аспекта: структурный аспект, аспект целостности и аспект обработки. Структурный аспект отвечает за то, что данные в базе данных представляют собой набор отношений. Аспект целостности в свою очередь обеспечивает соответствие модели определенному уровню целостности. Реляционная Модель Данных поддерживает декларативные ограничения целостности уровня домена (типа данных), уровня отношения и уровня базы данных. Аспект обработки обеспечивает поддержку операторов манипулирования отношениями (реляционная алгебра, реляционное исчисление). Наличие реляционной алгебры позволяет реализовать декларативное программирование и декларативное описание ограничений целостности, в дополнение к навигационному (процедурному) программированию и процедурной проверке условий. Реляционная модель данных является логической, то есть отношения являются логическими (абстрактными), а не физическими (хранимыми) структурами. Для реляционных баз данных верен информационный принцип: всё информационное наполнение базы данных представлено одним и только одним способом, а именно — явным заданием значений атрибутов в кортежах отношений. В частности, нет никаких указателей (адресов), связывающих одно значение с другим.
Реляционные базы данных на сегодняшний день являются основным компонентом любой аналитической системы, системы поддержки принятия решений, корпоративной информационной системы и почти любой системы другого вида. Реляционная модель и реляционные базы данных лежат в основе таких технологий, как хранилища данных, OnlineAnalyticalProcessing, DataMining и многих других методов и инструментов, использующих в своей работе большие объемы данных. Пример схемы реляционной базы данных представлен на рисунке 1.1.
Рисунок 1.1. Пример схемы реляционной базы данных
Анализ текста.
Латентно-семантический анализ (ЛСА) — это подход к анализу информации на естественном языке, который позволяет выделить взаимосвязь между набором документов и словами находящимися внутри них. Конечном счете, данный алгоритм позволяет определить ключевые слова и основной смысл текста.[3]
Основой ЛСА служат принципы факторного анализа, а именно, выявление латентных связей изучаемых явлений или объектов В основном ЛСА используется во классификации документов для выявления контекстно-зависимых значений лексических единиц при помощи статистической обработки больших блоков текстов.
Для примера возьмём несколько различных текстов на тематику WikiLeaks. Для запуска алгоритма из этих текстов исключаются стоп-символы. Стоп-символы -слова, которые являются неотъемлемой частью каждого текста, но не несут в себе никакой смысловой нагрузки. К таким словам можно отнести частицы, союзы, предлоги и остальные вспомогательные части речи.
Затем производится операция стемминга – избавление от лишних частей слова: приставки, окончания итд. Это нужно что бы выявить слова несущие одинаковый смысл. Самым известным алгоритмом для стемминга является алгоритм Портера.
Дальше исключаются слова встречающиеся в единственном экземпляре.
В результате можно наблюдать следующий текст:
1. Британская полиция знает о местонахождении основателя WikiLeaks
2. В суде США начинается процесс против россиянина, рассылавшего спам
3. Церемонию вручения Нобелевской премии мира бойкотируют 19 стран
4. В Великобритании арестован основатель сайта Wikileaks Джулиан Ассандж
5. Украина игнорирует церемонию вручения Нобелевской премии
6. Шведский суд отказался рассматривать апелляцию основателя Wikileaks
7. НАТО и США разработали планы обороны стран Балтии против России
8. Полиция Великобритании нашла основателя WikiLeaks, но, не арестовала
9.В Стокгольме и Осло сегодня состоится вручение Нобелевских премий
Далее нужно приступать непосредственно к самому ЛСА.
Первым делом требуется создать частотную матрицу индексируемых слов рис 1.2. Это такая матрица, строки которой соответствуют присутствию индексируемых слов в документах, а столбцы — самим документам. В каждой ячейке матрицы указано количество раз, сколько слово встречается в соответствующем документе.
Рисунок 1.2. Частотная матрица индексируемых слов.
Следующим шагом проводится сингулярное разложение полученной матрицы рис 1.3. Сингулярное разложение это математическая операция раскладывающая матрицу на три составляющих. Т.е. исходную матрицу M мы представляем в виде:
M = U*W*Vt
где U и Vt – ортогональные матрицы, а W – диагональная матрица. Причем диагональные элементы матрицы W упорядочены в порядке убывания. Диагональные элементы матрицы W называются сингулярными числами.
Рисунок 1.3. Сингулярное разложение матрицы.
Принцип сингулярного разложения заключается в том, что оно выявляет ключевые элементы матрицы, при этом игнорируя шумы. Согласно правилам произведения матриц, можно заметить, что столбцы и строки соответствующие меньшим сингулярным значениям в итоге вносят наименьший вклад в итоговое произведение. Так, мы можем больше не рассматривать последние столбцы матрицы U и последние строки матрицы V^t, оставив только несколько первых. Данный подход гарантирует оптимальность полученного произведения. Разложение такого вида называют двумерным сингулярным разложением рис 1.4.
Рисунок 1.4. Двумерное сингулярное разложение матрицы.
Теперь отметим на графике точки соответствующие отдельным текстам и словам рис 1.5.
Рисунок 1.5. График ключевых слов.
По рис 5. можно судить, что статьи образуют три независимые группы, первая группа статей располагается рядом со словом «wikileaks», и действительно, если мы посмотрим названия этих статей становится понятно, что они имеют отношение к wikileaks. Другая группа статей образуется вокруг слова «премия», и действительно в них идет обсуждение нобелевской премии.
При выборе алгоритма необходимо было руководствоваться его эффективностью, так как это ключевой момент работы. От того насколько точно алгоритм сможет определять ключевые слова зависит все последующие результаты. Этот алгоритм способен давать точные «теги» для больших групп документов и это определяющие, но далеко не единственное его достоинство.
Синтаксический анализ— процесс сопоставления линейной последовательности лексем (слов, токенов) естественного или формального языка с его формальной грамматикой. Результатом обычно является дерево разбора (синтаксическое дерево). Обычно применяется совместно с лексическим анализом.
В программировании программа или её часть выполняющая данную функцию называется синтаксический анализатор. Результат синтаксического разбора - это набор словоформ, отображенных в узлы синтаксического графа, и соединяющих их связей (ребер). Рис 1.6.
Рисунок 1.6. Пример синтаксического графа.
К сожалению, данный метод крайне сложен для реализации, а доступных библиотек в открытом доступе практически нет. В отличие от синтаксического анализа латентно-семантический более доступен. Однако его минус в том, что при больших объема данных он чересчур сильно грузит систему.
Поэтому было решено написать собственный алгоритм анализа текста, который будет описан во второй части.
Таким образом, в ходе исследования были выявлены все необходимые инструменты и алгоритмы для реализации заявленного приложения. В качестве основного языка будет выступать C#, так как это наиболее мощный и распространённый язык на .NET платформе. Библиотекой для парсинга будет являться HAP (HtmlagilityPack), где доступ к узлам будет осуществляться за счет XPath. В качестве базы данных будет выступать реляционная база данных MicrosoftSQLServer, приведенная в 3 нормальную форму. Анализ и группировка информации будет осуществляться при помощи алгоритма собственной разработки. В качестве методов DataMining будут реализован методассоциаций. Помимо него будет доступна простая статистика.
Глава 2. Анализ данных и разработка приложения.
Для понимания основной идеи приложения, прежде всего, необходимо глубже проанализировать структуру и функционал сайта, с которого добывается информация.
2.1Структура и функционал сайта hh.ru
Несмотря на узкую специализацию сайта у него довольно широкий функционал. Зарегистрироваться на сайте можно двумя способами. Первый способ – это регистрация в качестве соискателя (человека которому нужна работа), а второй – регистрация в качестве работодателя, чаще всего компания или юр. лицо, которому нужны работники. В зависимости от типа регистрации предоставляются свои возможности работы с сайтом. Так работодатель может создать вакансию, а соискатель оставить резюме.
Помимо основных возможностей, необходимых для поиска работы на сайте присутствует множество дополнительных материалов и опций. Например, на сайте присутствует возможность пройти специальный тест, оценивающий профпригодность тестируемого, а так же возможность записаться на курсы повышения квалификации. На рис 2.1 отражена главная страница сайта.
Так же следует отметить, что на сайте присутствует весьма гибкий расширенный поиск рис 2.2. Используя расширенный поиск можно отобрать вакансии по любой фразе, ключевому слову,профессиональной области, специализации, региону, уровню зарплаты, дате итд.
По причине того, что в работе анализируется спрос на ИТ рынке, сайт будет рассмотрен с точки зрения вакансий относящихся к данному рынку. Другими словами все резюме и вакансии не имеющие отношение к ИТ рассматриваться не будут. рис 2.3.
Рис 2.1 Главная страница сайта hh.ru
Рис 2.2 Расширенный поиск на сайте hh.ru
Рис 2.3. Некоторые профессиональные области доступные для поиска на сайте hh.ru
Профессиональная область «Информационные технологии, интернет, телеком» содержит следующие специализации, по каждой из которых будет производиться полный парсинг вакансий за день рис 2.4.
Рис 2.4. Специализации профессиональной области «Информационные технологии, интернет, телеком».
После настройки критериев поиска пользователю предоставляется список вакансий рис 2.5. Именно по такому списку происходит парсинг вакансий.
Рис 2.5 Список вакансий отобранных по параметрам
2.2 Потоки данных
Несмотря на высокую функциональность сайта, основная схема его работы довольно проста. При регистрации тип пользователя делится на два вида: соискатель и работодатель. Как уже было сказано выше, у каждого из них свои возможности и функционал. Однако так или иначе основными действиями обоих видов является подача и поиск объявлений о предоставлении работы или же о желании быть принятым на работу. На рисунке 2.6 можно увидеть соответствующую диаграмму потоков данных DFD.Данная модель является моделью AS-IS, т.е. отображает процессы, протекающие на данный момент. Другими словами существенной пользы помимо помощи в нахождении определенных организаций и потенциальных сотрудников компания Headhunterне предоставляет.
Рис 2.6 AS-ISмодель потоков данных функционирования сайта hh.ru, сделанная по методологии DFD
Данная модель является моделью AS-IS, как есть. Другими словами существенной пользы помимо помощи в нахождении определенных организаций и потенциальных сотрудников компания Headhunterне предоставляет.
Приложение, описываемое в этой работе, ориентировано на аналитику, поэтому является скорее сторонним продуктом, нежели дополняющим. Однако та информация, которая добывается при помощи парсинга, содержит 90% информации о каждой вакансии по сравнению с оригиналом. Таким образом, при желании данный программный продукт может использоваться в качестве пополняемой базы данных вакансий.Помимо организованного поиска по базе данных можно будет использовать аналитические методы и методы datamining. В стадии завершенного программного продукта, данное приложение не ттолько поможет проанализировать отдельные аспекты ИТ рынка, но и предложить конкретные вакансии. На рис 2.7. приведена DFDдиаграмма TO-BE.
Рис 2.7 TO-BEмодель потоков данных функционирования разрабатываемого приложения, сделанная по методологии DFD
2.3 Архитектура Базы Данных
В ходе разработки приложения была спроектирована БД. БД была сознада на SQLServerи приведена в 3-ю нормальную форму.Данная БД служит для хранения информации о вакансиях и полученных в ходе семантического анализа тегах.
База данных состоит из 4 таблиц:
Vacancies;
Tags_Vacancies;
Tags;
ProfAreas.
Таблица «Vacancies»служит для хранения всей информации о вакансиях. Соединена с таблицей «ProfAreas» связью один-ко-многим по полю Specify. Соединенас таблицей «Tags» связью многие-ко-многим при помощи таблицы «Tags_Vacancies». Данная таблица содержит следующие поля:
ID_vacancy: идентификатор, первичный ключ.Тип: longint;
Title: название вакансии. Тип:varchar(50);
Salary: уровень зарплаты. Тип:varchar(50);
Specify: ИД специализации. Тип:int;
City: город. Тип:varchar(50);
Experience: требуемый опыт работы. Тип:varchar(50);
Date:дата создания вакансии. Тип:varchar(50);
Text: текст вакансии. Тип:varchar(MAX);
Hash: hash-значения MD5 от имени вакансии, названия компании и уровня зарплаты. Данное поле является уникальным. Тип:varchar(50);
Company: название компании разместившей вакансию. Тип:varchar(50).
Таблица «Tags» служит для хранения тегов полученных в ходе семантического анализа. Соединенас таблицей «Vacancies» связью многие-ко-многим при помощи таблицы «Tags_Vacancies».Данная таблица содержит следующие поля:
ID_tag: идентификатор, первичный ключ.Тип: int;
Tag: название тега.Уникальное поле. Тип:varchar(50).
Таблица «Tags_Vacancies» служит длясознания связи многие-ко-многим между таблицами «Vacancies» и «Tags». Соединена связями один ко многим с таблицами «Vacancies» и «Tags» по полям «ID_vacancy» и «ID_tag» соответственно. Данная таблица содержит следующие поля:
ID_vacancy: поле идентификатора вакансии.Тип: longint;
ID_tag: поле идентификатора тега.Тип:int;
Tag_importance:поле значимости тега для данной вакансии. Тип:int.
Таблица «ProfAreas» служит дляхранения кода специализации. Данный код необходим для создания соответствующего GET запроса сайтуhh.ru. Соединена с таблицей «Vacancies»связью один-ко-многим. Данная таблица содержит следующие поля:
ID_area: идентификатор, первичный ключ.Тип: int;
Value: значение кода специализации. Тип:varchar(50);
Name: название специализации. Тип:varchar(50).
На рисунке 2.8 представлена схема БД.
Рис 2.8 Схема БД
2.3 Реализация классов и описание основных методов.
Данное приложение разработано в среде VisualStudioна языке C#. Для разработки интерфейсов использовались Windows Forms.
2.3.1 Реализация классов
Основные методы находятся внутри автоматически сгенерированного класса «Form1», т.е. все методы и дополнительные классы находятся внутри формы.
Помимо класса «Form1» были введены 2 дополнительных класса «KeyValue» и «ListValue». «KeyValue» содержит 2 поля: «Key» и «Value» с типами «int» и «string» соответственно. Данный класс публичным, он нужен для хранения ключа (в общем случае любого значения типа «int» имеющего отношение к значению в поле «string») переменной и его значения. Помимо конструкторов без параметров и с параметрами класс не имеет методов. Содержимое класса можно увидеть на рисунке(*).
Класс «ListValue» также содержит 2 поля: «Tags» и«TagText» с типами «List<KeyValue>» и «string» соответственно.Данный классявляется публичным, он служит для хранения информации о тегах вакансии и части её текста. В список в поле Value без повторовзаносятся значенияполучаемых тегов. В случае повтора значение поля Key в повторяющегося тега, которое по умолчанию равняется единице,увеличивается на один. Данный класс, как и класс «KeyValue», состоит исключительно из конструкторов.(*)
2.3.2Описание основных методов.
Одним из основных методов получения и обработки данных является метод «publicvoidparse()». Данный метод вызывается по нажатию на кнопку «Парсинг вакансий». В начале метода объявляются все необходимые переменные, куда будут записываться получаемые значения в результате парсинга. Так как данный метод парсит вакансии только за текущий день, то его следует запускать каждый день. В последующих версиях планируется сделать этот процесс автоматическим и не зависящим от пользователя. Текущая дата хранится в переменной «today». После объявления всех необходимых переменных создается строка GETзапроса. Выглядитданнаястрокаследующемобразом:
http://hh.ru/applicant/searchvacancyresult.xml?orderBy=0&itemsOnPage=100&areaId=113&specializationId=1.10&text=&source=&professionalAreaId=1&compensationCurrencyCode=RUR&noMagic=true&searchPeriod=30&page=1
После указания доменного имени страницы, за символом «?» следует перечисление параметров, которые мы передаем серверу. Задача программы перебрать все вакансии за день для каждой из специализаций. Таким образом следует менять параметры: «&specializationId» и «&page», пока дата размещения вакансии совпадает со значением переменной «today». Если параметр «&page» можно менять лишь увеличивая значение специально созданной переменной типа «int»и поставляя его в строку. То для получения нужного значения для «&specializationId» нужно поключаться к базе и брать значение из таблицы «ProfAreas» по полю «Value».
Для подстановки нужных значений весь последующий код заключен в циклы
Верхний из которых отвечает за подстановку значений в «&specializationId» а нижний в «&page». После подстановки значений создается класс «HtmlDocument» библиотеки «HTMLAgilityPack», который скачивает необходимый документ в переменную «doc». Следует учитывать, что на основе строки с нужным GET запросом формируется класс «HttpWebRequest», который помимо текста ссылки содержит необходимые http заголовки запроса, такие как «Referer», «UserAgent»и другие. Они необходимы для работы со сторонним сервером. Данная процедура осуществляется при помощи метода «publicstringgetRequest(stringurl)».
Переменная «doc» представляет собой DOM дерево HTML тегов. При помощи языка Xpath уточняется месторасположение необходимых частей данного дерева, после чего из него изымается интересующая нас информация и записывается в переменные. В частности на первом этапе берутся ссылки на конкретные вакансии, после чего используя метод метода «publicstringgetRequest(stringurl)», выгружается документ отдельной вакансии в переменную «doc2». На втором этапе из переменной «doc2» вытягивается вся возможная информация о вакансии.
Следует рассмотреть процесс получения текста вакансии. При помощи Xpath берутся все потомки контейнера содержашие части текста вакансии. Потомки представляют собой дочерние HTML теги. Поочередно получая внутренний текст каждого тега, по частям собирается текст вакансии. Параллельно с этим анализируется внутренний текст каждого HTML тега на предмет ключевых слов.
Данный анализ выполняется при помощи метода «publicListValueGetTags(ListValuetags)». Для начала формируется пустой список тегов и строка берущая значение по полю «innerText» у каждого тега. На их основе создается переменная класса «ListValue». Данная переменная передается в метод «GetTags».
Перед анализом из строки удаляются все лишние символы. Затемприпомощифункции «publicboolIsRussian(stringsentence)» определяется язык текста. Это крайне важно т.к. для каждого языка существуют свои правила выделения ключевых слов. Далее в строке ищутся ключевые слова по определенным правилам. Для каждого языка они свои, например для русскоязычного текста об IT сфере, практически любое слово содержащее англоязычный символ является ключевым. Проверку на принадлежность с символа к какой либо группе осуществляется при помощи функции «publicStringCheckCharType(charch)». Далее получаемые ключевые слова, именуемые в данной работе тегами заносятся в список по принципу, если тег повторяется то не создается новый элемент списка, а увеличивается значение поля «Key»у соответствующего элемента типа «KeyValue». Таким образом определяется важность каждого тега для текущей вакансии.
После изъятия всех данных о ваансии происходит занесение в базу. Сначала создается MD5 hash от названия вакансии, названия компании и названия компании. Далее значения вакансии заносятся в базу, в том числе и MD5hash.ЕслиMD5hashнеуникальный, то вакансия в базу не попадет. Затем заносятся все теги этой вакансии из списка переменной «Tags». Следует отметить, что значение тега так же должно быть уникальным, иначе оно заноситься не будет. После занесения вакансий и тегов в поле Tags_Vacancies.ID_vacancies заносится ID последней записи в таблице Vacanciesа далее все теги с э……. пох доделаю потом.
Заключение
В результате прохождения преддипломной практики была собрана и обработана информация о вакансиях с сайта hh.ru. Так же были раскрыты такие понятия как парсинг и семантический анализ, а так же рассмотрены способы и инструменты их реализации.
В рамках проделанной работы были проанализированы существующие способы анализа DOMдерева в формате HTML,XMLиXHTML с целью изъятия из него необходимых данных.(не закончено)описания структуры электронных документов, таких как форматы HTML и SGML, и существующие способы описания документов (подходы DublinCore, SHOE, DoCO, онтология проекта исследовательской группы KWARC).
Кроме того в работе был приведен анализ материалов о предметно-ориентированных языках и обзор методов и средств их разработки:MetaEdit+, MSDSLTools, EclipseGMF, StateMachineDesigner, MetaProgrammingSystem, REAL-IT, UFO-toolkit. Основываясь на результатах анализа, ни одна из рассмотренных технологий не позволяет производить трансформацию созданных моделей из одной нотации в другую. А также отсутствие возможности отчуждения DSL от DSM-платформ практически во всех описанных технологиях, кроме EclipseGMF.
Результатом работы являются три спроектированные метамодели для описания структуры и содержания электронных документов, реализованные при помощи платформы EclipseGMF. На данный момент метамодели описывают элементы электронного документа, реквизиты и его виды.
В дальнейшем данная тема будет расширяться. Планируется разработка предметно-ориентированного языка описания структуры и содержания электронных документов, интегрируемого спроектированные метамодели. Также разрабатываемый DSL должен будут удовлетворять сформулированным требованиям:
предоставление возможности построения моделей пользователем, не имеющим глубоких знаний в области моделирования;
являться наглядной для пользователя и не перегруженной лишними элементами;
набор элементов должен полностью удовлетворять потребности пользователя.
Библиографический список
1. ЭлектронныйресурсGartnerIdentifiestheTop 10 StrategicTechnologyTrendsfor2013
http://www.gartner.com/newsroom/id/1826214
2. ЭлектронныйресурсВикипедия свободная энциклопедия
http://ru.wikipedia.org/wiki/Компьютерная_платформа
3. Codd E.F., Codd S.B., Salley C.T. Providing OLAP to User-Analysts, 1998
4. Codd E.F. A Relational Model of Data for Large Shared Data Banks, IBM Research Laboratory, San Jose, California 1970
5. ЭлектронныйресурсВикипедия свободная энциклопедия
http://ru.wikipedia.org/wiki/Реляционная_модель_данных
6. Thomas Landauer, Peter W. Foltz, & Darrell Laham. «Introduction to Latent Semantic Analysis», 1998.
7. Davenport T.H., Harris J.G. Competing on Analytics: The New Science of Winning, Harvard Business School Press, 2007
8. Fayyad U., Piatetsky-Shapiro G., Smyth P. From Data Mining to Knowledge Discovery in Databases, 2008
Прохождении преддипломной практики на базе НИУ ВШЭ - Пермь
Отчет по практике по предмету «Информатика»