Я хочу написать небольшой скрипт, который бы отбирал комментарии пользователей с небольшого форума и сохранял некоторые статистические данные в базе данных.В основном меня интересует, как часто пользователи используют разные слова в своих комментариях.
Представьте себе следующую схему:
word
пользователь
user_words
- word_id
- user_id
- count (сколько раз пользователь использовал слово во всех своих комментариях на форуме)
После этого я хотел бы создать запрос, который бы выбрал меня5 похожих пользователей из базы данных.Чтобы быть более конкретным:
Представьте, что у нас есть средняя частота использования следующих слов во всех комментариях форума:
- word1: 4%
- word2: 1%
- word3: 10%
- ...
Для конкретного пользователя частота этих слов:
- word1:15%
- word2: 2%
- word3: 1%
- ...
Программно я найду слова пользователя с самой большой разницейот средних значений.В моем случае это следующие слова:
- word1 (15% выше среднего 4%)
- word3 (1% выше среднего 10%)
сейчасЯ хочу найти пользователей с похожими частотами использования на word1 и word3.Например:
user1:
user2:
user1 намного больше похоже на нашего первоначального пользователя.Сходство можно рассчитать как сумму дельт:
- user1: | 15% - 13% |+ | 1% - 2% |= 2 + 1 = 3
- user2: | 15 - 9% | + | 1% - 9% |= 6 + 8 = 14
Разница с пользователем1 намного меньше.Таким образом, user1 намного больше похож на первоначального пользователя.
Сейчас.Представьте, что у меня есть тысячи пользователей в базе данных.Я хотел бы выбрать 5 пользователей (лимит), упорядочив их по баллам (где балл рассчитывается так, как я показал выше).
Проблема в том, что я понятия не имею, какие механизмы существуют в SQL для достиженияэто (СУБД не имеет значения).Не могли бы вы дать мне несколько советов, какой механизм я должен использовать, чтобы присвоить какой-то виртуальный «балл» каждому пользователю и выбрать его порядок?Мне просто нужно знать, в каком направлении мне идти, о чем мне читать.