Реализация Django-запроса алгоритма Wilson Score - PullRequest
0 голосов
/ 12 июля 2019

Я пытаюсь определить лучший способ реализации алгоритма Wilson Score в проекте Django.Проект представляет собой набор из типичных функций форума и страницы updotes / downvotes / трендов Reddit.Каждый форум имеет темы, и пользователи могут повышать / понижать оценку темы.

Должен ли я оценивать и сортировать свои темы в запросе к базе данных, и если да, то как мне это сделать с использованием моделей БД Django?

Мое текущее решение состоит в том, чтобы получить темы форума, а затем отсортировать по python.

wilson_score.py

from datetime import datetime
from math import log

epoch = datetime(1970, 1, 1)


def epoch_seconds(date):
    td = date.replace(tzinfo=None) - epoch
    return td.days * 86400 + td.seconds + (float(td.microseconds) / 1000000)


def score(ups, downs):
    return ups - downs


def hot(ups, downs, date):
    s = score(ups, downs)
    order = log(max(abs(s), 1), 10)
    sign = 1 if s > 0 else -1 if s < 0 else 0
    seconds = epoch_seconds(date) - 1134028003
    return round(sign * order + seconds / 45000, 7)

models.py

from . import wilson_score

class ForumThread(models.Model):
    category = models.ForeignKey(ForumCategory, on_delete=models.CASCADE)
    up_votes = models.IntegerField(default=0)
    down_votes = models.IntegerField(default=0)

    @staticmethod
    def get_trending_threads(category):
        return sorted(ForumThread.objects.filter(category=category), key=lambda x: wilson_score.hot(x.up_votes, x.down_votes, x.date_created), reverse=True)

просмотров.py

threads = ForumThread.get_trending_threads(category)[offset:offset + 20]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...