Skip to content

Extraire des données du catalogue de la BnF : un petit logiciel

30/10/2017

Voir le précédent billet sur l’ouverture du SRU (web service du catalogue de la BnF) la semaine dernière.

Je vous partage à présent un petit programme permettant d’extraire assez facilement des informations du catalogue de la BnF. Je reviendrai ultérieurement sur le making-of de ce programme : pour l’instant c’est juste le mode d’emploi.

Installation du programme ExtractionCatalogueBnF

  1. Récupérer le fichier .ZIP
    (sur Google Drive pour le moment. N’essayez pas d’ouvrir le fichier dans Google Drive : simplement de le télécharger sur votre PC. Le lien sera par aillerus maintenu sur cette page Github)
  2. Dézipper le fichier où vous voulez : il crée un répertoire ExtractionCatalogueBnF, contenant
    • 1 répertoire exe (avec tout le programme)
    • 1 fichier ExtractionCatalogueBnF (qui n’est qu’un raccourci vers l’exécutable situé dans le répertoire exe)

Utilisation du programme

Quand on double-clique sur le fichier ExtractionCatalogueBnF, une fenêtre s’ouvre :

(màj 02/11/2017 : nouvelle mise en forme)

ExtractionCatalogueBnF - formulaire

Dans la moitié gauche : les donnés en entrée, avec au choix :

  • une URL de requête SRU BnF
    sous la forme : http://catalogue.bnf.fr/api/SRU?version=1.2&operation=searchRetrieve&query=bib.title%20all%20%22recherche%20temps%20perdu%20retrouve%22%20and%20bib.author%20all%20%22proust%22&recordSchema=unimarcxchange&maximumRecords=10&startRecord=1
    Logiquement, à partir du formulaire de recherche SRU BnF et de la documentation fournie, vous ne devriez pas avoir trop de mal à lancer une requête et récupérer une première liste de résultats au format XML. C’est après, pour savoir quoi faire de ces résultats, que ça se gâte. D’où ce logiciel.
  • OU un fichier pouvant contenir plusieurs colonnes (séparées par des tabulations), mais dont la première doit être un numéro de notice ou un ARK BnF
    Ce fichier a pu être obtenu comme étant le rapport d’une précédente requête, ou encore via une extraction du triple store de data.bnf.fr, ou par tout autre moyen.
    Attention : pas de guillemets pour encadrer les valeurs de chaque colonne
    Il faut préciser le chemin d’accès complet au fichier (arborescence des répertoires + nom du fichier avec son extension)

    • Si on a donné en entrée un nom de fichier
      il faut préciser quel format en sortie on veut utiliser pour indiquer les éléments d’information à récupérer : si je dis au programme récupérer la zone 100, celle-ci n’est pas la même en Unimarc (zone de données codées) et Intermarc (auteur principal)
      Cette information en revanche n’est pas utile si on copie-colle l’URL d’une requête SRU : l’information est déjà dans l’URL

Dans la moitié droite : les données en sortie

  • La liste des éléments d’information à récupérer :
    • Pour les formats Marc : nom des zones et/ou sous-zones.
      Si vous indiquez une zone, il précisera chaque sous-zone par son dollar. L’ensemble de la zone sera dans une colonne
      Si vous indiquez une sous-zone, le $ ne sera rappelé que dans le nom de la colonne
      Vous pouvez mélanger tout ça et mettre par exemple :
      200;200$a;200$e$i
      Ce qui vous permettra d’avoir une colonne avec l’ensemble de la zone 200 (zone de titre, en Unimarc), mais aussi dans une colonne à part la 200$a, et encore à côté les compléments éventuels du titre
    • Si vous avez choisi Dublin Core : indiquez simplement le nom des balises à récupérer :
      dc:identifier;dc:title;dc:creator
      Si certaines informations sont répétées, elles seront dans la même colonne, séparées par un ~
  • Si vous voulez extraire des informations concernant des notices d’autorité, vous pouvez récupérer le nombre de notices bibliographiques liées à chacune des notices, en cochant la case idoine
    C’est une information qui, dans l’interface web du catalogue, est indiquée en bas à droite des notices d’autorité. Dans ce programme, elle mélange les notices liées comme auteur et comme sujet
  • Le nom du fichier rapport qui contiendra les informations extraites
    Ce fichier sera déposé dans un répertoire reports directement dans le répertoire ExtractionCatalogueBnF

Attention : il faut que les données en entrée soient en cohérence avec les éléments d’information demandées en sortie

  • Si vous avez mis une URL du SRU en entrée, le format XML doit correspondre aux zones que vous demandez en sortie (si vous affichez de l’Unimarc, vous ne pourrez pas demander à récupérer les « dc:title »)
  • Si vous avez indiqué un fichier en sortie et choisi le format Dublin Core, vous ne pouvez pas demander à récupérer le 200$a

Attention

On sait que l’extraction est terminée quand…

Le formulaire se ferme

Limites

Pas de gestion des erreurs

Ce programme est un dérivé de celui que j’utilise depuis pas mal de temps, avec quelques ajustements. Ce qui veut dire que comme je sais comment m’en servir, je n’ai pas envisagé tous les cas problématiques, si on renseigne mal le formulaire.

Par exemple, si dans le champ « Zones » vous terminez par un point-virgule et non pas un élément d’information, ça va sans doute planter

Les diacritiques sautent

<mise à jour>A partir de la version 0.4 (04/11/2017), les accents sont préservés</mise à jour>

L’encodage dans Python, c’est un truc de oufs. Et comme j’avais besoin d’avancer, et que j’en avais marre de tomber de temps en temps sur une notice qui faisait tout planter (parce que s’y planquait un caractère non-conforme UTF-8), j’utilise la librairie Unidecode qui vire tous les diacritiques. Du coup utiliser ces extractions pour faire des belles références bibliographiques, par exemple, est juste impossible.

Pas d’upload pour l’option de fichier en entrée

Je peine à utiliser les fonctions de filedialog dans la librairie Tkinter. De manière générale, j’ai une utilisation laborieuse de cette boîte de dialogue. Donc elle n’est vraiment pas belle — et est tout juste fonctionnelle.

Ce qui me laisse une large marge de progression.

Pas de versioning

<mise à jour>Gestion des mises à jour : désormais (à partir de la version 0.4) un bouton apparaît quand il y a une version plus récente à télécharger</mise à jour>

Comme quoi c’est du bricolage : je ne sais toujours pas utiliser correctement Git ou Github (ou Tortoise ou autre chose). Donc je ne fais pas de versioning propre. Et je n’ai pas non plus de dispositif satisfaisant pour que les versions ultérieures de l’exécutable soient rangées sous une URL stable. Pour ça, je ne désespère pas.

Remarque sur les fichiers en entrée et les rapports

Le programme produit un fichier texte avec des colonnes séparées par des tabulations. Le moyen le plus simple de l’exploiter est encore de l’ouvrir avec le bloc-notes (ou autre éditeur de texte brut — pas Word) et de copier-coller son contenu dans Excel

  • Ctrl+A (sélectionner tout)
  • Ctrl+C (copier)
  • [dans Excel] Ctrl+V (coller

De même, si vous avez un fichier Excel contenant en première colonne des numéros de notice BnF, il vous suffit de copier-coller son contenu dans le bloc-notes pour obtenir un fichier qu’ExtractionCatalogueBnF puisse traiter. Attention : au moment d’enregistrer le fichier, penser à préciser qu’il est encodé en UTF-8 (sinon c’est de l’ANSI par défaut, et ça risque de faire planter le programme).

Rappel

Ce logiciel n’est pas un produit officiel de la BnF. Si j’y travaille (pour mon plus grand bonheur), j’ai développé ce programme hors de mon temps de travail, et à titre « officieux » : aucune pérennité ni efficacité du truc n’est garantie, vous êtes priés d’en faire usage avec prudence (mais tout retour sera la bienvenue). J’ai découvert plein de trucs tout au long de la conception du programme, le code s’en ressent fortement, ce n’est pas quelque chose qu’on pourrait diffuser comme ça à titre institutionnel.

Mais ça me rend déjà des services — donc je me dis que ça peut vous en rendre aussi ! Par ailleurs, ça permet à quiconque le souhaite de développer des améliorations (et il y a de quoi faire !)

Publicités
7 commentaires leave one →
  1. 01/11/2017 23:33

    Bonjour,
    Fidèle de votre carnet, je découvre ici SRU.
    J’ai cru lire que l’on pouvait télécharger la totalité des notices (avec la cote Clément ?).

  2. 02/11/2017 06:15

    @Frédéric Glorieux : « J’ai cru lire » : voulez-vous dire dans ce billet, ou ailleurs ?
    L’ensemble du catalogue est interrogeable via le SRU, mais sans exposition des données d’exemplaire, donc sans cote Clément, désolé. Cela dit, la cote Clément n’est pas récupérable mais est interrogeable (index bib.cote).
    Quant à télécharger tout le catalogue en blog, ce n’est pas la fonction du SRU, et je ne crois pas qu’on le propose sous forme de gros fichier téléchargeable en FTP de manière standard.
    Vous avez essayé de demander via cette page ?

  3. 02/11/2017 13:02

    Bonjour,

    Tout d’abord, pardon pour le premier message qui est parti plus vite que je ne le voulais, sans que j’ai trouvé la manière de le corriger.

    Le SRU de la BNF permettrait « de récupérer l’ensemble des notices »
    http://www.bnf.fr/fr/professionnels/recuperation_donnees_bnf_boite_outils/a.service_SRU.html

    Je précise mon besoin. Je travaille déjà pas mal avec databnf,
    http://obvil.lip6.fr/cataviz/
    J’aimerais avoir une vue plus fine sur les documents, en isolant notamment, la “littérature”.
    Je n’ai pas encore fait l’expérience, mais j’ai cru lire (encore une référence imprécise) que la catégorie Dewey n’est pas homogène sur tout le catalogue.
    On lit, mais je n’ai pas fait l’expérience à une échelle globale sur toutes les notices, que la cotation Clément peut apporter de l’information
    https://histoirebnf.hypotheses.org/746

    Quand on ne précise aucun schéma au SRU, il semble qu’il y ait des informations d’exemplaire (champ tag= »930″, Tolbiac)
    http://catalogue.bnf.fr/api/SRU?version=1.2&operation=searchRetrieve&query=bib.author%20all%20« victor%20hugo »
    cf tad= »930″

    Ceci permettrait aussi de vérifier le différentiel entre databnf et le catalogue dont vous avez déjà parlé dans un billet.

  4. 02/11/2017 13:27

    Pardon, j’avais complètement oublié qu’en Unimarc (le format par défaut), certaines informations d’exemplaire, dont la cote, étaient rapatriées dans la notice bibliographique en zone 930 — vous avez tout à fait raison.
    Le SRU permet de récupérer toutes les notices du catalogue, de même que le site web http://catalogue.bnf.fr/ permet d’accéder à toutes les notices du catalogue. Mais pas sous la forme d’un dump (j’avais cru que vous le sous-entendiez dans votre précédent commentaire).
    Si vous vouliez utiliser le SRU pour ça, il faudrait récupérer les notices par lots, ça risque d’être long et laborieux (même si automatisé)

  5. 02/11/2017 14:33

    Merci pour la nuance entre “récupérer toutes les notices”, et “dump”, en effet, ce qui m’intéresse, c’est tout. Peut-être que l’ouverture du SRU ces derniers jours rendrait plus facile d’obtenir un dump, je vais chercher un contact. Merci.

Trackbacks

  1. Gestion documentaire | Pearltrees
  2. Centre de ressources | Pearltrees

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :