استعلام مستكشف البيانات لسرد المواضيع ذات أطول "وقت قراءة تقديري"؟

مرحباً بالجميع،

هل من الممكن إنشاء استعلام لاستكشاف البيانات يدرج “أفضل X” من المواضيع حسب “وقت القراءة المقدر”؟

أود معرفة المواضيع الأكثر استهلاكاً للوقت للقراءة على نظام Discourse الخاص بنا :smiley:

(وبخلاف الموضوع، تكملةً لـ هذا المنشور الذي نشره @simon، يبدو أنني لا أستطيع إضافة وسم data-explorer إلى هذا المنشور؟)

أعتقد أن النهج الذي اقترحته في ذلك الموضوع يحتاج إلى تحسين. إحدى مشكلاته هي أن المستخدمين من مستوى TL3 فما فوق فقط هم القادرون على وضع وسوم في المنشورات على Meta. وهذا يعني أن غالبية مستخدمي الموقع لن يتمكنوا من اتباع تعليماتي. والمشكلة الأخرى هي أننا سننتهي بوجود مواضيع ذات إجابات ومواضيع بدون إجابات تحمل وسم data-explorer. وهذا لن يساعد كثيرًا في البحث عن الاستعلامات.

عذراً على التأخر في الإجابة. لقد انشغلت بسؤال حول كيفية تنظيم استعلامات مستكشف البيانات على الموقع. يبدو أن استخدام وسم data-explorer هو الحل المثالي، لكن المواضيع التي تحتوي على استعلام مستكشف البيانات ستحتاج إلى أن يوسمها مستخدم ذو حالة TL3.

أعتقد أن استعلامًا مثل التالي سيعطيك المعلومات التي تبحث عنها:

SELECT
topic_id,
category_id,
SUM(total_msecs_viewed) / 60000  AS estimated_minutes_read
FROM topic_users tu
JOIN topics t ON t.id = tu.topic_id
WHERE t.deleted_at IS NULL
AND t.archetype = 'regular'
GROUP BY tu.topic_id, category_id
ORDER BY estimated_minutes_read DESC
LIMIT 100

يمكن تعديل عبارة LIMIT 100 في السطر الأخير من الاستعلام أو إزالتها إذا كنت تريد إرجاع نتائج أكثر.

من المثير للاهتمام أن الموضوع الذي يتمتع بأعلى وقت قراءة مسجّل على الإطلاق في موقع Meta هو Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso). ويبلغ الوقت الحالي 126048 دقيقة.

مرحبًا @simon

هل هذه الصيغة صحيحة؟

إذا اخترت أربعة أو خمسة عشوائيًا وقارنت نتيجة عمود وقت القراءة المقدر في هذا الاستعلام بوقت القراءة المقدر في الموضوع نفسه، أحصل على رقمين مختلفين جدًا؟ :thinking:

يبدو أن هذا الاستعلام يعرض المواضيع التي تم قراءتها لأطول فترة زمنية، وليس المواضيع التي تستغرق وقتًا أطول للقراءة؟

آه، قد يفسّر ذلك المشكلة.

هل أظن أن العمود total_msecs_viewed هو العمود الخاطئ للاستخدام هنا؟

يمكنك استخدام متوسط الوقت الذي يستغرقه المستخدمون لقراءة الموضوع.
في هذه الحالة، يمكنك ببساطة تغيير دالة SUM إلى AVG، وسيظهر الأمر على النحو التالي:

SELECT
    topic_id,
    category_id,
    AVG(total_msecs_viewed) / 60000  AS estimated_minutes_read
FROM topic_users tu
JOIN topics t ON t.id = tu.topic_id
WHERE t.deleted_at IS NULL
AND t.archetype = 'regular'
GROUP BY tu.topic_id, category_id
ORDER BY estimated_minutes_read DESC
LIMIT 100

شكرًا على الاقتراح @michebs، لكنني أخشى أن هذا أيضًا بعيد كل البعد عن الصواب.

إليك بعض الأمثلة:

ما تقوله الاستعلام ما يقوله الموضوع
438 61
353 58
335 40
196 24

لكن هذا يعني أن الشخص يستغرق في المتوسط 438 دقيقة لقراءة الموضوع الرئيسي؟ يبدو هذا غير مرجح. قد يبدو هذا غريبًا، لكن هل كان لديك عدد كافٍ من الأصفار في الرقم 60,000؟

تعديل: أو ربما يشمل المتوسط جميع مرات إعادة قراءة الموضوع أيضًا؟ إذن القراءة مرة واحدة تستغرق 61 دقيقة، لكن المستخدمين يقضون في الواقع في المتوسط 438 دقيقة هناك.

ومع ذلك، فأنا مهتم الآن بمعرفة كيفية حساب “وقت القراءة المقدّر” للملخص، لأنه من المثالي أن تتطابق هذه الأرقام. حتى لو قللنا تلك الأرقام بعامل عشرة، فلن نقربها إلا تقريبًا تقريبيًا. :thinking:

نعم، تمامًا :blush:

لقد قمت ببحث بسيط، ووجدت هذا الرابط: "There are 84 replies with an estimated read time of 0 minutes." - #9 by nbianca.

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

كان هناك أيضًا هذا الرابط الذي أعطى تلميحًا حول ما قد يُسمى القيمة النهائية: (رغم أنه قديم، لذا ربما تغير؟)

ربما لا يكون هذا مفيدًا بشكل كبير، لكنني اعتقدت أنني سأشاركه في حالة فائدته. :slightly_smiling_face:

آمل أن تحصل على الإجابات التي تبحث عنها. :crossed_fingers:

لقد ألقيت نظرة أخرى على هذا، ويبدو (في أبسط صوره) أنه عدد كلمات الموضوع مضروبًا في إعداد المسؤول “عدد كلمات وقت القراءة” (الافتراضي 500 كلمة/دقيقة). لذلك أعتقد أن هذا الاستعلام سينتج “أطول المواضيع للقراءة” X الأفضل:

-- [params]
-- integer :limit = 10

SELECT t.id as topic_id, (t.word_count)/500+1 AS estimated_read_time
FROM topics t
WHERE t.word_count IS NOT NULL
AND t.archetype = 'regular'
ORDER BY t.word_count DESC 
LIMIT :limit

على الرغم من وجود بديل “4 ثوانٍ كحد أدنى” أيضًا: (عدد المشاركات × 4) / 60. وهو موجود لحساب مواضيع الصور التي لا تحتوي على عدد كلمات. لذا فهو يعمل بكلتا الطريقتين، ويعرض أيهما أكبر. لكنني لم أكتشف بعد كيفية إضافة ذلك. :slightly_smiling_face:

للأسف، ليس لدي موقع كبير بما يكفي لاختباره بشكل صحيح. بدا أنه يعمل على عينة اختبار صغيرة، ولكنه قد يحتاج إلى تعديل. :slightly_smiling_face:

تعديل: أضفت معلمة “limit” لجعله أقرب إلى مواصفات OP. :+1:

يا إلهي، أعتقد أنه فهمها!
@JammyDodger لقد قمت بتشغيل استعلامك، إليك بعض لقطات الشاشة كمرجع.

أولاً، “أفضل 10”:

وبالفعل:

:scream: :clap:t2:

هناك بعض الأرقام التي لا تتطابق تمامًا، لكنها قريبة جدًا!

يبدو أنني بالتأكيد بحاجة إلى معرفة كيفية إضافة صورة واحدة. :slightly_smiling_face: لم أستسلم بعد. :crossed_fingers:

لقد حاولت مرة أخرى. :slightly_smiling_face: لست متأكدًا بنسبة 100% من هذا، حيث ليس لدي عينة كبيرة بما يكفي لاختبارها، لكنها التقطت مواضيع الاختبار الخاصة بي. :+1:

-- [params]
-- integer :limit = 10

WITH read_time AS (
SELECT t.id as topic_id,
(t.word_count)/500+1 as word_count_time,
(t.posts_count*4)/60+1 as post_count_time
FROM topics t
WHERE t.word_count IS NOT NULL
AND t.archetype = 'regular'
AND t.deleted_at IS NULL
)

SELECT topic_id, CONCAT (CASE WHEN word_count_time > post_count_time THEN word_count_time ELSE post_count_time END, ' min') AS estimated_reading_time
FROM read_time
ORDER BY estimated_reading_time DESC
LIMIT :limit