صفحة منزلية تشبه DIGG للمحتوى الشهير ، كيف تتضمن تاريخًا كعامل؟

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

  •  01-10-2019
  •  | 
  •  

سؤال

أقوم بإنشاء تطبيق متطور لمشاركة الصور. كما قد تتوقع ، يمكن للمستخدمين تحميل الصور ويمكن للآخرين التعليقات عليها والتصويت عليها والمفضل. ستحدد هذه الأحداث شعبية الصورة ، التي ألتقطها في حقل "الكرمة".

الآن أريد إنشاء نظام الصفحة الرئيسية يشبه Digg ، ويظهر الصور الأكثر شعبية. إنه أمر سهل ، حيث أن لدي بالفعل درجة الكرمة المرجحة. أنا فقط فرز على ذلك بشكل متزايد لإظهار 20 صورة ذات قيمة.

الجزء المفقود زمن. لا أريد أن تكون الصور الشائعة للغاية دائمًا على الصفحة الرئيسية. أعتقد أن الحل السهل هو تقييد النتيجة التي تم تعيينها على الـ 24 ساعة الماضية. ومع ذلك ، أعتقد أيضًا أنه من أجل الحفاظ على دوران الصورة يحدث طوال اليوم ، يمكن أن يكون الوقت نوعًا من المتغير حيث يكون له تأثير على فرز الصورة.

أسئلة محددة:

  • هل تنصح بالسيناريو السهل (فقط فرز لأفضل الصور في غضون 24 ساعة) أو أكثر تطوراً (استخدم إزاحة DateTime كجزء من الفرز)؟ إذا كنت تنصح هذا الأخير ، أي مساعدة في الحل الرياضي لهذا؟
  • هل سيكون من الأفضل تشغيل خدمة مجدولة لتمييز الصور للصفحة الرئيسية ، أو هل تنصح بإجراء استعلام مباشر (أنا أستخدم MySQL)
  • كملاحظة إضافية ، يجب أن تدعم الصفحة الرئيسية الترحيل ، ويجب أن تتضمن يوم هادئ إدخالات الأيام قبل أن تتأكد من أنها "ممتلئة" دائمًا

أنا لا أطلب من المجتمع بناء هذه الخوارزمية ، فقط أبحث عن بعض النصائح :)

هل كانت مفيدة؟

المحلول

أود أن أذهب مع وظيفة تقلل من "الكرمة الفعالة" لكل عنصر بعد كمية معينة من الوقت. هذا يشبه إلى حد ما طريقة إريك.

حدد عدد المرات التي تريد فيها انخفاض "الكرمة الفعالة". ثم اضرب الكرمة بعامل التحجيم بناءً على هذه الفترة.

effective karma = karma * (1 - percentage_decrease)

أين percentage_decrease يتم تحديده من قبل وظيفتك. على سبيل المثال ، يمكنك القيام به

percentage_decrease = min(1, number_of_hours_since_posting / 24)

لجعله حتى يتناقص الكرمة الفعالة لكل عنصر إلى 0 على مدار 24 ساعة. ثم استخدم الكرمة الفعالة لتحديد الصور التي يجب إظهارها. هذا هو حل مستقر أكثر قليلاً من مجرد طرح الوقت منذ نشره ، لأنه يقيس الكرمة بين 0 وقيمته الفعلية. MIN هو الحفاظ على التحجيم عند الحد الأدنى 0 ، كما يمر مرة واحدة يوميًا ، ستبدأ في الحصول على قيم أكبر من 1.

ومع ذلك ، فإن هذا لا يأخذ في الاعتبار الشعبية بالمعنى الصارم. تعطي إجابة تيم بعض الأفكار حول كيفية أخذ شعبية صارمة (أي طرق عرض الصفحة) في الاعتبار.

نصائح أخرى

لسؤالك الأول ، سأذهب مع الطريقة الأكثر تعقيدًا قليلاً. ستحتاج إلى بعض "المفضلة طوال الوقت" في هذا المزيج. لكن لا تذهب بالوقت بمفردك ، اذهب بعدد الفعلي الآراء الصورة لها. ضع في اعتبارك أنه لن يقوم الجميع بتسجيل الدخول والتصويت ، لكن هذا لا يجعل الصورة أقل شعبية. من الواضح أن الصورة التي يبلغ عمرها عامين مع 10 أصوات و 100 ألف مشاهدة أكثر أهمية للناس أكثر من الصورة التي يبلغ عمرها عام واحد مع 100 صوت و 1 كيلو آلاف.

لسؤالك الثاني ، نعم ، أنت تريد نوعًا من التخزين المؤقت في صفحتك الأولى. هذا الكثير من الاستفسارات لإنتاج نقطة الدخول إلى موقعك. ومع ذلك ، مثل ذلك ، يميل نوع الموقع الخاص بك إلى سحب حركة المرور إلى الصفحات الداخلية من خلال محركات البحث .. لذا حاول مشاهدة / تحسين استفساراتك في كل مكان.

بالنسبة لسؤالك الثالث ، فإن الذهاب إلى عوامل أخرى غير الوقت (أي # من المشاهدات) يساعد على التأكد من أن لديك دائمًا صفحة كاملة وديناميكية. لست متأكدًا من التراجع على الصفحة الأولى ، فقد يكون دفع الأشخاص إلى العلامات أو عمليات البحث استراتيجية أفضل.

يمكنك فقط حساب حقل نوع "الكرمة المعدلة" الذي سيستغرق وقتًا في الاعتبار:

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

يمكنك بعد ذلك حساب وفرز ذلك مباشرة في استعلامك ، أو يمكنك جعله حقلًا فعليًا في قاعدة البيانات التي تقوم بتحديثها عبر عملية ليلية أو شيء ما. أنا شخصياً سأذهب مع عملية ليلية تقوم بتحديثها لأن ذلك سيسهل على الأرجح جعل الخوارزمية أكثر تطوراً في المستقبل.

هذا ، لقد وجدت ذلك ، Lower bound of Wilson score confidence interval for a Bernoulli parameter

انظر إلى هذا: http://www.derivante.com/2009/09/01/php-content-rating-confidence/

في المثال الثاني ، يشرح كيفية استخدام الوقت كعامل نضارة ".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top