Query di Data Explorer per elencare gli argomenti con il "tempo di lettura stimato" più lungo?

Ciao a tutti,

È possibile creare una query per l’esploratore di dati che elenchi gli “X argomenti principali” in base al “tempo di lettura stimato”?

Mi piacerebbe sapere quali argomenti sul nostro Discourse richiedono più tempo per essere letti :smiley:

(E a margine, facendo seguito a questo post di @simon, non riesco ad aggiungere il tag data-explorer a questo post?)

Penso che l’approccio che ho suggerito in quell’argomento debba essere migliorato. Un problema è che solo gli utenti con livello TL3 e superiori possono aggiungere tag ai post su Meta. Ciò significa che la maggior parte degli utenti del sito non sarebbe in grado di seguire le mie istruzioni. L’altro problema è che finiremmo per avere sia argomenti senza risposta sia argomenti risolti con il tag data-explorer. Questo non aiuterebbe molto nella ricerca delle query.

Scusa per il ritardo nella risposta. Mi sono lasciato coinvolgere dalla questione su come organizzare le query dell’Esploratore di dati sul sito. Utilizzare il tag data-explorer sembra la soluzione ideale, ma gli argomenti che contengono una query dell’Esploratore di dati dovranno essere contrassegnati da un utente con stato TL3.

Penso che una query simile alla seguente ti fornisca le informazioni che stai cercando:

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’istruzione LIMIT 100 nell’ultima riga della query potrebbe essere modificata o rimossa se desideri ottenere più risultati.

È interessante notare che l’argomento con di gran lunga il tempo di lettura registrato più alto su Meta è Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso). Attualmente si attesta a 126048 minuti.

Ciao @simon

La formula è corretta?

Se scelgo quattro o cinque articoli a caso e confronto il risultato della colonna “tempo di lettura stimato” in questa query con il tempo di lettura stimato presente nel topic stesso, ottengo due numeri molto diversi? :thinking:

Sembra che quella query restituisca gli argomenti che sono stati letti per più tempo, piuttosto che quelli che richiedono più tempo per essere letti?

Ah, questo potrebbe spiegare il problema.

Immagino che total_msecs_viewed non sia la colonna giusta da usare qui?

Puoi utilizzare il tempo medio impiegato dagli utenti per leggere l’argomento.
In tal caso, puoi semplicemente modificare la funzione SUM in AVG, che apparirebbe così:

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

Grazie per il suggerimento @michebs, ma temo che anche questo sia molto lontano dal bersaglio.

Alcuni esempi:

Cosa dice la query Cosa dice l’argomento
438 61
353 58
335 40
196 24

Ma questo significherebbe che, in media, una persona impiega 438 minuti per leggere quell’argomento principale? Sembra improbabile. Può sembrare sciocco, ma hai messo abbastanza zeri in 60.000?

Modifica: O forse la media include anche le riletture di un argomento? Quindi una lettura completa sarebbe di 61 minuti, ma in realtà gli utenti trascorrono in media 438 minuti lì dentro.

Ora però sono molto curioso di sapere come viene calcolato il Tempo di Lettura Stimato per il Riepilogo, dato che idealmente vorresti che corrispondessero. Anche riducendoli di un fattore dieci, si arriverebbe solo a una stima approssimativa. :thinking:

Sì, esattamente :blush:

Ho fatto una piccola ricerca e ho trovato questo: "There are 84 replies with an estimated read time of 0 minutes." - #9 by nbianca.

Fatico a decifrare queste cose, ma sembra che utilizzi un calcolo basato sul numero di parole moltiplicato per il tempo (più un tempo minimo per coprire i post senza parole, come le immagini).

C’era anche questo, che dava un indizio su come potrebbe essere chiamato il valore finale: (anche se è vecchio, quindi potrebbe essere cambiato?)

Non è di grande aiuto, ne sono sicuro, ma ho pensato di condividerlo per ogni evenienza. :slightly_smiling_face:

Spero tu ottenga le risposte che cerchi. :crossed_fingers:

Ho dato un’altra occhiata a questo, e sembra (nella sua forma più semplice) essere topic.word_count moltiplicato per l’impostazione dell’amministratore ‘read time word count’ (predefinito 500 parole/min). Quindi penso che questa query produrrebbe gli “X argomenti più lunghi da leggere”:

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

Anche se c’è anche l’alternativa ‘4 secondi minimo’: (numero di post x 4)/60. Che serve a tenere conto degli argomenti fotografici senza conteggio di parole. Quindi funziona entrambi, e visualizza qualunque sia il maggiore. Ma non ho ancora capito bene come aggiungerlo. :slightly_smiling_face:

Sfortunatamente, non ho un sito abbastanza grande per testarlo adeguatamente. Sembrava funzionare su un piccolo campione di test, ma potrebbe essere necessario un aggiustamento. :slightly_smiling_face:

Modifica: Ho aggiunto un parametro ‘limit’ per avvicinarlo alle specifiche dell’OP. :+1:

Per Giove, penso che ci sia riuscito!

@JammyDodger Ho eseguito la tua query, ecco alcuni screenshot come riferimento.

Innanzitutto, la “top 10”:

E, come previsto:

:scream: :clap:t2:

Ci sono un paio di numeri che non corrispondono esattamente, ma ci è davvero vicino!

Sembra che debba assolutamente capire come aggiungere quella della foto. :slightly_smiling_face: Non ho ancora rinunciato. :crossed_fingers:

Ci ho provato di nuovo. :slightly_smiling_face: Non sono sicuro al 100% di questo, dato che non ho un campione abbastanza grande per testarlo, ma ha raccolto i miei argomenti di prova. :+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