Un Digg-like home page di contenuti popolari di rotazione, come includere data come un fattore?

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

  •  01-10-2019
  •  | 
  •  

Domanda

Sto costruendo un'applicazione avanzata web di condivisione di immagini. Come ci si potrebbe aspettare, gli utenti possono caricare le immagini e gli altri possono commenti su di esso, voto su di essa, e favorito di esso. Questi eventi determineranno la popolarità dell'immagine, che cattura in un campo di "karma".

Ora voglio creare un Digg-like sistema di home page, che mostra le immagini più popolari. E 'facile, dal momento che ho già il punteggio Karma ponderata. Ho appena sorta in quel modo discendente di mostrare le 20 immagini più apprezzate.

La parte che manca è tempo . Non voglio immagini estremamente popolari per essere sempre sulla homepage. Credo che una soluzione facile è quello di limitare il set di risultati per le ultime 24 ore. Tuttavia, sto anche pensando che, al fine di mantenere l'immagine di rotazione si verificano nel corso della giornata, il tempo può essere una sorta di variabile in cui compensare la sua influisce sull'immagine di ordinamento.

Domande specifiche:

  • mi consiglia lo scenario facile (appena sorta per i migliori immagini entro 24 ore) o il più sofisticato (usare datetime compensati nell'ambito della selezione)? Se consigliate quest'ultimo, qualsiasi aiuto alla soluzione matematica a questo?
  • sarebbe meglio per eseguire un servizio di linea per le immagini marchio per la home page, oppure potrebbe consigliarvi un'interrogazione diretta (sto usando MySQL)
  • Come nota in più, la home page dovrebbe sostenere il paging e su una tranquilla giornata dovrebbe includere voci di giorni prima, al fine di assicurarsi che sia sempre "riempito"

Non sto chiedendo la comunità per costruire questo algoritmo, solo in cerca di qualche consiglio:)

È stato utile?

Soluzione

vorrei andare con una funzione che riduce il "karma efficace" di ogni elemento, dopo un certo periodo di tempo è trascorso. Questo è un po 'come il metodo di Eric.

Determinare la frequenza con cui il "karma efficace" deve essere diminuito. Quindi moltiplicare il karma da un fattore di scala in base a questo periodo.

effective karma = karma * (1 - percentage_decrease)

dove percentage_decrease è determinato da yourFunction. Per esempio, si potrebbe fare

percentage_decrease = min(1, number_of_hours_since_posting / 24)

per fare in modo efficace il karma di ogni elemento si riduce a 0 oltre 24 ore. Quindi utilizzare il karma efficace per determinare quali immagini da visualizzare. Questo è un po 'più di una soluzione stabile che solo sottraendo il tempo dal distacco, come si scala il karma fra 0 e il suo valore effettivo. Il minimo è quello di mantenere la scala a 0 limite inferiore, come una volta al giorno passa, potrai iniziare a ricevere valori superiori a 1.

Tuttavia, questo non prende in considerazione popolarità in senso stretto. La risposta di Tim dà alcune idee in come prendere popolarità stretto (cioè di pagine viste) in considerazione.

Altri suggerimenti

Per la vostra prima domanda, vorrei andare con il metodo un po 'più complicato. Si vuole alcuni "preferiti tutti i tempi", nel mix. Ma non andare da tempo da solo, andare per il numero di effettivi viste l'immagine ha. Tenete a mente che non tutti sta per login e votare, ma ciò non rende l'immagine meno popolare. Un'immagine che è di due anni, con 10 voti e 100K vista è ovviamente più importante per le persone che un'immagine che è 1 anno di età con 100 voti e 1k vista.

Per la seconda domanda, sì, si vuole una sorta di cache succedendo nella vostra pagina. Questo è un sacco di domande per produrre il punto di ingresso nel tuo sito. Tuttavia, proprio come SO, il tipo di sito tenderà a disegnare il traffico a pagine interne attraverso i motori di ricerca .. quindi cercare di orologio / ottimizzare le query ovunque.

Per la terza domanda, che va da fattori diversi dal tempo (cioè # di punti di vista) consente di assicurarsi di avere sempre una pagina piena e dinamica. Io non sono sicuro di impaginazione in prima pagina, che porta le persone a tag o ricerche potrebbe essere una strategia migliore.

Si può solo calcolare un "karma rettificato" campo di tipo che avrebbe preso il tempo in considerazione:

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

È quindi possibile calcolare e ordina per che direttamente nella query, oppure si potrebbe rendere un campo effettivo nel database che si aggiorna attraverso un processo di notte o qualcosa del genere. Personalmente vorrei andare con un processo notturno che gli aggiornamenti da quando che probabilmente renderà più facile per rendere l'algoritmo un po 'più sofisticato in futuro.

Questo, l'ho trovato, l'Lower bound of Wilson score confidence interval for a Bernoulli parameter

Guardate questa: http: // www. derivante.com/2009/09/01/php-content-rating-confidence/

Al secondo esempio, spiega come usare il tempo come un "fattore di freschezza".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top