Я бы решал ее наверно через сторону парсинга текста.
собираете весь текст и обрезая окончания подсчитываете какие слова встречаются больше всего на странице.
Отделяем все предлоги и слова, которые никак не относятся к какой либо из категорий и анализируем оставшуюся выдачу.
со временем можно научить систему по самым популярным словам определять тематику.
+ отдельно бы парсить и разбирать заголовки. в них тоже много инфы содержится.
title. keywords, description