Алгоритм определения тематики сайтов (решение)

kotofeich
На сайте с 25.03.2009
Offline
28
7455

Привет всем.

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

Этап 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) Возможно в прошлом этапе неверно проставлены коэффициенты и их нужно корректировать. Для этого необходим отдельный интерфейс, где выбрав тематику видишь все ключевые слова по ней с их коэффициентами. Изменяя коэффициенты мы усиливаем значение того или иного слова в определенной теме. При анализе множества сайтов мы приходим к стабильному результату.

Результат.

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

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

P.S. Данный пост опубликовал у себя в блоге.

Надеюсь тут никто не против ссылки, просто не хочу чтобы яндекс посчитал что на этом сайте находится основной текст, а у меня копия.

P.P.S. для определения тематики сайта, а не отдельной страницы легко можно брать ключевики с n страниц

Expert Theme (http://extheme.ru) - определение тематики любых сайтов, текстов и страниц
murvuz
На сайте с 14.06.2007
Offline
191
#1
kotofeich:

2) Заполняем таблицу тематик. Я для этих целей пользуюсь базой Ашманова (где-то 5000 тематик). Не использую ЯК, потому что сайты в него заносятся вручную, то бишь робот тут не причем. В нашем случае необходимо знать тематику, которую видит робот на обычных сайтов. Я не говорю что тематика по Ашманову совпадет с тем что определил робот яндекса, но нам это и не нужно. Представьте что по Ашманову у нас вышло “кпк” для донора и акцептора, а по яндексу “сотовые телефоны”.Не все ли равно?

На последнем докладе в Мадриде Яндекс выделил всего 22 коммерческие тематики. Интересны по сути только они (вернее их определение).

ЗЫ Правда не совсем понятно. Они выделили 22 тематики для коммерческих запросов или они только для выборки взяли 22 тематики.

" А не спеть ли нам песню? О любвииии..."
shmelina
На сайте с 12.09.2005
Offline
168
#2

5000 тематик конечно многовато, по сравнению с 22:) Мне кажется вам надо подумать над упрощением алгоритма.

kotofeich
На сайте с 25.03.2009
Offline
28
#3
murvuz:
На последнем докладе в Мадриде Яндекс выделил всего 22 коммерческие тематики. Интересны по сути только они (вернее их определение).
ЗЫ Правда не совсем понятно. Они выделили 22 тематики для коммерческих запросов или они только для выборки взяли 22 тематики.

Что-то совсем неясно теперь. С точки зрения 22 тематик - думаю они есть в любой бирже ссылок.

Там как раз примерно столько. И что тогда в случае некоммерческого сайта?

kotofeich добавил 20.05.2009 в 19:34

shmelina:
5000 тематик конечно многовато, по сравнению с 22:) Мне кажется вам надо подумать над упрощением алгоритма.

Ашманов вообще выделил в качестве базовых 68 тематик. Остальные подтематики для более точного анализа.

murvuz
На сайте с 14.06.2007
Offline
191
#4
kotofeich:
Что-то совсем неясно теперь. С точки зрения 22 тематик - думаю они есть в любой бирже ссылок.
Там как раз примерно столько. И что тогда в случае некоммерческого сайта?

Почитайте перевод доклада. Тема тут.

Тематика для некоммерческих сайтов не так принципиальна, в виду опять же доклада.

Вопрос-то в практическом применении вашего алгоритма. Если Вы его сделали для "Чтобы был" это одно. Если для практического применения, то 5000 тематик не нужны.

unknown php developer
На сайте с 08.04.2009
Offline
9
#5

Неплохое решение. Но тут вы рассматриваете чистый текст. Если мы говорим о сайтах, то нужно учитывать также вес Title, Meta-description, Meta-keywords, H1, H2, H3 .. , <b>, <strong> ну и т.д. + я бы включил базу стоп-слов, а не просто отрезать слова меньше 3 символов.

[Удален]
#6
kotofeich:
7) Удаляем все слова повторяющиеся менее трех раз

очень слабое место, например в тексте всего один раз встречается слово "паллиатив" и вы его удалите? :)

kotofeich
На сайте с 25.03.2009
Offline
28
#7
murvuz:
Почитайте перевод доклада. Тема тут.
Тематика для некоммерческих сайтов не так принципиальна, в виду опять же доклада.
Вопрос-то в практическом применении вашего алгоритма. Если Вы его сделали для "Чтобы был" это одно. Если для практического применения, то 5000 тематик не нужны.

Я ознакомлюсь с текстом. Выскажу свое мнение чуть позже, как обдумаю текст. Разработка идет для продвижения сайтов нашей фирмы и клиентов, так что он делается не для того "чтобы был", а для того чтобы "не стрелять из пушки по воробьям".

kotofeich добавил 20.05.2009 в 20:00

unknown php developer:
Неплохое решение. Но тут вы рассматриваете чистый текст. Если мы говорим о сайтах, то нужно учитывать также вес Title, Meta-description, Meta-keywords, H1, H2, H3 .. , <b>, <strong> ну и т.д. + я бы включил базу стоп-слов, а не просто отрезать слова меньше 3 символов.

Возможно вы правы. Насчет meta-description и meta-keywords вопрос спорный, но для h1 и title коэффициенты надо точно увеличить. Спасибо.

M
На сайте с 30.08.2005
Offline
200
#8
burunduk:
очень слабое место, например в тексте всего один раз встречается слово "паллиатив" и вы его удалите? :)

burunduk, считаете, что "редкие" слова должны сильнее влиять на тематику?

Проверяем качество ссылок (http://mexboy.ru/?p=4160) через SeoHammer MEXBOY.RU (http://mexboy.ru) - экспертный блог о Seo
kotofeich
На сайте с 25.03.2009
Offline
28
#9
burunduk:
очень слабое место, например в тексте всего один раз встречается слово "паллиатив" и вы его удалите? :)

да. Возможно это лишь покупная ссылка, и одно слово врятли сильно повлияет на тематику. К тому же тематику сайта я предложил определять по n-страницам. Если незнакомое мне слово "паллиатив" есть на нескольких страницах, то оно явно встретится более трех раз, чтобы имело воздействие на тематику

ВЖ
На сайте с 20.11.2007
Offline
91

Изобретаете что-то типа этого? http://www.ashmanov.com/tech/semantic/demo/

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий