Как рассчитать балл для каждой записи на основе критерия и выбрать те, которые набрали наибольшее количество баллов? - PullRequest
0 голосов
/ 21 сентября 2018

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

Представьте себе следующую схему:

word

  • id
  • текст

пользователь

  • id
  • имя пользователя

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:

  • word1: 13%
  • word3: 2%

user2:

  • word1: 5%
  • word3: 9%

user1 намного больше похоже на нашего первоначального пользователя.Сходство можно рассчитать как сумму дельт:

  • user1: | 15% - 13% |+ | 1% - 2% |= 2 + 1 = 3
  • user2: | 15 - 9% | + | 1% - 9% |= 6 + 8 = 14

Разница с пользователем1 намного меньше.Таким образом, user1 намного больше похож на первоначального пользователя.

Сейчас.Представьте, что у меня есть тысячи пользователей в базе данных.Я хотел бы выбрать 5 пользователей (лимит), упорядочив их по баллам (где балл рассчитывается так, как я показал выше).

Проблема в том, что я понятия не имею, какие механизмы существуют в SQL для достиженияэто (СУБД не имеет значения).Не могли бы вы дать мне несколько советов, какой механизм я должен использовать, чтобы присвоить какой-то виртуальный «балл» каждому пользователю и выбрать его порядок?Мне просто нужно знать, в каком направлении мне идти, о чем мне читать.

1 Ответ

0 голосов
/ 21 сентября 2018

Первым делом можно было бы посчитать появление строки, верно?Что я хотел бы сделать, так это присоединиться к вашей таблице слов в таблице комментариев, затем вызвать скалярную функцию для подсчета слов в комментарии, а затем просто суммировать группу по идентификатору пользователя и слову ID

. См. Пример скалярной функции:

CREATE FUNCTION dbo.CountNoOfString
(
    @searchString nvarchar(max),
    @valueString nvarchar(max)
)
RETURNS INT
AS
BEGIN
    return (LEN(@searchString)-LEN(REPLACE(@searchString,@valueString ,'')))/LEN(@valueString)
END

Оттуда будет легко получить необходимые метрики

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...