Dans l’étape précédente, on a extrait les messages dans plusieurs fichiers pour éviter de surcharger notre workflow de scraping.

Maintenant il nous faut rassembler et classer tout ça pour pouvoir l’exploiter de manière optimale.

Un traitement de données hyper efficace

Fusionner des 100aines de messages à la main, merci mais non merci ! Habituellement j’utilise n8n pour faire ce genre d’opérations automatiquement, mais là avec 15mo de pur texte ça fait facilement lagger l’interface…

Alors en demandant à Perplexity un moyen de faire ça rapidement sur mon Mac, j’ai découvert la commande jq à utiliser dans mon terminal !

DALL·E 2025-02-02 16.38.53 - A whimsical isometric pixel art representation of a Mac command terminal with a simple 'jq' command to merge JSON files. The scene should be infused w.webp

Alors je sais, le terminal ça peut faire peur… Mais aujourd’hui avec notre copilote ChatGPT, ça se résume à ouvrir une appli, à poser des questions à GPT, et à copier-coller ses réponses : autant dire que n’importe qui en est capable ! (cf mon échange avec Perplexity pour récupérer les commandes)

easiest way to combine several json files of arrays in one

Fusionner les fichiers JSON en une liste groupé

J’ai pris soin de bien exporter les messages dans des fichiers JSON commençant tous par b2b_discord_export_

Pour faciliter l’analyse à venir, on va grouper l’ensemble des messages d’abord par salon, puis par topic.

Un topic, c’est le nom d’un post dans le cas des salons type forum. Pour les salons chats, les messages seront groupés dans un topic nommé “regular”.

Il me suffit d’utiliser la commande suivante sur mon terminal :

jq -s '
  # First normalize input to array of valid objects
  [.[][] | select(type == "object" and has("channel"))] |
  
  # Then perform grouping
  group_by(.channel) |
  map({
    key: .[0].channel,
    value: (
      group_by(.topic_id | if . == "" or . == null then "regular" else . end) |
      map({
        key: (.[0].topic_id // "regular"),
        value: .
      }) |
      from_entries
    )
  }) |
  from_entries' b2b_discord_export_*.json > messages_groupby_topic.json

<aside> 💡

Je te recommande de regrouper tous tes fichiers dans un même dossier, c’est plus pratique d’ouvrir le terminal au bon endroit si tu n’y es pas familier

image.png

</aside>

Grouper les messages de salons chat par jour

Les salons chats peuvent contenir énormément de messages en un bloc “regular”, on va donc les découper en topic par jour où ils ont été postés

jq 'with_entries(
  .value |=
    if has("regular") then
      (.regular
       | group_by(.timestamp[0:10])
       | map({ (.[0].timestamp[0:10]) : sort_by(.timestamp) })
       | add)
    else
      .
    end
)' messages_groupby_topic.json > chat_groupby_day_sorted.json

Grouper les messages par des salons standards par période

on fait des paquets d’un nombre maximum de 1000 messages pour pouvoir les analyser facilement