1. Accueil
  2. Docs
  3. Pour tout savoir sur Lodex !
  4. Les recettes

Les recettes

Lodex permet l’enrichissement et le traitement des colonnes du jeu de données à travers l’usage de web service. Cette fonctionnalité peut également être utilisées en “mode avancé”  pour créer de nouvelle colonne à partir des colonnes existantes, voici quelques recettes prêtes à l’emploi :

Créer une colonne avec une valeur fixe et identique

[assign]
path = value
value = fix('OK')

Ces instructions créent une colonne ou chaque ligne à comme valeur “OK”

Créer une colonne avec une valeur fixe et identique (bis)

[assign]
path = value
value = OK

Ces instructions créent une colonne ou chaque ligne à comme valeur “OK”

Créer un champ booléen indiquant  la présence de certaines valeurs

[assign]
path = contientAouB
value = get('value).castArray().some(v =>  ['VAL A', 'VAL B'].includes(v))

Ces instructions créent une colonne (contientAouB) contenant une valeur booléenne indiquant si certaines valeurs (VAL A ou VAL B) sont contenues dans une liste ou un tableau de chaines de caractères (value).

Créer une colonne à partir de la valeur d’un objet d’une autre colonne

[assign]
path = value
value = get('value.unpaywall.is_oa')

Ces instructions créent une colonne contenant une valeur (is_oa) contenu dans l’objet d’une autre colonne (unpaywall)

Créer une colonne à partir de la valeur modifiée d’une autre colonne

[assign]
path = value
value = get('value.definition@fr', 'VIDE').toLower().prepend('PREFIX>').append('<SUFIXE')

Ces instructions créent une colonne où chaque ligne contient la valeur de la colonne “definition@fr” mise en minuscule et à laquelle est ajouté un préfixe et un suffixe. Si la colonne “definition@fr” est vide ou n’existe pas, la valeur par défaut sera “VIDE”.

Remplacer les lignes vides ou inexistantes d’une colonne par un texte prédéfini

[assign]
path = value
value = get('value.definition@en')

[swing]
test = get('value').isEmpty()

[swing/assign]
path = value
value = fix('non renseigné')

Ces instructions remplacent les lignes vides, ou inexistantes par la chaîne “non renseigné".

Modifier le contenu de toutes les lignes d’une colonne sans en créer une nouvelle 

[assign]
path = value
value = get('value.title').capitalize()

Ces instructions transforment toutes les valeurs de la colonne “title” en s’assurant que la premier caractère sera en majuscule et que les suivants seront en minuscule.

IMPORTANT : pour modifier directement une colonne, il est nécessaire de créer un enrichissement ayant le même nom que la colonne à modifier.

Remplacer  la colonne URI générée automatiquement par une colonne préexistante

[assign]
path = value
value = get('value.UT')

Ces instructions utilisent la colonne “UT” pour remplacer la colonne “uri” générée automatiquement.

NOTE : pour modifier directement une uri, il est nécessaire de créer un enrichissement ayant comme nom “uri”.

WARNING : la colonne uri doit impérativement contenir des valeurs distinctes. Si ce n’est pas le cas, la publication et d’autres enrichissements seront impossibles.

Créer une colonne URI avec valeurs distinctes.

[identify]
path = value

Ajouter un identifiant pérenne de type ARK 

[assign]
path = value
value = get('value.uri')

[expand]
size = 10
path=value
[expand/URLConnect]
url = https://ark-tools.services.inist.fr/v1/67375/stamp?subpublisher=XXX

Ces instructions vont attribuer un identifiant pérenne à chaque ligne. XXX est à remplacer par le code du “subpublisher” approprié et enregistré dans le registre de l’Inist : http://inist-registry.ark.inist.fr/

WARNING : Chaque identifiant ARK créé par ce web service est créé uniquement une seule fois. Si il n’est pas utilisé, l’identifiant est perdu.

Créer une colonne avec le préfixe d’un DOI

[assign]
path = value
value = get('value.DI').split('/').head()

Modifier et/ou corriger certaines valeurs d’une colonne 

[assign]
path = value
value = get('value.Revue').replace('Nature Phys.','Nature Physics.')

NOTE : pour modifier directement une colonne, il est nécessaire de créer un enrichissement ayant comme nom le même nom que la colonne à modifier.

Créer une colonne en s’assurant que toutes les lignes contiennent un tableau (même vide)

[assign]
path = value
value = get("value.Entités nommées (Unitex).placeName", [])

Ces instructions créent une colonne à partir du sous champ “placeName” de la colonne “Entités nommées (Unitex). S’ il n’y a pas de valeur, le tableau sera vide.

Créer une colonne en séparant des champs multivalués (en fonction d’un séparateur) en vue de leur enrichissement

[assign]
path = value
value = get("value.Keywords").toString().split(';').filter(Boolean)

Ces instructions créent une colonne à partir du champ “Keywords”  en  découpant chaqu eligne en focntion du caractère “;” . Le résultat est un tableau de valeur.

 

Créer une colonne à partir de la concaténation de deux autres colonnes

[assign]
path = value
value = fix(self.value.Title, self.value.Abstract).join('>')

Ces instructions créent une colonne à partir des champs “Title” & “Abstract”  en  les concaténant  dans une même colonne. Dans cet exemple, les 2 valeurs seront collées avec le caractère “>”

Créer une colonne à partir de la concaténation de deux autres colonnes (bis)

[assign]
path = value
value = get("value.Title").append(">").append(self.value.Abstract)

Ces instructions créent une colonne à partir des champs “Title” & “Abstract”  en  les concaténant  dans une même colonne. Dans cet exemple, les 2 valeurs seront collées avec le caractère “>”

Récupérer dans une liste d’objets deux valeurs simples

[assign]
path = value
value = get('value.concepts loterre').map(item => _.pick(item, ['prefLabel@en', 'about']))

Ces instructions créent une colonne à partir d’une liste d’objets en simplflifiant chaque objetc pour ne garrer que 2 champs différents de chaque objet. Dans cet exemple, seules les propriétés ‘prefLabel@en’ et ‘about’ seront conservées . Les autres champs de l’objet sont ignorés.

 

Transformer une liste d’objets en liste de valeurs simples

[assign]
path = value
value = get("value.Catégories scientifiques (Titre & Résumé)").map((item) =>`${item.rang}-${item.code.value}`))

Ces instructions créent une colonne à partir d’une liste d’objets en créant une chaîne de caractères composée par 2 champs différents de chaque objet. Dans cet exemple, “item.rang” et “item.code.value” seront collées avec le caractère “-”. Les autres champs de l’objet sont ignorés.

Créer une colonne avec une valeur JSON

[assign]
path = value
value = get('value.jsonValue').thru(JSON.parse)

Ces instructions créent une colonne à partir d’une autre colonne (nommée jsonValue) contenant des valeurs formatées en JSON.

Pour aller plus loin

Les recettes Lodex sont composées d’une série d’instructions qui s’enchaînent séquentiellement pour chaque ressource du dataset.

Les instructions ont un  nom entre crochet, exemple : 
[assign]

Chaque instruction possède ou non plusieurs paramètres. Chaque paramètre a un nom et une valeur, exemple:

[assign]
path = doi 
value = 0.1007/s00300-012-1156-9

 

la valeur d’un paramètre peut être dynamique, c’est à dire calculé à partir de chaque ressource, ces calculs sont réalisés par un enchaînement de fonctions, une fonction se reconnaît par un nom suivi de parenthèses, exemple:

[assign]
path = doi
value = get("value.crossrefID")


La liste des instructions utilisables dans lodex et leurs paramètres associés est disponible ici : https://inist-cnrs.github.io/ezs/#/plugin-core

La liste des fonctions utilisables dans les paramètres est disponible ici: https://lodash.com/docs/4.17.15

Cet article vous a-t-il été utile ? Oui Non

Comment pouvons-nous aider ?