Contribuer en lot à Wikidata avec QuickStatements

Après avoir fait plus de 14 000 modifications à la main dans Wikidata, je me suis enfin penché sur les modifications semi-automatiques de QuickStatements, une API qui permet les modifications en lot. Voici la méthode pour se sauver du temps et de l’ennui avec l’exemple de la propriété P123 Publisher pour les maisons d’édition de jeux de rôle sur table :

Exporter une table csv depuis Wikidata

  1. Lancer une requête SPARQL avec, pour chaque élément, une colonne pour l’identifiant Q Wikidata et une colonne pour le label. Dans l’exemple, item = élément de base Q Wikidata du jeu, itemLabel = nom du jeu, publisher = élément Q de la propriété P123, publisherLabel = nom de la maison d’édition.
SELECT DISTINCT ?item ?itemLabel ?publisher ?publisherLabel WHERE {
  {
    { ?item wdt:P31 wd:Q1643932. } #TTRPG
    UNION
    { ?item wdt:P31 wd:Q2164067. } #System
    UNION
    { ?item wdt:P31 wd:Q71631512. } #supplement
    UNION
    { ?item wdt:P31 wd:Q4418079. } #setting
    UNION
    { ?item wdt:P31 wd:Q4686479. } #adventure, campaign
  }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
  OPTIONAL { ?item wdt:P123 ?publisher.}
}
ORDER BY (?itemLabel)

Try it!

  1. Enregistrer au format csv.

Éditer le fichier csv

  1. Ouvrir le fichier csv dans LibreOffice Calc (le meilleur éditeur libre de fichier csv).
  2. Modifier les éléments désirés en ajoutant les Label dans la colonne Publisher Label. Bénéficier de la saisie semi-automatique si l’élément existe déjà.
    Si l’élément n’existe pas, le créer dans Wikidata et le rajouter dans la colonne Q ET la colonne Label.
  3. Trier la colonne Label. Copier-coller les Q manquants très visibles dans les trous de la colonne.
  4. Supprimer les colonnes Label.
  5. Sauvegarder les deux colonnes restantes au format csv.
  6. Déboublonner le fichier csv. J’ai testé 3 méthodes, la meilleure est Notepad++ avec l’extention TextFX. Voir annexe.
  7. Sur la première ligne, remplacer item, publisher par qid,P123. Le fichier devrait ressembler à ceci :
qid,P123
Q270118,Q2832284
Q2703461,Q762106
Q27102849,Q28466028
Q2720180,Q1433597
Q2755273,Q1543201

Verser dans Wikidata avec QuickStatements

  1. Aller sur QuickStatements, connectez-vous avec votre identifiant Wikimedia. Nouveau lot > Collez le contenu du fichier csv dans la case puis cliquez sur le bouton Importer les commandes CSV.
  2. Et voilà!

Annexe : comment dédoublonner des fichiers txt, csv,…

Cas: j’ai 1575 lignes à dédoublonner dans un fichiers csv. Trois méthodes sont testées :

A. Dans Calc : Bien.

  1. Sélectionner LES DEUX colonnes > Données > Plus de filtres > Filtre Standard > Nom du champs = “Aucun” + Options = “Sans doublons” > OK.
  2. Copier-coller le résultat dans Notepad++. Remplacer (mode étendu) les \t par des virgules ,

B. Dans Notepad++, par expression régulière : Pas robuste.

  1. Remplacer (mode expression régulière) ^(.*?)$\s+?^(?=.*^\1$) par rien. Cocher .match newlines
  2. Échec : ne fonctionne que pour 300-400 lignes max.

C. Dans Notepad++, avec extension TextFX : Bien.

  1. Installer TextFX : Plugins > Plugin Manager > Show Plugin Manager > Available tab > TextFX > Install
  2. Sélectionner tout. TextFX > TextFX Tools > Activer : +Sort Ascending et +Sort output only…
  3. Puis TextFX > TextFX Tools > Sort lines cases Sensitives (at colums)

Résultats A et C : 901 lignes restantes.

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.