Problématique de départ : Comment passer une liste de paramètres à IdRef en entrée afin d’obtenir en sortie un type d’informations recherchées ? Par exemple, comment obtenir les identifiants IdRef d’une liste de personnes pour lesquelles on dispose du nom et du prénom ?
Condition : Il va de soi qu’il est exclu pour résoudre ce problème de passer ces noms-prénoms un à un dans l’interface de recherche IdRef.
Hypothèse : IdRef dispose d’un service d’interrogation sous forme de web services Solr à l’adresse suivante : http://www.idref.fr/Sru/Solr
Résolution
La première étape consiste à importer les données de base.
Un premier traitement, simple mais essentiel, consiste, pour chacune des colonnes de départ, à « ôter tous les espaces en début et fin de chaine de caractères ». Ensuite, on construit une colonne NomComplet dans laquelle le nom et le prénom sont séparés par une virgule et un espace. Si ce n’est déjà fait, il convient également de passer le tout en minuscule.
A partir de cette mise en forme – opération indispensable du fait que l’index Solr est construit ainsi – il sera possible de requêter l’index « Personne » d’IdRef avec la fonctionnalité « by fetching URL » et une expression rédigée dans le langage GREL propre à OpenRefine dans le menu « Apply » :
Exemple de code GREL :
{
"op": "core/column-addition-by-fetching-urls",
"description": "Create column jsonidref at index 3 by fetching URLs based on column NomComplet using expression grel:\"http://www.idref.fr/Sru/Solr?q=persname_s:\"+replace(value, ' ', '\\\\%20')+\n\n\"*&sort=score%20desc&version=2.2&start=0&rows=30&indent=on&fl=id,ppn_z,recordtype_z,affcourt_z&wt=json\"",
"engineConfig": {
"facets": [],
"mode": "row-based"
},
"newColumnName": "jsonidref",
"columnInsertIndex": 3,
"baseColumnName": "NomComplet",
"urlExpression": "grel:\"http://www.idref.fr/Sru/Solr?q=persname_s:\"+replace(value, ' ', '\\\\%20')+\n\n\"*&sort=score%20desc&version=2.2&start=0&rows=30&indent=on&fl=id,ppn_z,recordtype_z,affcourt_z&wt=json\"",
"onError": "store-error",
"delay": 50
},
La réponse obtenue en format json contient (ou pas) les paramètres recherchés. Ici, par exemple, seule la troisième ligne contient l’identifiant souhaité. Cette dernière colonne est obtenue en « parsant » le json.
La question essentielle est celle de la fiabilité de la réponse obtenue. Pour répondre à cette question, il faut revenir au point de départ : de qui est constitué mon corpus de personnes au départ ? S’il est composé de directeurs de thèses, comme c’est le cas pour les données ADUM pour lesquels l’opération d’alignement est en cours (Voir Fil’ABES), alors le requêtage de theses.fr peut donner des résultats dont le taux d’erreur est presque nul.
Et la suite ???
Pour disposer de toute une gamme d’idées et de codes OpenRefine dédiés au requêtage des données mises à disposition par l’ABES, vous pouvez vous reporter à http://www.bibliopedia.fr/wiki/OpenRefine . Si vous avez besoin d’obtenir des identifiants pour des « Personnes » ou d’autres types d’autorité, adressez votre demande à idref@abes.fr. Nous pourrons élaborer ensemble la meilleure façon d’y répondre.
Notons enfin que si OpenRefine s’avère pratique, l’outil connait des limites. Sur la base de l’expérimentation SudocAd, l’ABES développe un outil plus sophistiqué en parallèle du projet de recherche Qualinca qu’elle mène avec le LIRMM. Cet outil, en cours de développement, est bien plus ambitieux en termes de quantité et de qualité des paramètres pris en entrée pour un niveau de fiabilité réhaussé. Pour creuser cette question, nous recommandons la lecture de l’article passionnant d’Aline Le Provost dans le numéro 77 d’Arabesque : https://fil.abes.fr/2015/01/05/arabesques-n77-dialogues-avec-la-machine/