Cas concret d’utilisation d’OpenRefine pour les #archives

Extraire les cotes de tous les IR en XML-EAD pour avoir en résultat un fichier CSV

Pour suivre ce “tuto”, il faut connaitre un minimum OpenRefine. Pour cela, il faut avoir les magnifiques ressources (en français) de Maïwenn Bourdic et de Mathieu Saby

On m’a soufflé dans l’oreille de Twitter une question simple : comment créer un fichier excel avec toutes les cotes de près d’une centaine de fichier XML-EAD. Ma 1er idée était de passer par de la XSLT mais cela peut être un peu barbare, d’où mon idée de passer par OpenRefine (sachant que cet outil est de + en + utilisé (avec également d’autre outils clé-en-main de data wrangling). Après comme à chaque fois, ceci est un exemple, il y a 10 milliards façon de répondre à cette question. Il faut juste trouver la solution qui correspond mieux à vos habitudes/compétences/mood.

  1. Importer plusieurs fichiers XML dans OpenRefine
  2. Préciser l’encodage UTF-8 puis dans la colonne “Parse data as”, ne pas choisir XML comme format de fichier mais Line-based text files
Image for post
Image for post
Image for post
Image for post
Ill.1 : import des fichiers XML ; Ill.2 : configuration par défaut
Image for post
Image for post
Image for post
Image for post
Ill.3 : modifier le style de données à parser ; Ill.4 : résultat après l’import. On retrouve bien les 4 fichiers de départ contenant dans la seconde colonne tout le contenu de l’IR

3. Lorsque vous êtes dans OpenRefine avec vos données (cf ill.4), c’est là que tout commence.

4. La solution la plus simple est d’utiliser le fichier .json qui comprend les 9 opérations que j’ai réalisé pour arriver au résultat final. Pour cela, il suffit de se rendre dans l’onglet “Undo/Redo” puis de choisir “Apply”, et là, il suffit de copier-coller le code dans la fenêtre :

Image for post
Image for post
Image for post
Image for post
vb

Pour copier-coller le code, voir ci-dessous ou le lien direct sur gist

Et vous obtenez au final cette liste de toutes les <unitid> de vos fichiers XML

Image for post
Image for post

Et voilà une vidéo pour voir ça en vrai (1min30):

Pour ceux qui souhaitent savoir comment ça marche, voilà la liste des actions avec tous les éléments pour pouvoir les reproduire (et vous faire la main).

Avant, une petite vidéo avec toute la procédure :

  • Importer les fichiers dans OpenRefine avec les même paramètres que ceux mentionnés plus haut
  • Dans la Column 1, aller dans le menu Edit Column > Add column based on this colomn.
  • Dans la fenêtre appliquer la fonction suivante, qui permet de “parser” càd de lire le contenu puis de sélectionner l’élément de notre choix (ici le unitid) et de récupérer le tout avec la valeur de l’élément XML dans une colonne dédiée: value.parseHtml().select(“unitid”).toString(). On se retrouve avec colonne avec tous les <unitid>valeur</unitid>
  • Dans cette nouvelle colonne, aller dans le menu Edit cells > Transform et appliquer dans la fenêtre la fonction suivante, permettant de supprimer la balise ouvrante puis de remplacer la balise fermante par un point-virgule créant ainsi une séparation entre toutes les cotes : value.replace(‘<unitid>’,’’).replace(‘</unitid>’, ‘;’).
  • Toujours dans cette colonne, on va maintenant la nettoyer en allant dans le menu Edit cells > Commons Transform > trim leading […] + collapse consecutive […]
  • Toujours dans cette colonne, on va découper la cellule en x colonnes en utilisant le séparateur “ ; “. Pour cela , dans le menu Edit Column > Split into several columns, préciser le séparateur et lancer l’opération. Des dizaines de colonnes sont crées avec pour chacune une valeur d’unitid.
  • Il faut maintenant les transposer en lignes distinctes. Pour cela, aller dans menu de la 1er colonne contenant une cote (elle devrait s’appeler unitid 1) et dans le sous-menu Transpose > Transpose Cells Across Columns into Rows. Choisir dans les options, le fait de merger ces infos dans une seule colonne et donner lui un nom et lancer l’opération en appuyant sur le bouton transpose.
  • Pour plus de clarté, on peut supprimer la 2ème colonne puis faire en sorte que la valeur du nom du fichier XML d’origine soit répercuté pour toutes le cotes extraites. Pour cela, aller dans le menu de la colonne puis dans Edit Cells > Fill Down.

Et voilà !

Written by

#patrimoine #numerique #LinkedOpenData #museogeek #reseaux #archives, #mediation, #xml #OpenDataCulturel #GLAM #bibNum #dataviz

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store