OpenRefine ou comment passer des listes aux applications ABES : illustration avec IdRef et theses.fr ?

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

import   La première étape consiste à importer les données de base.

 

 

 

 

 

 

import2

 

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.

 

 

 

import3A 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/

Cet article a 9 commentaires

  1. Bonjour,
    merci pour ces informations, la piste de développement autour de Qualinca parait intéressante mais amène une question a la suite de cet article autour d’OpenRefine, a-t-il été envisagC de développer une surcouche de l’outil a venir (en fonction de la forme qu’il prendra bien entendu) sous la forme d’un service de « reconciliation » pour OpenRefine? On devrait ainsi pouvoir combiner la puissance d’OpenRefine pour le traitement de données avec la qualité de l’algo de traitement a venir coté qualinca !

    1. Salut Sylvain,
      oui, c’est une bonne idée, le service de réconciliation.

      Il est certain que nous voulons proposer ce service d’alignement comme web service.
      On pourra également soumettre au serveur un tableau (Excel ou autre).

      En revanche, il n’est pas certain qu’on décline ce service en service de réconciliation Open Refine. Il faut vraiment que le besoin soit fort. Or, je n’ai pas l’impression de voir se multiplier ces ws de reconciliation Open Refine. Tu sais si Wikidata va en faire un, dans la lignée de Freebase (qui est en train d’être chargée dans Wikidata).
      Yann

  2. Francois,
    voici une solution pour neutraliser les caracteres speciaux cote Open refine, pour que ca matche avec les index Solr (qui replacent les é par des e, les ç par des c, etc.).
    C’est pas en GREL, mais en Jython :

    import unicodedata
    return unicodedata.normalize('NFKD', value).encode('ascii', 'ignore') 
    
  3. Oh, c’est sympa ça : merci !
    J’essayerai donc au plus vite.

  4. Bonjour,
    Je chipote peut-être mais le code que vous fournissez n’est pas du code GREL mais du JSON d’un historique d’opérations d’OpenRefine. D’ailleurs, le JSON fournit tel quel n’est pas valide, il faut remplacer les guillemets typographiques par des guillemets droits. Il n’est pas facile de reproduire la procédure avec l’historique d’opérations, accepteriez-vous de redonner la procédure sous la même forme que http://www.bibliopedia.fr/wiki/OpenRefine#Interrogation_de_la_base_Relire ?
    Merci,

    1. Bonjour,
      je confirme la demande de Jean-Baptiste. Il est dommage de fournir un code dont les caractéristiques typographiques ne sont pas compatible avec l’outil auquel il est destiné

Laisser un commentaire

Tweetez
Partagez
Partagez