Frage

Wie ähnlich eine Website mit einem Empfehlungssystem implementieren / digg / reddit zu Stackoverflow? Das heißt, geben die Benutzer Inhalte und die Website muss eine Art „Hotness“ berechnen nach wie beliebt der Artikel ist. Der Fluss ist wie folgt:

  • Benutzer einreichen Inhalt
  • Andere Benutzer sehen und Abstimmung über den Inhalt (90% der Nutzer davon ausgehen, nur sieht, und von 10% aktiv Stimmen nach oben oder unten auf Inhalt)
  • Neue Inhalte kontinuierlich eingereicht

Wie implementiere ich einen Algorithmus, der die „Hotness“ einen eingereichten Artikel berechnet, vorzugsweise in Echtzeit? Gibt es Best-Practices oder Design Patterns?

Ich würde davon ausgehen, dass der Algorithmus die folgenden berücksichtigt:

  • Wenn ein Element wurde vorgelegt
  • Wenn jede Stimme wurde gegossen
  • Wenn der Artikel wurde angesehen

z. ein Element, das eine konstante Erhaltungs der Stimmen bekommt bleiben würde etwas „heiß“ ständig, während ein Element, das ein Platzen der Stimmen erhält, wenn er zuerst von der „Hotness“ -Liste nach oben springt vorgelegt wird, aber dann umfallen wie die Stimmen stoppen kommen in.

(Ich verwende eine MySQL + PHP, aber ich bin an allgemeine Entwurfsmuster).

War es hilfreich?

Lösung

Sie könnten etwas Ähnliches wie die Reddit Algorithmus verwenden - das Grundprinzip von denen Sie berechnen einen Wert für einen Beitrag auf der Grundlage der Zeit es geschrieben wurde und der Partitur. Was ist mit dem Reddit Algorithmus ordentlich ist, dass Sie nur den Wert müssen neu berechnet, wenn die Partitur eines Post ändert. Wenn Sie Ihre Titelseite angezeigt werden soll, Sie bekommen nur die Top-n-Beiträge aus Ihrer Datenbank auf dieser Kerbe basiert. Im Laufe der Zeit wird natürlich erhöhen auf den Noten geht, so dass Sie Elemente aus der Titelseite keine spezielle Verarbeitung zu tun haben, zu entfernen.

Andere Tipps

Auf meiner eigenen Website, ordne ich jeden Eintrag eine eindeutige ganze Zahl von einer monoton steigenden Serie (neuere Beiträge bekommen höhere Zahlen). Jede abstimmen erhöht sich die Zahl nach dem anderen, und jeder nach unten Abstimmung nimmt es von einem (Sie können diese Werte zwicken, natürlich). Dann einfach sortiert nach der Zahl angezeigt, die ‚heißesten‘ Einträge.

ich eine Social-Bookmarking-Website entwickelt, Seiten Favoritos und verwendet eine komplexe algoritm:

  1. Erstens sind die Stimmen endlich, ein Benutzer nur eine begrenzte Anzahl von Stimmen, und die Anzahl der Stimmen abhängig von den Benutzern Punkten. Um Punkte sammeln, muss jeder Benutzer Links hinzufügen, die positive Bewertungen erhalten.
  2. Dann können Nutzer stimmen -3, -2, -1,1,2 oder 3 Stimmen für jeden Link. Da die Stimmen begrenzt sind, stimmen jeder Benutzer nur auf diese Links, die sie mögen.
  3. Benutzer Um zu verhindern, nur auf den Links für den gleichen Benutzer zu stimmen, Selbsthilfegruppen zu schaffen, wird die Punkte jede Abstimmung auf den Link fügt hängt von einer RACIO zwischen Gesamtstimmen und Stimmen Links des Eigentümers des gestimmt Link. Wenn Sie immer auf dem gleichen Nutzer Links stimmen, werden Ihre Stimmen Wert verlieren.
  4. Abstimmungen Wert verlieren mit der Zeit.
  5. Neue Verbindungen von Benutzern, die keine Punkte (neuen Benutzer) werden einen Start 0 Punkte haben. Neue Verbindungen von älteren Benutzern Punkte haben ihre Punkte je nach. Angefangen von +3 bis -Unendlich. Links von den Benutzern mit negativen Punkten negative Ausgangspunkte haben, Links von den Benutzern mit positiven Punkten werden positive Ansatzpunkte haben.

Die Nutzer werden zufällige Punkte erhalten, wenn ihre Verbindungen gewählt werden. Positive Stimmen geben positive Punkte, negative Stimmen für negative Punkte.

Paul Graham schrieb einen Aufsatz über, was er gelernt in entwickeln Hacker News . Der Schwerpunkt liegt dabei mehr auf den Menschen / Interaktionen er versucht, als zu gewinnen / erstellen, die auf dem Algorithmus per se, aber immer noch gut lesenswert. Zum Beispiel beschreibt er die verschiedene Ergebnisse, wenn Geschichten Blase von unten nach oben (HN) gegen die nach oben (Digg) der Titelseite explodiert. (Obwohl von dem, was ich gesehen von HN habe, sieht es aus wie Geschichten nach oben explodieren dort auch).

Er bietet dieses Zitat:

  

Der Schlüssel zur Leistung ist Eleganz, nicht Bataillone von Sonderfällen.

die im Lichte des vorgeblichen Algorithmus zum Erzeugen der HN Titelseite:

  

(p - 1) / (t + 2) ^ 1.5

     

Dabei steht

     

p = ein Artikels Punkte und

     

t Zeit von der Einreichung des Artikels =

könnte ein guter Ausgangspunkt sein.

Ich implementierte eine SQL-Version von Reddit-Ranking-Algorithmus für ein Video-Aggregator wie folgt:

SELECT id, title
FROM videos
ORDER BY 
    LOG10(ABS(cached_votes_total) + 1) * SIGN(cached_votes_total)   
    + (UNIX_TIMESTAMP(created_at) / 300000) DESC
LIMIT 50

* cached_votes_total * wird durch einen Auslöser aktualisiert, sobald eine neue Stimme abgegeben ist. Es läuft schnell genug auf unserem derzeitigen Standort, aber ich bin die Planung auf eine Rangwertspalte hinzufügen und es mit dem gleichen Auslöser wie die * cached_votes_total * Spalte zu aktualisieren. Nach dieser Optimierung, sollte es schnell genug für die meist jede Größe Ort sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top