Catégorie : Tutoriels
Pyllica: un outil de récupération automatisée de données sur gallica.bnf.fr
Installation et usage
Pyllica est un programme en Python 3, qui fait appel à l’extension beautiful soup (plus d’informations par ici). Pour l’utiliser, vous devez avoir une version de Python à jour (cf. les recommandations officielles pour une installation sous Windows, Mac et Linux) et télécharger Beautiful Soup (sous Mac, avec la commande “$ pip3 install beautifulsoup4” dans le Terminal – sous Windows, c’est un peu plus complexe).
Pyllica se compose de quatre outils:
- Pyllicalabs permet d’extraire les fichiers en texte brut de numéros de périodiques qui ont été océrisés, selon une fourchette définie par l’utilisateur;
- Pyllicalabspdf permet d’extraire les pdf de numéros de périodiques;
- Pyllicalabsjpg permet d’extraire les pages d’un document sous forme de fichier jpg, tif ou png, avec une qualité définie par l’utilisateur;
- Pyllicalabsjpgpress permet de faire la même opération pour des numéros de périodiques.
Pour chacun des outils, il y a deux fichiers: un fichier contenant le programme, et un fichier d’instruction (commençant par le mot « action »). Pour utiliser un outil, il suffit de placer les deux fichiers dans un nouveau dossier et de modifier le fichier d’instruction en fonction des livres ou périodiques que l’on veut télécharger.
Sous Mac, s’il y a des problèmes d’encodage du texte au moment de l’utilisation des outils, il ne faut pas cliquer sur le fichier d’instruction pour le lancer mais démarrer IDLE depuis le Terminal ($ idle3) et faire Fichier > Ouvrir pour lancer l’action.
Pyllicalabs
On place les deux fichiers (pyllicalabs.py et actionpyllicalabs.py) dans un dossier, et on modifie le contenu du fichier actionpyllicalabs en fonction des numéros du périodique qu’on veut télécharger:
textpress(url="http://gallicalabs.bnf.fr/ark:/12148/cb32817642h/date",
title="lemoderniste",
year=1889,
month=5,
day=25,
item=52,
rate=7,
lastpage=11)
La fonction comprend les commandes suivantes :
url: on indique l’adresse sur Gallica de la page du périodique indiquant toutes les années disponibles (cette adresse doit finir par “date”).
title: on choisit un titre qui sera indiqué dans le nom du fichier.
year, month, day: la date du premier numéro qu’on souhaite télécharger.
item: le nombre de fichiers qu’on veut récupérer.
rate: le nombre de jours entre chaque numéro – cela fonctionne bien pour les quotidiens (on indique 1), les hebdomadaires (on indique 7); en cas de problème, on peut inscrire 1 et préciser dans “item” le nombre total de jours dans la période qu’on veut télécharger (par exemple, pour un an on inscrira 365), cela permettra d’être certain de télécharger tous les numéros, même si cela produit des erreurs (les dates sans numéros).
lastpage: avec la nouvelle version de Gallica, la numérotation des pages n’est pas importante, on peut laisser cet élément tel quel.
Une fois le fichier action modifié, on l’ouvre avec Python et on lance le script (sous Mac, Run > Run module).
La dernière version intègre des règles en cas d’exception: si l’outil ne trouve pas un des numéros (par exemple, si le périodique n’est pas disponible pour une des dates), un message avertit du problème mais le téléchargement des numéros suivants continue.
Attention: en cas de numérisations multiples d’un même numéro (même date, dans le cas par exemple d’éditions du matin et du soir d’un journal), pyllica ne télécharge aucun numéro, il faut le faire manuellement.
Pyllicalabspdf
Comme l’outil précédent, il permet de récupérer les fichiers pdf de périodiques; la méthode d’utilisation est la même.
Pyllicalabsjpg
La nouvelle version de Gallica utilise la norme IIIF, permettant de récupérer les images en haute résolution. Pour l’utiliser avec un document unique, il suffit de récupérer l’identifiant du document dans l’adresse de gallicalabs (ce qui suit ark:), par exemple: /12148/btv1b86000454/
On insère ces chiffres (en conservant bien les slash) dans le fichier actionpyllicalabsjpg.py au niveau de la variable “identifier”, on choisit un titre (“title”) pour les fichiers de sortie et on sélectionne la première et la dernière page (attention, il faut choisir en fonction des numéros des vues et non de la pagination réelle du document). On place ce fichier et le fichier pyllicalabs3jpg.py dans le dossier de destination et on le lance avec Python.
On peut changer la résolution souhaitée en modifiant la fin de l’url dans le fichier pyllicalabsjpg.py (par exemple, full/5000/0/native.jpg au lieu de full/3000/0/native.png). Pour avoir la qualité maximale disponible, indiquer “full” au lieu d’un chiffre (par exemple: full/full/0/native.jpg). On peut aussi récupérer les images au format png ou tif en remplaçant la mention « jpg » par « png » ou « tif » à la fin de l’adresse et du format de fichier créé:
for page in listpage:
jpgfile = title + "_" + str(page) + ".png"
url = 'http://gallicalabs.bnf.fr/iiif/ark:' + identifier + '/f' + str(page) + '/full/3000/0/native.png'
urllib.request.urlretrieve(url, jpgfile)
Pyllicalabsjpgpress
Pour récupérer les images d’une série de numéros de périodiques, on part de l’adresse du périodique avec les dates:http://gallicalabs.bnf.fr/ark:/12148/cb34427442r/date et on supprime la fin de l’adresse “/date” pour l’intégrer dans le fichier actionpyllicalabsjpgpress.py dans la variable « url ».
Il faut ici tenir compte de la pagination; on peut gonfler le nombre de pages au cas ou certains documents comportent plus de pages, les erreurs s’afficheront dans le shell avant que le programme ne continue avec le numéro suivant du périodique. Par exemple, pour un journal de 8 pages, il vaut mieux indiquer 12 pages pour être certain que des numéros plus longs seront entièrement téléchargés.
N’hésitez pas à me contacter en cas de problèmes d’utilisation.
Analyse de réseaux de revues avec R
À partir des extractions des données concernant les collaborateurs des revues sur la base PRELIA, on peut étudier des phénomènes de sociabilité littéraire et de réseaux d’artistes et d’écrivains. Daphné de Marneffe insiste sur le « rôle de “nœud de sociabilité littéraire” des revues », qui contribuent à la formation d’un réseau à deux dimensions : « la dimension humaine (une question de relation entre groupes : le “réseau social”) et la dimension textuelle (une question de citation, de renvoi textuel : le “réseau intertextuel”). »[1] Certains outils informatiques permettent précisément, à partir de la base de données PRELIA, de proposer des analyses prenant en compte l’ensemble des collaborateurs de ces revues, selon leur implication plus ou moins grande (mesurée par leur nombre de contributions) à tel ou tel titre.
À partir d’une extraction des noms, fonctions (auteur, illustrateur, etc.) et nombre de participations aux revues des artistes et écrivains de la base PRELIA, on peut construire avec le logiciel de statistique R (http://www.r-project.org/) des graphes mettant en relief les relations entre les revues et entre leurs auteurs. On peut ainsi représenter les revues et les auteurs comme des points dont la taille est proportionnelle à l’importance du nombre de collaborations. La position de ces points est déterminée par un algorithme de dessin basé sur les forces[2] qui permet de rapprocher les points les plus liés entre eux et d’éloigner les points qui ne partagent pas de connexion, ce qui permet de repérer rapidement des regroupements d’auteurs dont le rapprochement doit être analysé. Un second algorithme de détection de communautés permet de repérer les revues et les auteurs formant des réseaux en appliquant une couleur identique aux points dont les relations sont les plus denses[3] :
En se concentrant sur certaines zones du graphe, on peut repérer des groupes de points formant des noyaux de collaborateurs qui participent aux mêmes revues. Entre des revues comme L’Ermitage, le Mercure de France, Vers et Prose, Le Livre d’art, L’Idée libre, La Plume, plusieurs communautés d’auteurs se dégagent : en rouge Jarry, Paul Fort, Klingsor, Pilon… ; en bleu Symons, Wilde, Mockel, Schwob, Paul Adam… ; en violet Mallarmé, Raynaud, Le Cardonnel ; en mauve, Henri Albert, Rambosson, Dumur, Gourmont… :
Différentes explications peuvent ensuite être données à ces regroupements (phénomènes générationnels, stylistiques, génériques…), l’analyse statistique des communautés venant confirmer ou affiner les analyses sociologiques, d’histoire littéraire, etc. Ces outils permettent de donner une image plus fine des personnels des revues, en nous forçant à observer la présence et l’importance de certains noms oubliés ou mal connus.
On peut imaginer des outils pour mettre en lumière des relations sinon difficilement visibles :
- l’intégration d’un certain nombre de variables (tirage, etc.) dans le calcul de l’importance d’une revue ;
- des graphes dynamiques permettant de montrer des évolutions dans le temps ;
- des comparaisons avec d’autres mises en réseau : correspondances, liens maîtres-élèves, scolarisation, salons… ;
- une visualisation géographique de ces relations, etc.
Ces visualisations permettent d’analyse les réseaux sociaux des revues ; pour ce qui est des réseaux intertextuels, des outils de numérisation et de lexicométrie peuvent faire apparaître d’autres phénomènes.
[1] Daphné de Marneffe, « Le réseau des petites revues littéraires belges, modernistes et d’avant-garde, du début des années 1920 : construction d’un modèle et proposition de schématisation », COnTEXTES [En ligne], 4 | 2008, mis en ligne le 23 octobre 2008, consulté le 27 octobre 2013. URL : http://contextes.revues.org/3493
[2] ), Thomas M. J. Fruchterman et Edward M. Reingold, « Graph drawing by force-directed placement », Software : Practice and Experience, 1 novembre 1991, vol. 21, no 11, pp. 1129‑1164.
[3] Aaron Clauset, M. E. J. Newman et Cristopher Moore, « Finding community structure in very large networks », Physical Review E, décembre 2004, vol. 70, no 6, 066111. URL : http://arxiv.org/abs/cond-mat/0408187
Outils de visualisation
La base de données des Petites REvues de LIttérature et d’Art peut désormais être interrogée avec des outils de visualisation dynamique. Les graphiques sont créés à partir des requêtes de l’utilisateur, en temps réel; la précision des réponses s’améliorera au fur et à mesure que les informations dans la base augmenteront. On trouvera pour l’instant cinq méthodes d’interrogation : articles par mois, participation aux revues (pourcentage), auteurs de la revue (pourcentage), rapport textes / images et évolution du rapport textes / images. Tous ces outils sont encore au stade expérimental, n’hésitez pas à signaler des problèmes d’utilisation. Les aspects techniques sont exposés à la fin de l’article.
Articles par mois
Cliquez ici pour accéder à l’outil
Cet outil permet d’évaluer l’évolution dans le temps des participations d’un auteur aux revues de la base, en présentant un graphique de ses publications mensuelles par revues. Entrez le début du nom d’un auteur, cliquez sur le dictionnaire pour faire apparaître un menu déroulant, et sélectionnez l’entrée correspondante:
Puis appuyez sur le bouton “Rechercher” pour afficher un graphique présentant le nombre de contributions de l’auteur sélectionné par mois à différentes revues. L’axe vertical indique le nombre d’articles, l’axe horizontal les mois de publication (au format année/mois, en omettant les mois sans publication). En cas d’utilisation de pseudonymes, seule une requête passant par l’entrée principale renvoie l’ensemble des résultats (par exemple, la requête “Gourmont, Remy de” renvoie aussi les articles écrits sous le pseudonyme de “Bury, R. de”, mais la requête “Bury, R. de” ne renvoie que les articles écrits sous ce nom). Voici le résultat pour Jean Moréas:
Le tableau des données est intégré sous le graphique.
Participation aux revues (pourcentage)
Cliquez ici pour accéder à l’outil
On peut également mesurer d’un point de vue synthétique l’implication d’un auteur à plusieurs revues en visualisant le nombre total d’articles qu’il a donnés pour chacune d’entre elles. Sélectionnez un auteur de la même manière que pour l’outil précédent pour afficher un graphique présentant l’ensemble de ses contributions dans les revues de la base, et le tableau des données. Le nombre et le pourcentage d’articles publiés par revue s’affichent en passant le curseur au-dessus du graphique.Voici le résultat pour Maeterlinck:
Auteurs de la revue (pourcentage)
Cliquez ici pour accéder à l’outil
C’est l’outil le plus complexe; il permet de visualiser l’importance des participations de tous les collaborateurs d’une revue, soit sur l’ensemble des numéros répertoriées dans la base, soit sur une période précise déterminée par l’utilisateur. Sélectionnez une revue dans le menu déroulant pour afficher un graphique présentant l’ensemble des auteurs ayant collaboré à cette revue en fonction du nombre d’articles publiés. Exemple pour Lutèce:
On peut faire défiler l’ensemble des noms d’auteurs en cliquant sur les flèches en bas de la légende. Les noms des auteurs, le nombre et le pourcentage d’articles publiés dans la revue s’affichent en passant le curseur au-dessus du graphique.
Vous disposez de plus d’une frise temporelle:
Par défaut, le graphique présente les auteurs pour l’ensemble des données de la base, mais vous pouvez restreindre la période affichée en faisant glisser les curseurs de la frise temporelle, pour voir l’évolution des collaborateurs de la revue. Voici par exemple les données pour Lutèce entre janvier et juin 1883:
Rapport textes / images
Cliquez ici pour accéder à l’outil
La base de données précise le type de document (texte ou document graphique), ce qui permet de représenter graphiquement la place des images dans ces revues. En comparant la part des images par rapport au nombre de textes dans plusieurs revues, on peut faire apparaître des disparités (même si pour l’instant ces graphiques ne permettent pas de mesurer le nombre de pages de textes, uniquement le nombre d’articles). On peut ainsi comparer la proportion d’images (en rouge) par rapport aux textes (en bleu) dans La Plume (Léon Deschamps, créée en 1889, à gauche) et L’Almanach du Bibliophile (Edouard Pelletan, 1898, à droite) :
Évolution du rapport textes / images
Cliquez ici pour accéder à l’outil
En visualisant l’évolution du nombre de textes et d’images par mois, on peut observer par exemple la place croissante des illustrations (en bleu) dans une revue comme La Plume :
La structuration de la base de données permet d’autres types d’extraction ; on peut imaginer par exemple des visualisations de la place de certains genres au sein des revues, des études portant sur l’origine de leurs collaborateurs, etc.
Aspects techniques
Les outils de visualisation fonctionnent avec MySQL, PHP, JSON, Ajax et Google Chart Tools.
Les données de la base PRELIA sont stockées sous formes de tables MySQL structurées par le SIGB libre PMB. Les données ne sont pas toutes indexées, ce qui signifie qu’il faut faire des requêtes complexes pour obtenir certains résultats. Par exemple, lorsqu’un visiteur sélectionne un auteur avec l’outil “Participation aux revues”, une requête SQL est envoyée par le biais d’une page PHP à la base de données MySQL avec l’identifiant de l’auteur sélectionné. La requête pour obtenir la liste des dates et des périodiques de tous les articles de Jean Moréas (identifiant: 336) s’écrit ainsi de cette manière:
SELECT bulletins.date_date, notices.tit1 FROM authors INNER JOIN responsability ON authors.author_id = responsability.responsability_author INNER JOIN analysis ON responsability.responsability_notice = analysis.analysis_notice INNER JOIN bulletins ON analysis.analysis_bulletin = bulletins.bulletin_id INNER JOIN notices ON bulletins.bulletin_notice = notices.notice_id WHERE authors.author_id='"336"' ORDER BY notices.tit1 ASC
Les informations sont structurées dans un tableau au format JSON qui est renvoyé à la page de requête pour passer par plusieurs fonctions Javascript: réencodage pour le transformer en DataTable lisible par Google Chart, manipulations diverses (pivotage des données, agrégation des données…) et enfin génération de la visualisation.