Voici la description d’un sous-projet de On the Shoulders of Cloud Giants. Il s’agit de moissonner (ie. web scraper,  récupérer et organiser certaines données du web de manière automatisée) les blogues qui parlent de jeux de rôle sur table pour identifier qui cite qui.

Les codes sont en Python et ils utilisent des libraries courantes. Ils se trouvent ici : https://github.com/pmartinolli/pyTTRPGblogScraping

Visualisation du résultat en JavaScript : https://observablehq.com/@pascaliensis/ttrpg-blog-communities-who-cites-who

Les fichiers de programme .py sont installés dans un répertoire. Les fichiers produits (.csv et .txt) sont écrits dans le répertoire parent du répertoire des programmes.

Fonctionnement de la moissonneuse

Nom du programme : pyTTRPGblogCitationWS.py

Nettoyage du fichier de résultat

Nom du programme : pyTTRPGblogCleaner.py

Tout fichier doit être nettoyé avant d’être utilisé par un programme d’analyse ou de visualisation. Or le fichier généré par la moissonneuse est tout spécialement chevelu et hirsute.

Fonctionnement principal :

Et ensuite ?

Visualiser et analyser les données

(à venir dans un prochain billet)

Visualisation avec le logiciel GEPHI après 6h de moissonnage

 

Citation fine

Utiliser les URL testées positives pour archiver tous les billets de tous les blogues retenus (lorsque leurs auteurs autorisent le moissonnage). Puis utiliser ces billets archivés pour faire une analyse plus fine des citations.

Exemple de blogue avec deux emplacements pour les liens cités
Exemple de blogue avec deux emplacements pour les liens cités

Annexe : extraire les URLs de départ depuis Obsidian

J’avais stocké des centaines d’URL dans des notes Obsidian.md. Voici un programme qui parcourt un coffre (vaultObsidian.md et qui créé le fichier manual_urls.txt pour démarrer le programme de moissonnage.

Nom du programme : pyURLfromObsidianMD.py

Auto-réflexions en cours de projet (20240624)

  1. Le web scraping est vraiment un processus fragile. Souvent, j’ai corrigé le code pour éviter que ça plante. Maintenant, ça roule mieux (du moins pas de plantage en 24h non-stop) mais c’est lent. J’ai produit 33 000 paires en 72h dans un fichier csv qui fait 3.8 Mo. Je pensais que ça irait plus vite.
  2. J’ai fait l’erreur de créer/mettre à jour les fichiers sur un infonuage. Cela était sûrement une des raisons du plantage et des couacs divers. Maintenant, tout tourne sur le disque dur mais non synchronisé. À noter pour l’application de la méthode file over app : en cas de mise à jour intensive de fichiers, les infonuages sont à éviter.
  3. Émotionnellement, c’est super satisfaisant de s’endormir ou de partir en randonnée et de savoir que le code tourne tout seul et produit des choses en notre absence.
  4. Plus généralement, le fait de chercher «qui cite qui» dans ce contexte permet de mettre un peu d’ordre dans le chaos des blogues existants. A part utiliser des recommandations ou des listes sélectionnées de blogues, il n’y a aucun moyen de mesurer l’impact, l’étendue, la forme, etc. des communautés de rôlistes blogueurs.
  5. J’ai hâte d’assister à un pic d’URL à chercher (pour l’instant ça ne fait que monter) pour avoir l’impression d’avoir fait le tour. Bien que je sais que ce soit un peu illusoire car beaucoup de blogues :
    1. refusent d’être moissonnés,
    2. ou bien ils ont disparu,
    3. ou bien mon code ne sait pas les identifier. Cette dernière catégorie est particuli`èrement déchirante car c’est ce qui arrive pour les sites web “maison”. Or les blogues ayant souvent une valeur fortement DIY, cela écarte tous les blogues vraiment DIY et donne un biais de sélection aux blogues qui ont choisi des plateformes “mainstream” pré-construite comme WordPress ou Blogger. Exemple : https://ludomancien.com/ 
  6. Il faudra que je repasse sur certaines adresses (et que je revois mes critères de rpg_keywords) car je vois qu’elles sont écartées par erreur. Je me baserai sur les adresses les plus citées et celles qui ont été classées comme Non-blogue de JDR.
    1. NB: je pense savoir pourquoi: à un moment donné, il y a eu un problème de connexion sur certains blogues qui se sont retrouvés dans la liste d’exclusion. Il faudra donc retraiter toute la liste d’exclusion à la fin.

Auto-réflexions II (20240702)

  1. J’ai abandonné l’idée de réinjection continue des URL citées en URL citantes.
    1. D’abord, je fais une passe complète sur le premier jeu d’URL. Puis quand c’est terminé, je me base sur les URL citées pour constituer le second jeu d’URL.
    2. Auparavant, la constante réinjections des URL citées faisait que le processus entrait en profondeur dans certaines explorations et ainsi créait un énorme biais.
    3. J’utilise le programme pyTTRPGblogCitationIterationX.py pour extraire les URL de l’itération finale de la première phase.
Visualisation de la première itération complétée
Visualisation de la première itération complétée

La visualisation ci-dessus a été faite avec le logiciel open source Gephi. Open > Spreadsheet > Ouvrir le fichier clean_citing_cited_TTRPG_blog_list.csv qui contient 12000 arêtes (edges) et 4700 noeuds (nodes). Ça produit un gros carré. Aller dans le panneau Layout > —Choose a layout > OpenOrd > RUN