Наконец сегодня додумал до логического конца алгоритм определения тематики и начал реализацию.  Сюда запишу его, чтобы не забыть детали. Алгоритм построен на теории нейронных сетей, и нужен мне в корыстных целях направленных на яндекс. Ценность алгоритма в том - что это будет первый алгоритм определения тематики сайта, который сможет реализовать почти любой программист. Надеюсь кому-нибудь пригодится.

Этап 1: Определение ключевых слов сайта

1) Получаем страницу
2) Убираем теги, и все кроме букв и пробелов. Знаки препинания заменяем на пробелы. (Цифры удалить!!!)
3) Разбиваем весь текст на слова, то есть делаем одномерный массив слов.
4) удаляем слова меньшие 2 букв
4) Каждое слово прогоняем через стеммер.  Я использую алгоритм Портера. Для тех кто не в курсе стеммер - это программа которая отбразывает от слова суффиксы и приставки, оставляя корень. Алгоритм Портера слаб, но пока сойдет. Как найду морфологический словарь - сменю на него.
5) При прогоне через стеммер создаем новый ассоциативный массив, где ключом будет само слово, а значением колличество повторений слова. Например (”Yandex” =>3, “Тиц” =>5) и т.д.
6) Упорядочиваем ассоциативный массив по убыванию колличества повторений.
7) Удаляем все слова повторяющиеся менее трех раз (колличество под вопросом).
8) В итоге мы получили ключевики сайта с их “тошнотой”. Обычно их на этом этапе 50-100 штук.
9) Проверяем каждый ключевик по базе общих слов не несущих тематику. Например слова: “меня”, “когда”, “сколько” и т.д. Я храню эти слова в отдельной таблице бд и написал отдельный скрипт, который позволяет их сформировать. Обойдя сотню сайтов мы набираем базу самых популярных не имеющих тематику слов.
Этап 2: Создаем тематическую базу

1) Для начала в бд нужно создать три таблицы: “слова”, “тематики” и “веса”.
Поля таблиц:
“Слова”: word_id, word
“Тематики”: theme_id, parent_id, theme
“Веса”: word_id, theme_id, ves
2) Заполняем таблицу тематик. Я для этих целей пользуюсь базой Ашманова (где-то 5000 тематик). Не использую ЯК, потому что сайты в него заносятся вручную, то бишь робот тут не причем. В нашем случае необходимо знать тематику, которую видит робот на обычных сайтов. Я не говорю что тематика по Ашманову совпадет с тем что определил робот яндекса, но нам это и не нужно. Представьте что по Ашманову у нас вышло “кпк” для донора и акцептора, а по яндексу “сотовые телефоны”.Не все ли равно?
3) Самый трудный момент. Выбираем нужную тему, например “интернет-ресуры”. Из найденных в первом этапе ключевиков страницы выбираем относящиеся к этой теме, и проставляем им коэффициенты, насколько сильно они относятся к данной теме (балл от 0 до 1). Позже будем корректировать это значение, сейчас это не суть важно. Это значение и будет синаптической силой. В сумме они дадут активацию нейрона к данной тематике.  В реальности это дает потрясающие возможности даже для многозначных слов. Например слово “лук” можно отнести и к кухне и к “охоте”. Это не повлияет на верность определения.
Этот момент трудный, потому что придется обойти множество сайтов, чтобы собрать хотя бы по 10 слов для каждой тематики. На деле десяти слов вполне достаточно. Итого необходимо 50000 слов, чтобы определить тему сайта по Ашманову. Кто-то скажет это много, но в день при нормальной оболочке можно легко собрать тысячу слов. Итого 50 дней пассивного труда.
4) Мы создали семантическое ядро для каждой тематики, и указали с каким весом относится к каждой теме определенное слово.

Этап 3: Узнаем тему неизвестных сайтов и корректируем результаты

1) Поскольку мы первоначально как-то обучили программу. Теперь покажу как ей пользоваться.
Для неизвестного сайта выполняем этап 1 и узнаем ключевые слова с “тошнотой”.  В результате полученные примерно 30 ключевиков проверяем по базе к каким темам они относятся и какие коэффициенты имеют.

Примитивный пример:
Текст “Лук и стрелы это лук”.
Лук тошнота 2. Тема “охота” вес 0.7.  Тема “кухня” вес 0.6.
Стрелы тошнота 1.  Тема “охота” вес 0.8.
Находим активацию нейрона:
К теме охота: 0.7*2+1*0.8=2.2
К теме кухня: 0.6*1=0.6

Поздравляю - тема текста определена.  Здесь также можно определить в % насколько текст относится к другим темам.
2) Возможно в прошлом этапе неверно проставлены коэффициенты и их нужно корректировать. Для этого необходим отдельный интерфейс, где выбрав тематику видишь все ключевые слова по ней с их коэффициентами. Изменяя коэффициенты мы усиливаем значение того или иного слова в определенной теме. При анализе множества сайтов мы приходим к стабильному результату.

Результат.

Данный алгоритм не нуждается в обсуждении его необходимости. Это каждый решает сам для себя. Мне плевать с колокольни если он вам не нужен:)

Для тех кто хоть что-то понял о том что я сказал - интересно услышать ваши мысли о его эффективности. У меня он уже почти реализован технически, и скоро начну пробовать. Если будет интерес к нему- прикручу как дополнительную услугу к линкфидатору или сделаю веб-сервис для проверки списка ссылок.

Усиленно читают у меня в блоге:

Google Bookmarks Digg del.icio.us Technorati Yahoo My Web News2.ru БобрДобр.ru Memori.ru МоёМесто.ru Mister Wong

В теме указан вопрос, который волнует множество сеошников, пытающихся среди тысячи купленных или полученных ссылок, найти нормальные. В основном тематика нужна для прокачки Тиц, но мало кто понимает что же такое тематичность ресурса для Яндекса.
Стандартное мышление начинающего сеошника - “если сайт о недвижимости ссылается на сайте о недвижимости, то это тематика”. Это мышление очень глупо. А еще есть такой стандарт - купить тысячу гамноссылок и получить тиц 10-20. Это же бред полный… Хоть кто-нибудь осознает, что больше чем 90% из купленных тысячи ссылок передадут вес равный примерно 0.001 тиц, если не меньше. А есть такие ссылки, которые передадут коронную еденицу (Я до сих пор верю, что максимальная передача веса - это еденица). Так как же их найти?
Вспомним откуда появилась тематика. Изначально она создавалась для яндекс-каталога (да и тиц тоже). Но поскольку она работает и для обычных сайтов, то нужно использовать теже алгоритмы, которые используются в Яке.
Итак, привожу простой пример неосознанной тематичности - сайт “зоопарк из москвы” ссылается на сайт “недвижимости в москве”. Это ведь тоже тематика! Только региональная. А для получения региональной тематики достаточно создать у себя страницу контактов, прописать свой телефон с кодом города, и еще желательно поставить яндекс карту.  Потом просто производите региональный поиск ссылок и ищите аналогичные вам. Эти ссылки будут передавать больший вес, чем другие.
Вообщем тематичность довольно обширный параметр для яндекса. Он делится на 6 фасетов - Тема, Регион, Жанр, Источник информации, Адресат информации, Сектор экономики. Read the rest of this entry

Google Bookmarks Digg del.icio.us Technorati Yahoo My Web News2.ru БобрДобр.ru Memori.ru МоёМесто.ru Mister Wong