Skip to content

School project 2016, web-page content analysis using ML

Notifications You must be signed in to change notification settings

JandJane/analyzer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Python 3

Используемые библиотеки — ntkl, pymorphy2 и модуль BeautifulSoup

Использование

Запустить программу analyzer.py и ввести url (или присвоить его переменной url)

Машинное обучение используется для выявления слов, характерных для каждой тематики (самых информативных черт). Классификация производится по простому Баейсовскому алгоритму.

  1. В связи с тем, что мне не удалось найти русскоязычный корпус текстов, разбитых по темам, данные для анализа пришлось собирать. category_parser.py получает на вход массив ссылок на web-страницы и категорию, к которой они относятся. Он выкачивает текст со страницы и выводит список слов в файл feeds_list.txt Таким образом, feeds_list.txt содержит наборы слов в формате: *категория

все встречающиеся слова через пробел*

Выборку можно пополнять.

  1. На втором этапе происходит непосредственно обучение алгоритма и выявление самых информативных слов для каждой категории. Программа learning.py создает сет всех слов, встречающихся в выборке, затем для каждого текста в соответствие каждому слову ставится 1, если оно в нем встречается и 0 в обратном случае — словарь features.

training_set – тренировочная выборка, массив пар features и 1 или 0, в зависимости от того, относится ли текст к исследуемой категории. На этой выборке обучается алгоритм NaiveBayesClassifier библиотеки ntkl в виде класса. training_set также можно поделить на тренировочную и тестовую выборки, чтобы на последней оценить эффективность алгоритма. Например, эффективность на тестовой выборке размером 80 элементов (в тренировочной, соответственно, 158 элементов):

правильных ответов от 87.5% до 98%

Для наибольшей эффективности будем проводить обучение на всей выборке. Когда классификатор обучен, выведем 30 самых информативных слов, отличающих эту категорию от других. Например, для физики это: электрон оптик решётка квант микромир трение радиотехник совпадение кинетический равновесие вакуум атом электромагнитный микроэлектроника заряд радиус оптика изложение относительность геология ток возмущение приближение угловой удк упругий напряжение аномалия тета вдохновлять

Экспортируем эти наборы в файл key_words.txt

  1. Наконец сама программа analyzer.py. Получает на вход url, затем, как и category_parser.py парсит текст, очищает его от html-тегов при помощи BeautifulSoup, удаляет знаки препинания и приводит строку к нижнему регистру. Затем pymorphy2.MorphAnalyzer() приводит слова к нормальной форме.

Соответствие веб-страницы тематике определяется процентом ключевых слов в ней.

Оно оценивается по шкале от 0 до 10, где 10 — ключевых слов 10% и более (в текстах, на которых обучался алгоритм этот процент ~ 30%)

Частоты суммируются, то есть соответствие теме «наука и образование» - соответствие суммы ключевых слов в «науке» и ключевых слов в «образовании».

Также есть идея придавать больший вес, чем обычным словам со страницы, заголовку title, заголовкам h1 - h7 и содержимому meta тегов 'keywords' и 'description'.

Качество алгоритма

Точность определения принадлежности веб-страницы к категории — от 87.5%

Посмотрим, насколько соответствует действительности статистика по категориям.

Возьмем для примера страничку недавнего мероприятия Яндекса – Data Fest, в рамках которого проводидись конференции по программированию (в частности, по машинному обучению :): https://events.yandex.ru/events/ds/10-11-sept-2016/

Как мы видим, содержание равномерно распределилось между информатикой, наукой и анализом данных. Это полностью соответствует действительности.

Рассмотрим новость о бета-тестировании Battlefield 1 с игрового портала: https://evrl.to/articles/58010fd76ec7f74668973467/v-finalnoj-versii-battlefield-1-uzhe-pojavilis-chitery/

Здесь алгоритм очень точно определил, что статья имеет отношение к компьютерным играм и развлечениям и только к ним (остальное — нули).

Теперь посмотрим, как программа оценит сайт курсов по подготовке к ЕГЭ Талантум http://cm.talantum.ru

Здесь результаты чуть более хаотично распределены. Скорее всего, это обсуловлено тем, что на странице говорится и о различных науках (о предметах егэ — химия, математика, информатика), и о высшем образовании (упоминаются разные вузы, в тч экономические), и о школьных экзаменах. Несмотря на это, главные темы выделены верно (наука, образование, школьное образование).

Главную страницу сайта GoTo алгоритм отнес к категориям GoTo и дополнительное образование :)