PDF, Gallica, Python et ChatGPT (#51)

🤖 Are we under their control, or are they under our control, or what? 🤖

On parle beaucoup d’intelligence artificielle (IA), mais, tout compte fait, c’est une expression récente déjà identifiée dans les milieux spécialistes des nouvelles technologies. L’intelligence est à comprendre au sens qui se rapproche le plus de son étymologie : « la capacité à faire des liens ». Cette suite de liens est bénéfique pour apporter des résultats, pas pour les apprécier ni avoir une conscience extra-humaine, en tout cas pour l’instant. D’ailleurs, c’est à l’occasion de l’une de mes premières expériences professionnelles que j’ai découverte l’art numérique et son histoire : récente, certes, mais très riche. Difficile de classer en sous-catégories les œuvres d’art numérique, mais on peut au moins distinguer la littérature numérique, produite sur des programmes et parfois éditées en CD-Rom. Je ne citerai que l’exemple de Machines à écrire, dont la filiation à la poésie générative de Raymond Queneau est plus qu’explicite (Cent mille milliards de poèmes). Avant de parler d’IA, il y a beaucoup à creuser dans la littérature numérique produite en France. Dans un mémoire traitant de la poésie numérique de 2017, Marc Morereau affirme, page 30, que « La France est un pays d’avant-garde dans la poésie numérique, précurseurs dans de nombreux domaines, elle développe même des intentionnalités propres, se dote d’une esthétique et contribue à diffuser cette forme poétique et à expérimenter de nouvelles voies. » (HAL). Moi-même, je n’ai pas fini de découvrir de nombreuses richesses poétiques encore semi-visibles.

En écrivant ce billet, je repense aux paroles de la chanson du groupe Newcleus intitulé Computer Age (Push the Button). Rythme entraînant, chants robotisés, paroles très adéquates avec le propos. Les ordinateurs nous aident à faire un travail que le cerveau ne pourrait accomplir qu’au terme de tout une vie. La puissance de calcul permet d’obtenir des résultats de recherche encore plus fournis car les cerveaux humains ont discipliné la machine en ce sens. A chaque outil créé et exploité par l’humain, il y a, au bout de la chaîne, une influence réciproque dans les méthodes de travail. D’ailleurs, pour plus de détails, une histoire synthétique et une présentation de ces enjeux est disponible dans l’édito d’Hervé Christofol et Chantal Pacteau : Intelligence artificielle : révolution ou outil ? (VRS n°437, juin 2024).

Je n’invente rien en écrivant tout ceci, mais c’est une bonne entrée en matière pour parler de mon expérience, je trouve. La musique de Newcleus, au-delà d’avoir contribué grandement aux prémices du hip-hop électronique, questionne déjà cette dimension propre à l’ordinateur comme ami ou ennemi. D’autres écrivains ou écrivaines dystopiques écrivaient déjà dessus, mais c’est moins dansant. D’ailleurs, le morceau ci-dessous, le premier du premier album, Jam on Revenge (Sunneyview, 1984),  ne rend pas justice à la superbe pochette afro-futuriste illustrant. Elle est visible ici.

Computer age is now
Everyone must have a machine
They say it’s gonna make life easier

À titre personnel, j’ai eu la chance d’être formé, au moins pour les fondamentaux, à des logiciels de traitement de données utilisant l’intelligence artificielle. Cet apprentissage passe par la compréhension globale des mathématiques ainsi que d’une maîtrise empirique du code informatique. Sans être nécessairement ingénieur informaticien, le langage Python permet de réaliser des algorithmes ou des programmes facilement, après être passé par un pseudo-code grossier pour progresser. Si l’on maîtrise Python, on peut aussi comprendre la logique d’un langage balisé, comme le HTML/CSS ou le langage XML.
 
Entre le moment où l’on se saisit de la technologie et celui où on requiert son aide, de nombreux changements peuvent avoir lieu : une mise à jour peut faciliter le travail ou rendre le rendre obsolète. Si je continue à parler de moi, ce que je vais faire, j’avais élaboré en 2019, grâce à l’équipe de la Plateforme géomatique de l’EHESS et dans le cadre de ma soutenance de mémoire, une cartographie par points cliquables permettant d’accéder à environ 4 500 photographies de Paris. Pour visualiser la proportion de photographies prises dans tel ou tel quartier de la capitale, j’avais aussi mis au point une carte des chaleurs (heatmap). Cela rend les résultats immédiatement compréhensibles et étaye le propos soutenu dans la rédaction (deux tendances : le « Vieux Paris » et les grandes constructions le long du boulevard périphérique qui ceinture la ville). C’est à travers cette expérience que j’ai pu construire moi-même ces pages HTML pour faire dialoguer différents contenus.
 
En octobre 2020, un mois après avoir créé ce blog, j’avais réalisé quelques travaux personnels similaires, toujours mis à jour. Le premier est une copie HTML de mon compte Instagram, accessible à cette adresse et qui avait fait l’objet d’un article dédié. Après plusieurs extractions des images du compte Instagram et de leurs métadonnées embarquées (EXIF), il était possible de reconstitué un ersatz d’interface avec les miniatures, les images et leurs informations.
 
Idem, j’avais repris un code HTML avec l’accord de la personne pour créer le site aktuel pour afficher ma collection de vinyles à partir des informations exportées de mon compte Discogs. Un jeu d’enfant ? À l’époque, non. Maintenant, oui ! Cela est permis par une montée en compétences face à des problèmes que je me pose tout seul, certes. Je vois qu’aujourd’hui, il est plus facile de paramétrer ses pages HTML grâce à une documentation abondante et une communauté toujours grandissante de personnes curieuses, initialement non formées à l’informatique.
 
Python as three-headed dragon, 359r, vers 1760, papier, 23,3 × 18,3 cm, Alchemical and Rosicrucian Compendium. General Collection, Beinecke Rare Book and Manuscript Library, Yale University, New Haven (Orbis 1108541).
 
Sur ce blog, j’ai créé une catégorie « Numérique » pour recenser les articles qui traitent ce sujet. Je m’aperçois d’ailleurs qu’il y en a assez peu. Cela s’explique par le fait que mon travail consiste à m’y intéresser à plein temps et que je préfère écrire sur de la musique ou de l’histoire. Le dernier article date de février 2023, l’intelligence artificielle me donne l’occasion d’avoir une fenêtre de tir pour enrichir les contenus de ce pan « numérique ».
 
 
Tout ça, c’est pour le HTML et l’édition de pages web. Entre temps, certaines de mes missions professionnelles m’ont amenées à travailler à nouveau sur Python. Je fais du code basique, même pour le HTML. Si un informaticien ou une informaticienne regarde le code source, il y a de quoi saigner des yeux. Pour le Python, c’est encore pire. Quand on apprend sur le tas, on réutilise des morceaux de code égrainés sur le web pour arriver à ses fins. C’est ce que j’appelle le « code Frankenstein » : il n’est pas beau, mais il a été créé par moi et, surtout, il fonctionne. L’image ci-dessus illustre bien la plupart de mes codes.
 
J’en viens au sujet initial. Que faire lorsque l’on sèche sur un code Python défectueux ? On regarde sur les forums, sur Stackoverflow, pour voir si quelqu’un a déjà été confronté au même souci, il y a 10 jours ou il y a 10 ans. Je connaissais ChatGPT, mais je ne l’avais pas encore utilisé pour parfaire un code Python. Il y a quelques mois, j’ai pu en tirer quelques bénéfices.
 
Par exemple, en manipulation redondante à effectuer, je voulais que les métadonnées embarquées, sujet trop souvent mis sous le tapis, de chaque fichier PDF présent dans un dossier soit modifié, avec un titre différent pour chaque document. La question posée est simple :
 
Je souhaite modifier les métadonnées embarquées « titre » de plusieurs fichiers PDF à l’aide d’un script Python
 
Après quelques échanges avec ChatGPT, je suis arrivé à mes fins pour modifier les titres de centaines de PDF afin de les structurer de la meilleure des manières. J’en ai profité pour paramétrer le script et faire en sorte de modifier, par la même occasion, l’auteur de chaque document. Un défi très spécial, mais résolu grâce à ChatGPT avec une facilité déconcertante. Je crois que ce qui fonctionne le mieux, c’est de choisir un format ou un langage dont la compréhension est la mieux partagée entre l’humain et la machine : un tableur au format .csv, un code en Python, etc. Ce sont des choses que je rabâche au travail, rien d’inédit.
 
Quoiqu’il en soit, j’ai pu saisir l’aide apportée par l’intelligence artificielle lorsque le besoin est correctement décrit. J’ai aussi pu découvrir une autre IA, Claude, qui maîtrise également très bien Python. Elles sont loin, les heures passées à tout coder soit-même avant que l’IA ne facilite le travail. Lorsque l’on découvre un outil performant, on veut l’exploiter pour un oui ou pour un non. Dans mon cas, j’aime adapter certains outils à mes besoins ou visualiser des données qui, initialement, demeurent assez peu lisibles. Spoil : ce sera l’objet de prochains articles dans cette fameuse catégorie « Numérique« .

Voici donc à quoi ressemble le script permettant d’éditer les métadonnées « Titre » et « Auteur » de chaque fichier PDF présents dans un même dossier. Le nombre de fichiers doit correspondre avec le nombre de valeurs saisies dans le code pour que l’exécution soit réalisée sans erreur.

 

 

 

 

Même si ça prend du temps, il m’arrive d’écrire sur ce blog des articles à portée historique. Par ces termes, j’entends : « avec un minimum de recherche, mais sans méthode aussi rigoureuse que dans le cadre d’une rédaction universitaire ». Les sources les plus facilement mobilisables se trouvent sur Gallica, la bibliothèque numérique de la Bibliothèque nationale de France, ainsi que Retronews, pour cibler, plus particulièrement, la presse française des XIX et XXe siècles.
 
La découverte de contenus sur ces plateformes se fait par leur interface et leur masque de recherche. Parmi les résultats, il arrive que je sois intéressé par des images présentes sur de nombreuses pages, ou bien des articles complets de presse. Sur l’interface, il n’est possible que de télécharger les numérisations à la pièce, en JPG. Les fichiers bruts des numérisations sont accessibles par le biais de l’extension Firefox ou Chrome IIIF Download, toujours à la pièce (2017). Depuis plusieurs années, des solutions existent via Python, je suis loin de réinventer l’eau chaude (2016, 2017). Dans mon cas, un ancien collègue m’avait partagé un script à exécuter en interface système (Shell). Il m’a suggéré d’utiliser MobaXterm pour réaliser les requêtes. À l’époque, ça devait être il y a 3 ans, je n’en avais pas encore besoin et surtout, je n’aime pas l’environnement, peu intuitif pour les nuls.
 
Après cette expérience ChatGPT – Python concluante, j’ai demandé à l’IA de me convertir le script vers un langage Python avec les mêmes attributs. La machine s’est chargée de réaliser cette basse besogne. Tout fonctionne. J’utilise Python dans Jupyter Notebook pour garder trace de mes avancées et les documenter, le cas échéant. D’ailleurs, ces scripts seront véritablement bientôt déposés dans une forge logicielle professionnelle. En attendant, Jupyter Notebook permet leur export en fichier HTML que je propose ci-dessus et ci-dessous, facile. Après quelques échanges avec ChatGPT, je fais en sorte d’affiner l’outil pour dépasser les fonctionnalités issues du Shell initial. De manière très ludique, pour ne pas dire bête et méchante, j’ai intégré des input pour demander à l’utilisateur ou l’utilisatrice le détail de sa requête. Pour un script préconfiguré, ChatGPT peut aussi faire le travail pour éviter tout cela !

  • ID ARK saisi : il s’agit de l’identifiant pérenne attribué au document Gallica. Ici, bpt6k5819033c
  • Format de sortie choisi : il y a deux choix possibles : le format tif, brut et originel lors de la numérisation, ou jpg, format compressé adapté à une lecture sur navigateur.
  • Nom du dossier créé : les fichiers seront automatiquement enregistrés dans un dossier dont le titre correspond à l’identifiant ark saisie lors de la première étape. Ici, le dossier sera intitulé bpt6k5819033c
  • Choix de téléchargement : également deux choix possibles, page ou intervalle. S’il s’agit d’une seule page, le téléchargement se lance. Si un intervalle de pages doit être téléchargé, alors on obtient la demande suivante :
  • Numéro de la première page saisi : pour notre exemple, je souhaite commencer le téléchargement à partir de la 8e numérisation, il faut donc vérifier sur l’interface si cela correspond à ma requête. Ici, la 8e numérisation se trouve à cette adresse.
  • Numéro de la dernière page saisi : ce numéro clôt l’intervalle. Je ne souhaite que 4 pages dans mon exemple, j’arrête donc le téléchargement à la 12e numérisation incluse.

Tadaa! La magie opère. J’exagère, rien de sorcier, mais ça fait toujours plaisir quand un script fonctionne sans encombre. C’est un usage parmi tant d’autres. ChatGPT a été bien utile pour ne pas avoir à réalisé soit-même le code, aussi simple soit-il. Néanmoins, passée cette étape « découverte », il me semble pertinent de continuer à explorer ces usages car l’IA raccourcit le temps entre l’idée humaine, la conception de sa mise en œuvre et sa réalisation.

« I’m no longer in controlI can’t program my machineNow it wants to take my soulStop it or it will proceed! »

Je reprends la suite des paroles de la chanson de Newcleus, plus dystopique, cette fois. Sans être happé par l’IA, nous devons en tirer les bénéfices tout en essayant de prendre du recul par rapport à tout cela. Nos habitudes de travail et de consommation en seront sûrement changées, tant dans la sphère publique que dans la sphère privée. Il y a quelques mois, j’avais suivi une intervention du professeur de l’université de Technologie de Compiègne Bruno Bachimont. À la fois informaticien et philosophe, sa présentation était résumée sous le titre « L’intelligence a toujours été artificielle » (École polytechnique fédérale de Lausanne, 11 avril 2024). Je retiens qu’il avait évoqué le fait que nous étions, avec cet outil, en train de jouer comme des enfants dans un bac à sable. Cela signifie que l’IA sera probablement encore plus puissante dans 5 ou 10 ans. Elle balayera sans doute ces petits scripts, pratiques, mais finalement assez peu novateurs. En tout cas, ils permettent à la personne qui les créé (moi) de se saisir de tous ces enjeux.

 

Alexandre Wauthier