Sto cercando un algoritmo per ordinare i risultati dei siti Web in base alla popolarità .. come Reddit è così il post più vecchio meno potere ha voti/punteggio.Algoritmo di decadenza della popolarità per i popolari post del sito web
Ecco l'generalmente accettato soluzione ed usati per Reddit:
t = (time of entry post) - (Dec 8, 2005)
x = upvotes - downvotes
y = {1 if x > 0, 0 if x = 0, -1 if x < 0)
z = {1 if x < 1, otherwise x}
rank = log(z) + (y * t)/45000
Sono stato sopra l'algoritmo di Reddit e anche se si adatta per una situazione, che cosa ho veramente bisogno è di due algoritmi, uno per i messaggi popolari e un altro per i prossimi post:
- Post più popolari
- messaggi Prossimi
I più popolari decadono più lentamente, dando più peso ai post più vecchi in cui i post futuri si concentreranno maggiormente sui post più popolari oggi, lasciando cadere nettamente dopo N ore/giorni/ecc.
sto scrivendo questo usando le espressioni Sphinx quindi non posso scrivere un algo hugly complicato e ho solo l'accesso alle seguenti funzioni:
http://sphinxsearch.com/docs/current.html#numeric-functions
Così ho i seguenti dati per messaggio:
- età Share secondi
- Messaggio punteggio
Qui è la mia soluzione attuale:
Exponent = 0.01 (Popular), 0.5 (Upcoming)
SecondsSincePublised = abs(CurTimeInSecondsSinceDate-PubTimeInSecondsSinceDate)
Rank = (log10(PostScore)*10000)/pow(SecondsSincePublised,Exponent)
Anche se questa soluzione non funziona la sua non è l'ideale. Un post nuovo e popolare nelle ultime due ore è spesso al primo posto sia in pubblico che in quello imminente, il che non è proprio quello che voglio.
Qualcuno può suggerire un altro algoritmo che possa modificare un componente esponenziale per regolare il decadimento?
questo sembra interessante, ho intenzione di attuarla a livello locale e vedere che tipo di risultati che ottengo. – antfx