В настоящее время у меня это работает: я передаю кучу данных в PHP, а затем выполняю все вычисления.Я хочу (и, скорее всего, нужно) выполнять все вычисления, используя только MySQL.Я знаю, что можно писать функции и процедуры в MySQL, но я никогда не делал этого раньше, и каждый раз, когда я сажусь, чтобы написать это, я запутываюсь в плачущем беспорядке самоуверенности.Итак ....
Объяснение базы данных: Давайте начнем с диаграммы базы данных: http://i.imgur.com/Th3NL.jpg
Вы можете немедленно игнорировать таблицу пользователей.Мы не будем беспокоиться об этом в этом вопросе.
Таким образом, эта база данных содержит информацию, взятую из веб-страниц.Вы можете видеть, что таблица ссылок содержит URL-адрес и заголовок, а также максимальную частоту для любого термина в этом документе.
Таблица объектов просто позволяет пользователям и ссылкам быть внешними первичными ключами втаблица событий.Кстати, я знаю о постоянном неправильном написании событий как случаев!=)
Таблица событий содержит большинство данных.Таблица имеет первичный внешний ключ linkoruser (хотя для этого просто игнорируйте пользователя).У него есть word_id, который ссылается на таблицу словаря, tag_id, который ссылается на таблицу тегов, и, наконец, показатель, который представляет собой число вхождений этого слова этого типа тега в этот документ.
Таблица тегов имеетидентификатор тега, имя тега (например, заголовок или H1) и его вес, который обычно устанавливается в диапазоне от 1 до 10.
В таблице словаря есть идентификатор слова, фактическое слово и обратный документЧастота этого слова.Если вас волнует, что такое IDF, то это количество веб-страниц, разделенное на количество веб-страниц, где-то содержится это конкретное слово.
Объяснение функции системы: с учетом идентификатора ссылки (мы назовем егоBaseID), все остальные ссылки сравниваются на предмет сходства (косинусное сходство), и идентификаторы, URL и заголовки всех ссылок показываются пользователю в порядке, указанном по порядку от большинства к наименее похожему.
Оценки для каждого слова: ((occurences.score * tags.weight) / links.max_tf) * dictionary.word_idf, т. е. количество вхождений слова в документе, умноженное на вес тега для тега этого конкретного слова, деленное на максимальную частоту термина для этого документа.Затем это значение умножается на частоту обратного документа слова, чтобы получить окончательную оценку для этого слова, в этом контексте.
Сходство осуществляется через косинусное сходство, лучше всего показано на изображении ниже.http://i.imgur.com/n3Bp8.jpg
Таким образом, каждая страница имеет сходство с BaseID, и система показывает пользователю все идентификаторы страниц, URL-адреса и заголовки, упорядоченные по сходству от большинства к наименее похожему.
Объяснение проблемы: В настоящее время огромные объемы данных вытаскиваются из MySQL и передаются в PHP, который затем выполняет всю обработку.
Это потому, что я знаю только мой базовый MySQL.Я знаю, что можно использовать функции и процедуры, но я сильно запутался.
Я хотел бы, чтобы я передал BaseID в MySQL, и он возвращает идентификаторы страниц, URL-адреса и заголовки,упорядочено по сходству от большинства к наименее похожему.
Я знаю, что это серьезный вопрос, и никто не платит за то, что он сидит здесь и ищет решения.Поэтому я очень ценю, что вы даже прочитали это далеко внизу!