ChatGPT pour aider à coder un projet de numérisation sur le jeu de rôle (1/)

Je me considère comme un « programmeur du dimanche ». J’ai appris Turbo Pascal au lycée au siècle passé. Récemment, j’ai travaillé sur de petits projets de programmation en R et en dot. Depuis un certain temps, j’ai eu l’ambition de numériser et d’analyser des textes en utilisant Python, mais j’ai été bloqué par un manque d’expertise personnelle et de soutien externe. C’est alors que ChatGPT est survenue…

Capture d’écran Spyder

Avantages de ChatGPT pour les chercheurs non-programmeurs

  • Disponible gratuitement depuis novembre 2022, cet outil requiert seulement un numéro de téléphone portable et un compte Gmail pour y accéder.
  • Il est suffisamment performant pour coder en Python, un langage adapté à la numérisation et la recherche de texte, même si vous n’avez aucune connaissance dans ce langage.
  • Il permet également de nombreuses interactions fluides pour clarifier vos besoins et il vous guide efficacement pour déboguer votre code en identifiant les erreurs.
  • De plus, cet outil est corvéable à merci, à tout moment de la journée ou de la nuit.

Inconvénients

  • Il est important d’avoir une compréhension minimale des concepts de base tels que les langages de programmation, le code informatique (variables, boucles, etc.), les formats de fichiers et le système d’exploitation pour tirer le meilleur parti de l’utilisation de ChatGPT. Si vous ne comprenez pas certains termes ou concepts, n’hésitez pas à demander des explications à ChatGPT pour apprendre.
  • Il peut arriver que ChatGPT propose du code pour des versions obsolètes de Python. Dans ce cas, reformulez votre demande et demandez-lui d’autres méthodes pour des fonctions plus récentes. Généralement, après environ 6 à 8 interactions, le bon code émerge et vous devez l’assembler vous-même.
  • En ce qui concerne l’utilisation de bouts de code, je considère important de citer mes sources. Dans ce cas de ChatGPT, c’est problématique car les sources qui ont servi à l’entraîner sont invisibilisées. Si vous ne savez pas à qui attribuer le code, vous pouvez au moins mentionner ChatGPT pour le travail accompli (voir billet auquel j’ai participé pour Zotero francophone). Citer ses sources est un aspect éthique important quand on utilise code open-source.

Comment ?

  • Pour commencer à coder en Python, il est recommandé d’installer Anaconda, qui est une plateforme open-source populaire pour la science des données. Vous pouvez télécharger Anaconda depuis le site web officiel et suivre les instructions d’installation.
  • Après l’installation d’Anaconda, vous pouvez utiliser l’IDE (environnement de développement intégré) Spyder pour écrire et exécuter votre code Python. Spyder est inclus dans l’installation d’Anaconda et est généralement prêt à être utilisé.
  • Il est également important d’installer les packages dont vous avez besoin au fur et à mesure que vous en avez besoin. Vous pouvez le faire en utilisant la commande pip dans l’invite de commande (ou terminal si vous utilisez un Mac ou Linux) ou en utilisant l’interface graphique de Anaconda Navigator.
  • Enfin, vous pouvez utiliser ChatGPT sur OpenAI ou Bing+ChatGPT de manière alternée pour obtenir de l’aide supplémentaire sur votre code. À mon niveau, les deux plateformes sont assez similaires en termes de fonctionnalités et de performances.

Objectifs du projet

  • Classer des PDF dans des dossiers.
  • Extraire et retravailler leurs métadonnées en Python et csv.
  • Extraire le texte intégral en Python et autres.
  • Verser les métadonnées et le texte intégral dans une base de données SQlite.
  • Jouer avec la base de données SQlite (aspect développé dans un prochain billet).

Problèmes rencontrés

Avec les fichiers PDFs

  • Dans mon corpus de PDFs, il est très courant de rencontrer des noms de fichiers avec des caractères problématiques. En effet, ils peuvent avoir été nommés à partir d’encodages ou de systèmes d’exploitation très hétérogènes (depuis 2000 environ et de partout sur la planète). Il est recommandé de renommer les fichiers pour une meilleure identification et organisation.
  • Les méthodes de production de PDF peuvent également varier considérablement, ce qui peut rendre difficile leur traitement. Certains fichiers peuvent contenir des images numérisées sans OCR, tandis que d’autres peuvent contenir du texte électronique ou avoir déjà été soumis à une reconnaissance optique de caractères (OCR). Il est important de prendre en compte ces différences lors de la manipulation des fichiers pour garantir des résultats précis.
  • Il peut également arriver que certains fichiers PDF soient protégés par des verrous électroniques, ce qui empêche toute modification ou manipulation. Dans ce cas, vous pouvez essayer de trouver des outils pour supprimer les verrous électroniques, ou demander l’autorisation de l’auteur ou du propriétaire des fichiers.
  • Enfin, certains fichiers PDF peuvent être bugués ou corrompus, ce qui peut causer des problèmes lors de leur manipulation. Il est recommandé de tester les fichiers pour détecter les erreurs et les problèmes, et de prendre les mesures nécessaires pour résoudre ces problèmes.
  • Rajouter des lignes de codes pour « tester » les PDFs et les mettre de côté en cas de bogue a constitué une partie non négligeable et frustrante du codage informatique.

Avec Python

  • Je ne sais toujours pas…
    • Comment fonctionnent les environnements, kernels, etc. (voir XKCD)
    • Comment mettre à jour Python et le reste.
    • Si tout tournera bien et identiquement dans 5 ou 10 ans.
    • Comment lancer Adobe Acrobat sur des fichiers PDF depuis Python (du coup, j’ai abandonné pour le mieux et ça m’a fait simplifier le flux de travail ainsi qu’apprendre à utiliser pyTesseract).

Structure des dossiers et fichiers

  • Yragatheque
    • A
      • Apocalypse World
        • Apocalypse World 1st ed
          • Apocalypse World 1st ed.pdf
        • Apocalypse World 2nd ed
          • Apocalypse World 2nd ed.pdf
    • B
      • Bunnies & Burrows
        • archives
          • HomebrewB&B.pdf
        • 1st ed
          • B&B1sted.pdf
        • GURPS ed
          • GURPS B&B.pdf
      • _Baguettes & Fromages
        • B&F2e.pdf
    • _working_directory
    • _corrupted

Explications :

  • Les scripts ne traitent que les fichiers PDF.
  • Les fichiers PDF placés dans les répertoires archives sont ignorés (ex: HomebrewB&B.pdf est ignoré).
  • Les fichiers PDF placés dans les répertoires précédés du caractère _ sont ignorés (ex: B&F2e.pdf est ignoré).
  • Yragatheque est le niveau le plus haut. C’est la racine de l’arbre de la collection des PDFs.
  • A, B, C,… sont le 2e niveau. C’est la classification alphabétique de tous les jeux.
  • Apocalypse Word est au 3e niveau. À ce niveau se trouvent les noms des jeux.
  • Tous les niveaux en dessous (4e niveau et au-delà) sont des éditions, ou des gammes, ou des sous-classifications.
  • _working_directory contient les fichiers csv produits, les listes d’autorité et la base de données SQLite.
  • _corrupted contient tous les fichiers PDFs et fichiers associés (yaml, rawtext,…) qui n’ont pu être traité (non ouvert car corrompus, pages internes illisibles,…).

Scripts et flux de numérisation

Les fichiers nommés 00-nom sont des scripts Python.

  • Préparation :
    • PARAMETERS : contient l’adresse du dossier dans lequel se trouve la collection des PDFs.
    • 00-createWorkingDir : création du dossier _working_directory s’il n’existe pas.
    • 01-permission : parcours tous les dossiers et donne les droits en lecture-écriture partout
    • 02-purge : supprime les fichiers .yaml , .rawtext et .ocrtext qui peuvent subsister de traitements précédents
    • 03-rename : normalise les noms de fichiers (supprime les accents, les caractères spéciaux, remplace les espaces par des traits, etc.)
  • Métadonnées :
    • 10-pdf2yaml : créé un fichier .yaml du même nom que le fichiers pdf, au même emplacement, avec comme variables :
      • path = chemin absolu du fichier pdf
      • name = nom du fichier sans .pdf
      • size = poid du pdf en Mb
      • pages = nombre de pages du pdf
      • game = nom du dossier de 3e niveau
      • line = nom des dossiers de 4e niveau et+
    • 11-yaml2csv
      • Écrit un fichier metadata.csv à partir de tous les fichiers .yaml de toute la collection.
      • À cette étape, on peut modifier le fichier metadata.csv pour y ajouter des colonnes (et donc des nouvelles variables yaml), modifier le contenu, etc. Il est recommandé de faire une sauvegarde du fichier modifié (exemple : metadata.backup.csv) pour ne pas écraser toutes ces modifications manuelles.
    • 12-csv2yaml
      • Prend le contenu du fichier metadata.csv et réécrit tous les fichiers .yaml de la collection avec le nouveau contenu.
  • Numérisation :
    • 30-pdf2rawtext
      • Créé un fichier .rawtext de même nom que le pdf au même emplacement, contenant l’extraction du texte si le fichier pdf est au format numérique ou s’il y a une couche d’OCR extractible. Si l’extraction ne fonctionne pas ou pose problème, un fichier est créé tout de même mais vide.
    • 34-OCR-byTesseract
      • Certains fichiers pdf sont récalcitrants à l’extraction mentionnée précédemment. Alors, si le fichier .rawtext est vide ou tout petit, on lance une numérisation via Tesseract qui va créer un fichier .orctext au même endroit que le fichier pdf. C’est un processus assez long.
  • Exportation :
    • 40-yamlntext2sqlite
      • On envoie le fichier .yaml, accompagné du fichier .rawtext ou .ocrtext (le plus gros) correspondant, dans une base de données SQlite nommée TTRPG_LLM.sqlite
    • 50-reportSQlite
      • On créé un rapport de la base de données.
    • 51-searchSQlite
      • On cherche une chaîne de caractère dans la base de données.

Prochainement

  • Les scripts Python sont dans GitHub à https://github.com/pmartinolli/pyTTRPG_LLM 
  • Je travaillerai les données dans SQlite pour repérer quel jeu cite quel jeu et pour tenter de produire des rapports d’observation intéressants.
  • Pour le moment, les colonnes supplémentaires ajoutées dans le fichier metadata.csv et exportées dans les fichiers .yaml ne sont pas intégrées dans la base SQLite.
    • Exemple : edition, langue
    • Il serait intéressant d’incorporer un travail de reconciliation avec Wikidata sur le fichier metadata.csv pour récupérer :
      • pour la colonne game : le QID de la famille de jeu (cela devrait être presque du 100%)
      • pour chaque document moissonné : le QID de l’édition de ce document (plus rare).

La première partie de ce billet a été partiellement retouchée par ChatGPT Mar 23 Version le 21 avril 2023. Billet modifié le 11 mai 2023.

Commentaire de ChatGPT à propos de ce billet :

« C’est génial que vous ayez pu utiliser ChatGPT pour progresser dans votre projet de numérisation et de fouille de texte en Python ! ChatGPT peut être une excellente ressource pour apprendre de nouvelles compétences en programmation ou résoudre des problèmes techniques. En tant que programmeur du dimanche, il est normal de ne pas avoir une expertise approfondie dans tous les aspects de la programmation, mais il est important de continuer à apprendre et à s’améliorer. ChatGPT peut vous aider à combler ces lacunes et à vous permettre de réaliser vos projets de manière autonome. N’hésitez pas à poser des questions et à explorer de nouvelles idées avec ChatGPT pour continuer à progresser dans votre parcours de programmation. »

(sic transit gloria mundi)


OpenEdition vous propose de citer ce billet de la manière suivante :
Pascal Martinolli (21 avril 2023). ChatGPT pour aider à coder un projet de numérisation sur le jeu de rôle (1/). Jeux de rôle sur table. Consulté le 19 juillet 2024 à l’adresse https://doi.org/10.58079/qk5d


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Rechercher dans OpenEdition Search

Vous allez être redirigé vers OpenEdition Search