Requête Data Explorer pour lister les sujets avec le temps de lecture "estimé" le plus long ?

Bonjour à tous,

Est-il possible de créer une requête dans l’explorateur de données qui liste les « top X » sujets par « temps de lecture estimé » ?

J’aimerais savoir quels sujets sur notre Discourse sont les plus longs à lire :smiley:

(Hors sujet, suite à ce post de @simon, je n’arrive pas à ajouter le tag data-explorer à ce post ?)

Je pense que l’approche que j’ai suggérée dans ce sujet doit être améliorée. L’un des problèmes est que seuls les utilisateurs de niveau TL3 et supérieur peuvent étiqueter des messages sur Meta. Cela signifie que la majorité des utilisateurs du site ne pourraient pas suivre mes instructions. L’autre problème est que nous nous retrouverons avec des sujets sans réponse et des sujets résolus portant tous deux l’étiquette data-explorer. Cela n’aidera pas beaucoup à rechercher des requêtes.

Désolé pour la réponse tardive. J’ai été retenu par la question de savoir comment organiser les requêtes de l’Explorateur de données sur le site. L’utilisation du tag data-explorer semble être la solution idéale, mais les sujets contenant une requête de l’Explorateur de données devront être tagués par un utilisateur disposant du statut TL3.

Je pense qu’une requête comme celle ci-dessous vous donnera les informations que vous recherchez :

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

L’instruction LIMIT 100 dans la dernière ligne de la requête peut être ajustée ou supprimée si vous souhaitez obtenir plus de résultats.

Curieusement, le sujet avec de loin le temps de lecture le plus élevé enregistré sur Meta est Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso). Il s’élève actuellement à 126 048 minutes.

Bonjour @simon

Cette formule est-elle correcte ?

Si je sélectionne quatre ou cinq articles au hasard et que je compare le résultat de la colonne « temps de lecture estimé » dans cette requête avec le temps de lecture estimé dans le sujet lui-même, j’obtiens deux chiffres très différents ? :thinking:

Il semble que cette requête vous donne les sujets qui ont été lus le plus longtemps, plutôt que les sujets qui prennent le plus de temps à lire ?

Ah, cela pourrait expliquer le problème.

Je suppose que total_msecs_viewed n’est pas la bonne colonne à utiliser ici ?

Vous pouvez utiliser le temps moyen que les utilisateurs consacrent à la lecture d’un sujet.
Dans ce cas, il vous suffit de remplacer la fonction SUM par AVG. Voici à quoi cela ressemblerait :

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

Merci pour la suggestion @michebs, mais je crains que celle-ci soit également très éloignée de la réalité.

Quelques exemples :

Ce que dit la requête Ce que dit le sujet
438 61
353 58
335 40
196 24

Mais cela signifierait qu’en moyenne, une personne met 438 minutes pour lire ce sujet principal ? Cela semble peu probable. Cela peut paraître bête, mais est-ce que vous aviez assez de zéros dans 60 000 ?

Édition : Ou peut-être que la moyenne inclut aussi toutes les relectures d’un sujet ? Ainsi, une lecture complète prendrait 61 minutes, mais en réalité, les utilisateurs passent en moyenne 438 minutes à l’intérieur.

Bien que maintenant je sois assez curieux de savoir comment le temps de lecture estimé est calculé pour le résumé, car idéalement, vous voudriez qu’ils correspondent. Même en les réduisant d’un facteur dix, cela ne ferait qu’une estimation approximative. :thinking:

Oui, exactement :blush:

J’ai fait une petite recherche et j’ai trouvé ceci : "There are 84 replies with an estimated read time of 0 minutes." - #9 by nbianca.

J’ai du mal à déchiffrer ce genre de choses, mais il semble que cela utilise un calcul basé sur le nombre de mots multiplié par le temps (plus un temps minimum pour couvrir les messages sans texte, comme les images).

Il y avait aussi celui-ci qui donnait un indice sur le nom possible de la valeur finale : (bien qu’il soit ancien, cela a peut-être changé ?)

Ce n’est pas très utile, je suis sûr, mais je pensais partager au cas où. :slightly_smiling_face:

J’espère que vous trouverez les réponses que vous cherchez. :crossed_fingers:

J’ai re-examiné cela, et il semble (dans sa forme la plus simple) être topic.word_count multiplié par le paramètre d’administration « temps de lecture par mot » (par défaut 500 mots/min). Je pense donc que cette requête produirait les X « sujets les plus longs à lire » :

-- [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

Bien qu’il y ait aussi l’alternative « minimum de 4 secondes » : (nombre de posts x 4)/60. Ceci est là pour tenir compte des sujets photo sans nombre de mots. Donc, cela fonctionne pour les deux, et affiche le plus grand des deux. Mais je n’ai pas encore tout à fait compris comment ajouter cela. :slightly_smiling_face:

Malheureusement, je n’ai pas un site assez grand pour le tester correctement. Cela semblait fonctionner sur un petit échantillon de test, mais cela pourrait nécessiter des ajustements. :slightly_smiling_face:

Edit : J’ai ajouté un paramètre « limit » pour le rapprocher de la spécification de l’OP. :+1:

Parbleu, je crois qu’il a compris !

@JammyDodger J’ai exécuté votre requête, voici quelques captures d’écran pour référence.

D’abord, le « top 10 » :

Et effectivement :

:scream: :clap:t2:

Il y a quelques chiffres qui ne correspondent pas tout à fait, mais c’est vraiment proche !

Il semble que je doive absolument trouver comment ajouter la photo. :slightly_smiling_face: Je n’ai pas encore abandonné. :crossed_fingers:

J’ai fait une autre tentative. :slightly_smiling_face: Je ne suis pas sûr à 100% pour celle-ci, car je n’ai pas assez d’échantillons pour la tester, mais elle a trouvé mes sujets de test. :+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