Un Digg-like page d'accueil rotation de contenu populaire, comment inclure la date comme un facteur?

StackOverflow https://stackoverflow.com/questions/2715941

  •  01-10-2019
  •  | 
  •  

Question

Je construis une application Web de partage d'images avancée. Comme vous pouvez vous attendre, les utilisateurs peuvent télécharger des images et d'autres peuvent commentaires sur elle, voter, et le favori il. Ces événements détermineront la popularité de l'image, que je capture dans un champ « karma ».

Maintenant, je veux créer un Digg-like système page d'accueil, montrant les images les plus populaires. Il est facile, puisque je l'ai déjà le résultat pondéré Karma. Je viens de tri sur ce pour montrer les descendant 20 images les plus précieux.

La partie qui manque est Heure . Je ne veux pas des images extrêmement populaires à toujours être sur la page d'accueil. Je suppose une solution facile est de limiter le jeu de résultats au cours des dernières 24 heures. Cependant, je pense aussi que pour maintenir l'image de rotation se pendant toute la journée, le temps peut être une sorte de variable à laquelle son décalage a une influence sur l'image de tri de.

Questions spécifiques:

  • recommanderiez-vous le scénario facile (juste une sorte de meilleures images dans les 24 heures) ou plus sophistiqué (utiliser datetime décalage dans le cadre du tri)? Si vous conseiller ce dernier, toute l'aide sur la solution mathématique à cela?
  • Serait-il préférable d'exécuter un service régulier aux images de marque pour la page d'accueil, ou vous conseille une requête directe (j'utilise MySQL)
  • Comme une note supplémentaire, la page d'accueil devrait soutenir la pagination et un jour calme devrait inclure des entrées de jours avant afin de vous assurer qu'il est toujours « rempli »

Je ne demande pas la communauté de construire cet algorithme, recherche juste pour quelques conseils:)

Était-ce utile?

La solution

J'irais avec une fonction qui diminue le « karma efficace » de chaque élément après une certaine quantité de temps écoulé. Ceci est un peu comme la méthode d'Eric.

Déterminez à quelle fréquence vous voulez que le « karma efficace » être diminué. Puis multipliez le karma par un facteur de mise à l'échelle en fonction de cette période.

effective karma = karma * (1 - percentage_decrease)

percentage_decrease est déterminé par yourfunction. Par exemple, vous pouvez faire

percentage_decrease = min(1, number_of_hours_since_posting / 24)

pour le rendre ainsi le karma efficace de chaque élément diminue à 0 plus de 24 heures. Utilisez ensuite le karma efficace pour déterminer les images à afficher. Ceci est un peu plus d'une solution stable qu'une simple soustraction du temps écoulé depuis l'affichage, car il adapte le karma entre 0 et sa valeur réelle. Le min est de maintenir la mise à l'échelle à une borne inférieure 0, comme une fois par jour passe, vous allez commencer à obtenir des valeurs supérieures à 1.

Cependant, cela ne prend pas en compte la popularité de au sens strict. La réponse de Tim donne quelques idées sur la manière de prendre popularité stricte (à savoir des pages vues) compte.

Autres conseils

Pour votre première question, je voudrais aller avec la méthode un peu plus compliqué. Vous voulez quelques « Tous les temps favoris » dans le mix. Mais ne vont pas par le temps seul, passer le nombre de réels vues l'image a. Gardez à l'esprit que tout le monde va connexion et voter, mais cela ne rend pas l'image pas moins populaire. Une image qui est deux ans avec 10 votes et 100k points de vue est évidemment plus important pour les gens d'une image qui est 1 an avec 100 votes et 1k vues.

Pour votre deuxième question, oui, vous voulez une sorte de cache passe dans votre page d'accueil. Cela fait beaucoup de requêtes pour produire le point d'entrée dans votre site. Cependant, tout comme SO, votre type de site aura tendance à attirer du trafic vers les pages intérieures par le biais de moteurs de recherche .. donc essayer de montre / optimiser vos requêtes partout.

Pour votre troisième question, en passant par des facteurs autres que le temps (à savoir Nombre de vues) permet de vous assurer que vous avez toujours une pleine page et dynamique. Je ne suis pas sûr de paginer sur la première page, menant les gens à des balises ou des recherches qui pourraient être une meilleure stratégie.

Vous pouvez tout simplement calculer un champ de type « karma ajusté » qui prendrait le temps compte:

adjusted karma = karma - number of hours/days since posted

Vous pouvez ensuite calculer et trier que directement dans votre requête, ou vous pouvez faire un champ réel dans la base de données que vous mettez à jour via un processus de nuit ou quelque chose. Personnellement, j'aller avec un processus qui met à jour tous les soirs depuis que probablement plus facile de faire à l'avenir l'algorithme un peu plus sophistiqué.

, je l'ai trouvé, le Lower bound of Wilson score confidence interval for a Bernoulli parameter

Regardez ceci: http: // www. derivante.com/2009/09/01/php-content-rating-confidence/

Au second exemple, il explique comment utiliser le temps comme un « facteur fraîcheur ».

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top