Ressources numériques en sciences humaines et sociales OpenEdition Nos plateformes OpenEdition Books OpenEdition Journals Hypothèses Calenda Bibliothèques OpenEdition Freemium Suivez-nous

Moissonnage du web : quel blogue de jeu de rôle cite lequel ?

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

  • On fournit une liste de blogues pour démarrer le moissonnage. Ce sont des URLs (une par ligne) dans un fichier manual_urls.txt
  • Le programme parcourt les URLs et produit un fichier blog_urls_iteration_1.csv
    • Il contient l’URL du blog citant, l’URL du blog cité et les mots-clés contrôlés trouvés dans le blogue citant.
    • Le processus peut être interrompu en tout temps et relancé. Le prochain fichier sera nommé blog_urls_iteration_2.csv et ainsi de suite. C’est très pratique car parfois (souvent?) le processus bloque sur certaines URLs. Il faut alors redémarrer le kernel de Python et relancer le programme.
    • Un blogue citant qui a été analysé une fois ne l’est plus par la suite.
  • Pour automatiser l’insertion d’une nouvelle entrée dans le fichier csv, il faut que le blogue citant ET le blogue cité :
    • Soient chacun de type “blogue” (plusieurs techniques sont utilisées)
    • Parlent de jeu de rôle sur table (liste de mots-clés contrôlés à repérer sur la page d’accueil du blogue, à l’exclusion du texte des liens). Les mots-clés contrôlés sont dans le code dans une liste nommée rpg_keywords
  • Mécanismes d’exclusion
    • À l’intérieur du code, il y a la possibilité d’alimenter une liste nommée url_traps avec les URLs qui ont fait boguer le programme.
    • Pour éviter de tester des URLs qui ont déjà été évaluées et rejetées (ni blogue, ou blog non JDR, ou erreurs), une liste d’exclusion est stockée dans une variable exclusion_list_urls et dans un fichier texte nommé exclusion_list.txt. C’est le premier test quand une nouvelle URL doit être évaluée. Cela accélère considérablement le programme.

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 :

  • Il supprime les indicatifs .com, .fr, etc.
  • Il supprime les lignes doublons et les auto-citations qui auraient pu se glisser (citant = cité)
  • Il supprime les “non blogues de JDR”
  • Il renomme la colonne Citing... en Source et la colonne Cited... en Target (car c’est souvent ce qu’attendent certains programmes comme GEPHI).
  • Un fichier clean_citing_cited_TTRPG_blog_list.csv est produit.

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.

    • En effet, avec la méthode actuelle les liens de citation sont principalement ceux dans le bandeau actuel de navigation du blogue, avec peut être une dizaine de billets les plus récents.
    • En analysant les citations dans chaque billet on a un maillage plus fin des relations puisque ces citations sont localisées sur des informations spécifiques plutôt qu’être mentionnées de manière générique dans la zone de navigation.
    • On pourra peut être même comparer les deux types de citation.
    • Il y a un aspect préservation aussi car on ne sait pas si Google ou d’autres plateformes de blogue fermeront leurs services.
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

 

On the Shoulders of Cloud Giants: visualisation de données avec JavaScript dans Observable

Extrait de diagramme d'accord

Mon projet On the Shoulders of Cloud Giants qui tente de décrire les pratiques de citations dans les publications de jeux de rôle sur table dort un peu en ce moment. Je suis en train de tester une nouvelle technique qui consiste à créer des index automatiques de citations mais ça prend du temps.

En attendant, j’ai expérimenté des visualisations de données avec Observable, la plateforme qui permet d’intégrer des données avec des bibliothèques de visualisation JavaScript.

Elle se trouve ici : https://observablehq.com/@pascaliensis/on-the-shoulders-of-cloud-giants

Voici son fonctionnement :

  1. Le code interroge Wikidata et rapatrie les données de manière structuré sous la forme (principalement) de séries de paires entre un jeux de rôle qui cite et un jeux de rôle qui est cité.
    1. Les données existent dans Wikidata grâce à la propriété P2860 (cites work).
    2. Le code se trouve en annexe (tout en bas de la page Observable) dans la variable query=
    3. D’autres données sont rapatriées au passage : date de publication, “mouvement” auquel appartient le jeu de rôle (The Forge, OSR, etc.), maison d’édition et mécaniques de jeu.
  2. Ces données sous la forme d’un tableau sont codées au format JSON. C’est important car comme nous allons faire des visualisations JavaScript, il faut structurer les données dans ce format pour qu’elles soient absorbées correctement par les bibliothèques de visualisation JavaScript.
  3. Ensuite, ce tableau JSON est transformé dans une hiérarchie JSON, c’est une organisation de l’information spécialement conçue pour les visualisations de réseau / de relation.
    1. En gros, la structure de cette hiérarchie JSON se découpe en deux parties : une partie décrivant chaque jeu indépendamment (partie nodes) et une partie listant chaque relation (partie edges).
    2. La transformation a été effectuée par une fonction nommée table2hierarchy
    3. La variable contenant ce fichier se trouve dans data_citingCited
  4. À partir de là, l’essentiel est fait car les bibliothèques JavaScript font tout le reste du travail. Il faut juste les modifier un petit peu chaque fois pour avoir l’effet désiré (comme le fait de filtrer les données ou de les colorer). Plusieurs visualisations sont ainsi faites :
    1. Des graphes non orientés (undirected graphs)
    2. Des diagrammes d’accord (chord diagrams)
    3. Des diagrammes à barre bien classiques, etc.

https://observablehq.com/@pascaliensis/on-the-shoulders-of-cloud-giants

JavaScript pour analyser votre bibliothèque de références Zotero

Mon collègue Philippe m’a expliqué comment fonctionnait la plateforme ObservableHQ qui a été conçue pour faire de jolies visualisations interactives avec JavaScript. J’ai été très enchanté du résultat et de la facilité d’utilisation. J’y ai donc transposé une partie du code R Studio discuté dans le billet précédent.

Le notebook se trouve ici https://observablehq.com/@pascaliensis/zoterojsnalysis

N’importe qui peut cloner (fork) le code avec un compte personnel créé gratuitement. Notez cependant qu’avec un compte gratuit, le code et les données sont accessibles à la vue de tous.

Je discuterai dans des prochains billets de deux autres projets qui dormaient en format R Studio et dot et que j’ai transposé partiellement sur ObservableHQ :

L’aspect interactif, la rétroaction rapide sur les données et l’esthétique de leur visualisation peuvent ré-dynamiser des projets assoupis de mani`ère salutaire.

R Studio pour analyser votre bibliothèque de références Zotero

Ma proposition de présentation du colloque «Vous êtes dans une taverne… Retour sur 50 ans de jeux de rôle» a été acceptée. Intitulée « Évolution historique et analyse bibliométrique de la recherche académique sur le jeu de rôle sur table dans les publications universitaires », elle consiste principalement à faire une étude descriptive de la publication universitaire sur le jeu de rôle sur table depuis les années 80.

Depuis 2014, j’ai entrepris de rassembler des références universitaires se rapportant à l’étude du jeu de rôle sur table. Cette démarche a abouti à la création d’une base de données librement accessible via Zotero, comprenant un total de 2400 références. Parmi celles-ci, on dénombre 460 articles soumis à une évaluation par des pairs, 180 ouvrages, 300 thèses, et bien d’autres encore.

La base de données bibliographique est en libre accès à : https://www.zotero.org/groups/446523. Depuis 2019, Michael Freudenthal m’a rejoint pour gérer cette base de données.

Last Christmas, I gave you my R

Dans le but de faire une analyse bien reproductible, non seulement je verse les données en libre accès mais je verse aussi les algorithmes qui permettent de les analyser. Le tout est déposé sur GitHub à https://github.com/pmartinolli/ZoteroRnalysis

J’ai choisi d’utiliser le logiciel R Studio parce que j’ai appris à l’utiliser dans le cadre de mon travail, aussi parce que c’est un logiciel performant et libre, et enfin parce qu’il est facile de demander à ChatGPT 3.5 de OpenAI de corriger mes bugs de codage (ce que je fais très souvent).

Le principe est simple :

  • J’exporte les références bibliographiques de Zotero au format csv
  • J’importe les données dans R Studio
  • Je mouline les données dans R Studio
  • R Studio me produit des jolis graphiques et d’autres tables csv
  • Au passage, j’aligne mes données avec celles de Wikidata pour augmenter mes données (dans un processus appelé la «réconciliation», fait par le logiciel OpenRefine). Par exemple, avec la liste des noms des revues universitaires, je vais chercher la date de la création de la revue et son pays d’origine pour repérer des tendances.

All I want for this graph is you

Après ce deuxième jeu de mots douteux du temps des Fêtes (nous sommes le 1er décembre), voici quelques jolies extractions sous forme graphiques. Notez que ce ne sont pas les versions définitives car, d’ici le colloque, je vais encore « shampooiner les données » pour les corriger et les améliorer.

Pour la suite, je vous donne rendez-vous à Reims (je serai par Zoom), ou sur ce blogue, ou plus tard dans une publication plus définitive.

Annexe : suite de la proposition de présentation au colloque

« Dans la présentation, je vais expliquer en quoi la compilation d’articles évalués par des pairs et d’ouvrages publiés depuis les années 1980, tant en anglais qu’en français, est presque exhaustive et permet de généraliser les analyses qui vont suivre. Je mettrai également en lumière les éventuels biais de sélection et d’indexation qui peuvent être présents.

« Mon projet consiste à réaliser une analyse historique et bibliométrique des publications de type articles évalués par des pairs et de type chapitres de livres. Cette analyse permettra de mettre en évidence les variations observées au fil des années, dans diverses disciplines, pour différents sujets de recherche, ainsi que les enjeux entourant la publication (notamment les prépublications, les revues systématiques, les publications potentiellement prédatrices, les rétractions, etc.). Je montrerai, par exemple, comment les premières publications des années 1980 visaient à expliquer la montée en popularité de cette passion et à répondre aux paniques morales de l’époque. De même, j’illustrerai comment les publications récentes se concentrent davantage sur des thématiques telles que le genre, les actual play et les aspects psychothérapeutiques liés à la pratique du jeu de rôle. Je mettrai également en évidence la grande diversité des domaines académiques abordant l’étude du jeu de rôle, allant des disciplines traditionnelles telles que la sociologie, la psychologie et les humanités, jusqu’à des domaines plus atypiques tels que la musique, la neurosciences et la philosophie. Cette présentation s’étend également à l’échelle internationale, englobant l’Europe, l’Amérique du Nord, ainsi que d’autres régions d’Amérique latine et d’Asie. Je soulignerai la prédominance du jeu Dungeons & Dragons, tout en identifiant d’autres jeux étudiés ou mentionnés en marge de cette prépondérance.

« Pour enrichir cette analyse, je discuterai de la réflexion théorique et pratique de la communauté des joueurs sur leur loisir en parallèle du milieu universitaire. Je passerai également en revue les conférences, congrès et colloques consacrés au jeu de rôle, ainsi que les mémoires et thèses abordant ce sujet. Enfin, je discuterai des pratiques de citation dans le jeu de rôle sur table, dans son étude et dans ses communautés de pratiquants. »

Pratiques de citation des jeux de rôle sur table : Wikidata, SPARQL et RStudio

Avertissement : Les données sont incomplètes et leur traitement est embryonnaire. Ce 100e billet de blogue a pour but de faire le point sur la méthode et les résultats à mi-parcours.

Introduction

Dans le cadre du Projet Sur les épaules des géants des nuages, qui analyse les pratiques de citations dans les jeux de rôle sur table (JDRT), j’ai poussé mon travail vers :

  1. La sélection et le dépouillement de jeux de rôle sur table ;
  2. La création d’une base de données de citations, structurée et hébergée à l’intérieur de Wikidata, puis interrogée par SPARQL ;
  3. L’analyse de cette base de données par R et R Studio, une suite de logiciels libres de traitement statistique.

Sélection

La sélection des JDRT s’est faite sur :

  • La liste de tous les JDRT qui ont une page Wikipédia en anglais et en français. Complétude estimée : environ 95% ;
  • Plus tous les JDRT cités dans des périodiques que je suis depuis les dix dernières années : des podcasts francophones, des blogues francophones et anglophones et des magazines sur le JDRT. Complétude : environ 80% ;
  • Plus tous les JDRT cités par des JDRT issus des listes précédentes.

Cette sélection est modérément biaisée car la notoriété est attribuée de manière externe par des tierces parties (ie. les contributeurs de Wikipédia et les éditeurs des périodiques).

La sélection a été validée par le fait que chaque jeu mentionné comporte une ou plusieurs notices de référence dans la base de données RPGGeek (environ 99.9%).

Dépouillement

Le dépouillement des JDRT a été fait sur plusieurs mois. Chaque page de JDRT mentionnant un autre JDRT a été récolté dans un dossier électronique par numérisation ou par re-numérisation (capture d’écran d’un PDF par exemple) sous la forme de fichiers image PNG nommés nomdujeu-pXX.png (où XX représente la page de la numérisation).

Pour enrichir les données dépouillées, des métadonnées d’édition du JDRT ont aussi été capturées : ours, colophons,  pages de crédit (env. 90%), pages de remerciement, extrait de la page des participants des souscriptions (env. 50%), parfois couverture ou dos de couverture (env. 5%).

D’autres mentions de citation, d’attribution ou de référence ont été récoltées : bibliographies, filmographies, citations d’auteurs ou d’œuvres, etc.

Tout ou une partie des épigraphes ont été récoltés.

Conception de la base de données

J’ai choisi Wikidata pour déposer le cœur de la base de données des pratiques de citation.

  • Cela m’évite d’avoir à créer ma propre base de données ;
  • Cela me permet de partager ma base de données de manière ouverte ;
  • Wikidata est simple à alimenter ;
  • Wikidata exporte dans des formats simples. Aussi, il est très facile de l’interroger directement via R Studio avec le package adéquat ;
  • Il y avait presque toutes les propriétés dont j’ai besoin :
    • propriétés de citation (cites work P2860)
    • publisher P123
    • movement P135
    • author P50
    • publication date P577
    • Inconvénient : il n’y a pas de propriété pour renseigner les informations suivantes : existence d’une bibliographie, présence d’épigraphes.
  • Je peux potentiellement lier les données à d’autres bases de données pour enrichir ce cœur (à explorer : c’est une manipulation à faire dans R Studio, ou bien à faire semi-automatiquement dans Wikidata grâce à des programmes comme QuickStatements).

Pour l’occasion et pour enrichir Wikidata de données liées, j’ai demandé à Wikidata la création d’une propriété d’identifiant (identifier ID P7226) vers RPGGeek pour commencer à lier ces deux bases de données. L’identifiant est désormais présent dans l’outil Mix’n’Match de Magnus Manske.

Avancement

La saisie dans Wikidata a débuté en mai 2019. En décembre 2019, il y avait environ 13 000 éditions faites.

Environ 300 éléments Q ont été créés. La plupart sont des éléments Q d’un JDRT inexistant auparavant. Plus rarement, un élément Q a été créé pour une catégorie taxonomique (ex: tabletop role-playing game supplement, GM-less, death spiral, etc.).

Environ 766 liens ont été créés entre 137 JDRT (voir cette extraction SPARQL).

Beaucoup de données étaient à corriger ou à préciser. Par exemple, de nombreux JDRT n’avaient pas d’instance, ou bien avaient l’instance jeu (game) ou jeu de rôle (role-playing game), alors que l’instance correcte est jeu de rôle sur table (tabletop role-playing game).

D’autres mises en ordre taxonomiques ont été référencées sur la page WikiProject Boardgame.

SPARQL

Le langage SPARQL permet d’extraire les données de Wikidata. La principale requête pour ce projet a été déposée ici. Elle est aussi présente directement dans le code R.

Elle permet d’extraire un tableau simple, ayant les jeux analysés dans une colonne et tous les jeux de rôle cités par celui-ci dans une autre colonne.

Dans une seconde phase, il va être intéressant d’exporter aussi les données de maison d’édition et d’auteur pour pondérer à la baisse la force de certaines citations. En effet, beaucoup de jeux d’une même gamme/ maison d’édition se citent les uns les autres. De la même manière, parfois des jeux du même auteur sont mentionnés en indication purement autobiographique.

Analyse avec le logiciel R

R est une suite de logiciels libres pour traiter de données numériques. C’est la grande mode en ce moment dans la recherche universitaire alors pourquoi pas les utiliser pour mon projet ? Ces logiciels sont gratuit et ouverts, donc il existe beaucoup de partage de codes et d’outils en ligne. Idéal pour moi qui suis un programmeur du dimanche. De plus, la manipulation de R n’est pas très complexe avec l’interface R Studio.

J’ai déposé le code ici https://github.com/pmartinolli/OtSoCG

Cliquer sur l’image pour télécharger une visualisation des données (préliminaires) au format PDF.

Développement futur : comme expliqué précédemment, je souhaite pondérer les liens de citations en réduisant la force des liens vers d’autres JDRT de même publisher ou de même author.

Wikidata : base de données+requêtes pour programmeurs du dimanche

Synchronicité

Dans le billet précédent, j’expliquai les limites techniques de mon projet de chronologie des jeux de rôles, d’arbre des innovations et des citations, par mes limites de compétences en informatique. Il se trouve que je viens tout juste d’assister à une formation sur Wikidata donnée par Simon Villeneuve, véritable wiki-héros Chicoutimien (107 contributions).

Wikidata est une solution simple pour constituer une base de données d’éléments liés (ex: Q1375) et  pour générer des tableaux de données, des chronologies, des graphes, etc. grâce à des requêtes complexes. Même si les déclarations d’éléments peuvent être complexes, Wikidata m’évite d’avoir à apprendre des langages de programmation, de structuration de données et d’installer le tout localement. De plus, le cheminement est progressif et il porte ses fruits dès le début. Il peut être jumelé ou soutenir des projets d’humanités numériques pour lesquels vous manquez de ressources de programmation. Parlez-en à votre bibliothécaire disciplinaire.

Du coup, je réfléchis comment apparier mes données avec celles de Wikidata et comment utiliser cet outil qui a le bénéfice d’être entièrement ouvert (le contenu dans le domaine public CC0).

Bases de Wikidata

  • Un élément Wikidata Q possède des propriétés P qui elles-mêmes sont souvent d’autres éléments Q.
  • Pour plus de précisions, on peut encore préciser ces données avec des éléments P et Q.
  • Chaque élément est multilingue.
  • Il est possible de sourcer tous les éléments avec des références bibliographiques.
  • Il est possible de lier les données à des bases de données externes grâce à des propriétés de type « Identifiers / Identifiants ».
  • Chaque modification est signée et comptabilisée (j’en suis à 12 000 en nov. 2019).
  • On peut interroger Wikidata et récupérer les données sous différents formats grâce à des requêtes SPARQL (exemples).
  • On peut s’amuser à renseigner des éléments :

Bonnes pratiques pour les jeux de rôle sur table

Requêtes SPARQL

Exemples de graphe sur les pratiques de citation dans les jeux de rôle sur table.

Méthode et structure du code dot de l’arbre des innovations des jeux de rôle sur table

Lien vers le dépôt GitHub contenant le code source et le PDF

Mets ta méthode (méta-méthode?)

La meilleure (mais que je n’ai pas suivie)

Idéalement, pour conduire un projet d’arbre phylomémétique des innovations dans les jeux de rôle sur table, la meilleure méthode serait de générer du code à partir d’une base de données dont les éléments seraient les jeux, les innovations et les liens entre eux.

L’intérêt principal de cette méthode est que je pourrais ainsi catégoriser les éléments (leur ajouter des mots clés) et générer facilement un ou plusieurs graphes selon ces catégories. Par exemple, générer un arbre des liens de citation seulement, un arbre autour des mécaniques de randomisation (dés, etc.), un arbre sur les jeux français, etc. Cela permettrait aussi de générer un arbre pour deux langues facilement : un avec des champs en anglais et un un avec des champs en français.

Pour cela, je pourrais utiliser Gephi pour toute la chaîne de production. Ou bien, je pourrais utiliser une base de données, interrogée par Python qui génèrerait du code en langage dot, puis qui serait interprété en ps par Graphviz, puis en pdf par Acrobat Distiller.

La pire (Que j’ai évité)

La pire méthode serait de créer les éléments du graphe et de les relier manuellement directement dans le document final. Exemple : en déroulant une feuille papier de 2 x 3m et rédigeant tout avec un crayon papier. Ou bien en utilisant un logiciel de diagramme visuel WYSIWYG comme Visio, CMaptools, etc.

La voie du milieu (Que j’ai choisi)

En effet, comme je ne sais pas utiliser Gephi ni programmer en Python, j’ai choisi une méthode qui court-circuite la base de données de la «meilleure méthode» ci-dessus pour coder toutes les données directement en langage dot. Cependant :

  1. Cela m’oblige à bricoler des règles de structure car je ne peux pas facilement catégoriser les éléments.
  2. Tout est dans un seul bloc de code. Donc, si je veux couper des éléments pour faire des petits arbres plus simples, il faut que je regroupe ces éléments dans des parties bien séparées (et facilement escamotables).

Chronologie des jeux de rôle sur table (rendu partiel ne tenant pas en compte des innovations, des liens d'auteur, de citation ou de règles)
Chronologie des jeux de rôle sur table (rendu partiel ne tenant pas en compte des innovations, des liens d’auteur, de citation ou de règles)

Le code source code est une adaptation du code créé par Todd Lehman pour son “TeX Family Tree”.

J’ai fait un modèle simple reprenant toute la structure en quelques éléments (aperçu). N’hésitez pas à vous l’approprier pour vos propres projets (et me citer).

Partie 1 : le préambule

  • Métadonnées
  • Conseils de compilation du code
  • Paramètres du graphe

Partie 2 : la ligne du temps

  • de 1969 à maintenant

Partie 3 : la liste des jeux de rôle

{ rank = same; 1977; dndholmes [label="Basic D&D [Holmes]"]} odnd_whitebox -- dndholmes ;
{ rank = same; 1981; dndmoldvay [label="Basic D&D [Moldvay]"]} dndholmes -- dndmoldvay ;
{ rank = same; 1983; dndmentzer [label="Basic D&D [Mentzer]"]} dndmoldvay -- dndmentzer ;
  • Ils sont listés et regroupés par :
    • gamme
      • avec une liste des différentes éditions des règles
      • suivie d’une liste des suppléments/ modules marquants
    • puis ils sont listés et regroupés par genre (fantasy, sf, etc.)
  • Chaque élément est décrit de la manière suivante : 1ère année de publication / identifiant unique / label [nom du jeu et édition] / lien immédiat vers le jeu précédent de la gamme

Partie 4 : la liste des innovations : mécaniques de jeu, intentions ludiques, etc.

Pour le moment, cette partie n’est pas diffusée sur GitHub.

  • Chaque élément est décrit de la manière suivante  : Identifiant unique / label (description synthétique de l’innovation) / lien immédiat avec le jeu dont cette innovation est issue.
    • { identicaldices [label = "Sets of identical-dices values in dice pool"]} godlike -- identicaldices ;
  • Option du label : précédé de «1st» si c’est original (1ère fois que…)
    • label = "1st critical hit\n['lucky hit']"
  • Les innovations sont classées par grandes catégories. Chaque catégorie est colorée différemment.

Liste des catégories des innovations

  • Miscellaneous historical innovations
  • Authority on fiction: gamemaster roles vs players roles
  • Campaign, adventure
  • Design
  • Resolution system
  • Critics & level of success
  • Dramatic modifiers to resolution
  • Saves
  • Use points to influence success (aka Meta-currency)
  • Health
  • Group
  • Sheet
  • Character generation
  • Character advancement
  • Magic
  • Morality, Alignment, Personality, Sanity
  • Literature / Genre Emulation
  • Rolls & Randomizers

Partie 5 : méta-liens entre les éléments

Pour le moment, cette partie n’est pas diffusée sur GitHub.

Les liens de base existent déjà entre les jeux (dans la liste des jeux de la partie 3) et entre les jeux et les innovations (dans la liste des innovations de la partie 4). Dans cette partie, on va tisser d’autres types de liens.

liens de Même auteur

La liste des principaux concepteurs de jeu, avec un historique de leurs principaux jeux édités.

eotpt -- eotpt83 -- eotpt87 -- aot1992 -- tita2002 -- eotpt2005 [headlabel = "M.A.R. Barker"] ;

liens de Citation directe

Quand un jeu est cité par un autre jeu en bibliographie, en dédicace, etc.

{dnd0 -- tnt1} -- runequest1 ;

liens autres

Liens divers mais significatif entre 2 jeux : même maison d’édition, mêmes règles, même univers diégétique, etc. Le trait est alors en pointillé.

  • pathfinder -- starfinder [style=dotted];;
  • { orientaladventures ; l5r2 } -- orientaladventures2 [style=dotted];;
  • agameofthrones -- asongoficenfirerpg [style=dotted];
  • tombofhorror -- returntombofhorror -- tombofannihilation [style=dotted] ;

Comment indiquer les sources des jeux et des innovations ?

  • Les sources sont indiquées dans le code du graphe sous la forme de commentaires (ex: #s075). Les numéros d’identifiants sont uniques, ils sont précédés d’une lettre indiquant le type de source.
    • #p001 : source no. 001, une source primaire
    • #s045 : source no. 045, une source secondaire
    • #t078 : source no. 078, une source tertiaire
  • La liste des sources est rédigée dans un document sources.md à part.
    • Le début du fichier liste les sources générales
    • La fin du fichier recense spécifiquement toutes les sources utilisées.

Phylomémétique des jeux de société et des jeux de rôle

Et comme il y a infiniment moins de parties et d’organisation dans la plus belle composition d’éloquence que dans le corps organisé le plus grossier, la reproduction [propagation] d’une Iliade et d’une Enéide est une supposition plus facile que celle d’une plante ou d’un animal. (Hume)

La phylomémétique est l’étude historique de l’évolution des relations entre des objets ou des concepts culturels. Le terme est inspiré du terme « phylogénétique » pour les êtres vivants. Tout comme pour la mémétique en général, il y a beaucoup de problèmes car il y a de nombreux transferts horizontaux à évaluer et des générations spontanées. Alors que pour le vivant, les transferts sont surtout verticaux avec peu de nouveauté.

Arbres phylomémétiques

Les résultats des études de phylomémétique prennent souvent la forme d’arbres phylomémétiques d’une grande complexité et d’une grande beauté esthétique aussi :

Dans le cadre de mon projet Sur les épaules des géants des nuages, j’ai commencé à concevoir deux arbres posés sur une frise chronologique : un sur les jeux de société et un sur les jeux de rôle sur table. Ils sont écrits dans le langage DOT et compilés avec Graphviz. Je les partagerai quand ils seront mûrs.

Niveau caché de l’exposition Donjons & Données probantes : mon arbre phylomémétique des jeux de rôle sur table de 1974 à 2018

Relations phylomémétiques

Il est difficile de retracer et certifier un lien fiable entre deux jeux. Pour le vivant, on peut s’appuyer sur les gènes. Pour langues humaines, on peut s’appuyer sur les mots et la structure de nombreuses phrases. Mais pour les jeux, nous n’avons que très peu d’éléments objectifs et indiscutables.

Approche purement phylomémétique

Il est possible d’établir un arbre phylomémétique des jeux de société en se basant seulement sur leurs mécaniques et leur première date de publication. Pour cela, il faudrait par exemple extraire les données de BoardGameGeek via une API. Ensuite, il faudrait les soumettre à un logiciel spécialisé de phylogénie. Hélas, je ne posséde pas les compétences nécessaires pour une telle entreprise. Cependant, tout étudiant motivé pourrait en faire un excellent projet d’étude interdisciplinaire (merci de m’en donner des nouvelles).

Approche historique

Étant historien [et codeur du dimanche], je vais suivre les méthodes d’enquêtes historiques pour remonter chaque branche, évaluer les sources et établir des faits et des relations. Le tout sera compilé dans une frise chronologique sous la forme d’un arbre, ou plutôt devrions-nous dire un “graphe connexe non cyclique oriente”.

Le mot “connexe” renvoie aux connexions des lignes entre elles. Le terme “non cyclique” réfère au fait qu’il n”existe qu’un chemin pour passer d’une extrémité d’une ligne à une autre extrémité. Le mot “oriente” réfère à ce qu’on appelle une “racine”, un point initial qui donne un sens de lecture au graphe. (Charbonnat et al., 2014, p.105)

L’enquête historique se base surtout sur des sources primaires (c’est-à-dire les jeux originaux) ; sur des sources secondaires (les études sur ces jeux) et des sources tertiaires (compilations ou larges synthèses de sources diverses sur ces jeux).

Sources primaires

  • Le jeu en tant qu’objet : éléments mobiles et fixes, motifs, habillage de marque (trade dress), matériaux.
  • Le texte des règles du jeu : mécaniques de jeu, vocabulaire spécifique.
  • Les métadonnées du jeu : auteur, éditeur, dates de publication, version, variante.
  • Le métatexte : les remerciements, les crédits, les épigraphes, la bibliographie et enfin et surtout la perle très très rare : les références ludographiques citant d’autres jeux.
  • Les interviews ou les autobiographies des auteurs du jeu.
Le combat des dieux, de Bruno Faidutti, 1999 (2011).

Sources secondaires

  • Commentaires ou critiques de jeu.
  • Articles de fond (universitaires ou enquêtes, biographies, reportages) sur un jeu ou une famille de jeux.

Sources tertiaires

  • Article d’encyclopédie ou entrée de dictionnaire sur un jeu ou une famille de jeux.
  • Catalogue de jeu avec indexation des mécaniques de jeu.

Problèmes investigués dans les prochains billets

  • Lien généalogique : seul l’auteur d’un jeuB, citant explicitement l’inspiration d’un autre jeuA, peut attester de manière sûre la parenté du jeuB sur le jeuA [lien vertical].
    • Sans doute pour des raisons de propriété intellectuelle (pour éviter des ennuis juridiques), très peu d’auteur citent leurs inspirations.
    • Certaines cultures et certaines motivations peuvent favoriser les pratiques de citation.
    • Récemment, la reconnaissance des auteurs de jeu de société et les citations ludographiques dans les jeux de rôle sur table commencent à changer les pratiques de citation.
  • Lien phylogénique ou phylomémétique : l’antériorité et l’originalité d’une mécanique d’un jeu est un indicateur de parenté probable avec un autre jeu ultérieur aux mécaniques similaires [lien horizontal].
    • On peut lier des jeux avec leurs mécaniques, leurs intentions ludiques ou leur exégèse (univers, genre, etc.).

Bibliographie

Pascal Charbonnat, Mahé Ben Hamed et Guillaume Lecointre (sous la dir. de), Apparenter la pensée ? Vers une phylogénie des concepts savants, Paris, Editions matériologiques, coll. « Sciences & Philosophie », 2014, 274 p.

Fisler, Marie, Cédric Crémière et Guillaume Lecointre. « Qu’est-ce qu’un arbre des idées ? Explications des notions d’arbre et de phylogénie et histoire des représentations de l’arbre ». Dans Apparenter la pensée ? Sous la direction de Pascal Charbonnat, Mahé Ben Hamed et Guillaume Lecointre, 103‑44. Sciences & philosophie. Paris: Editions Matériologiques, 2014. https://www.cairn.info/apparenter-la-pensee–9782919694563.htm.

David Hume, Dialogue sur la religion naturelle, IIIe partie, trad. M. Malherbe, Vrin, p.143-145.

Deniz Cem Önduygu, « The History of Philosophy – Summarized & Visualized ». The History of Philosophy, 2018.

Hokky Situngkir, « The Phylomemetics of Batik », SSRN Social Science Research Network, no ID 1481394,‎ 2 octobre 2009 (DOI 10.2139/ssrn.1481394).

Créer un graphe sur OD&D

2016-05-27 16-12-45

Voici quelques conseils pour créer votre propre graphe dont la mise en forme se fait automatiquement. Avec des logiciels libres. C’est l’équivalent de LaTeX pour les diagrammes en quelque sorte. Il suffit de modifier le codage en langage dot (très simple) et c’est le logiciel Graphviz qui s’occupe de positionner le tout au mieux.

L’exemple de codage a été fait autour de la création de OD&D.

  1. Installer:
    1. Graphviz (!site souvent très lent).
    2. Notepad++ (logiciel très pratique pour écrire du code)
  2. Paramétrer Windows pour Graphviz (modifier la variable d’environnement “path”)
    1. Démarrer > Panneau de configuration > Système et Sécurité (clic titre) > Système > Paramètres système avancés > Variables d’environnement.
    2. Sélectionner la variable/ligne “path” dans la liste des variables système. Cliquer Modifier. Ajouter à la fin de la ligne  ;C:\Program Files (x86)\Graphviz2-34\bin
      (NB: ne pas oublier le point-virgule du début)
  3. Paramétrer Notepad++
    1. Paramétrer le lancement de Graphviz depuis Notepad++
      1. Notepad++: Plugins (ou Compléments) > Plugins Manager > Show Plugin Manager : Search and install NppExec plugin
      2. Configurer le NppExex: Plugins > NppExex > Execute > saisir ce script dans la fenêtre (une seule ligne) :
        dot "$(FULL_CURRENT_PATH)" -Tpng -o "$(CURRENT_DIRECTORY)\$(NAME_PART).png"
        cela va lancer le programme dot et créer un PNG.
      3. On peut remplacer par Tpdf pour faire un PDF mais c’est moins robuste pour les graphes immenses.
      4. On peut utiliser l’option gdi+ pour faire le rendering car cairo (défaut) n’est pas robuste pour les graphes immenses:
        dot "$(FULL_CURRENT_PATH)"  -Tpng:gdiplus:gdiplus -o -v "$(CURRENT_DIRECTORY)\$(NAME_PART).png"
      5. Sauvegarder le script.
    2. Paramétrer le coloriage syntaxique dans Notepad++
      1. Télécharger le fichier graphviz-notepad-udl.xml.
      2. Notepad++: Language > Create User Define Language > Import : sélectionner le fichier xml précédent. Relancez Notepad++.
  4. Pratiquer la création de graphes :
    1. Télécharger le fichier exemple.gv
    2. Ouvrir le fichier exemple.gv avec Notepad++
    3. [Modifier le contenu]
    4. Plugins > NppExec > OK … un fichier PNG est créé. Voir le fichier exemple.png.

Sources: Steinweb, Grevian, TBallantyne. Lien pratique pour les couleurs.