diff --git a/README.md b/README.md index 6172a06..0b4032d 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,11 @@ Étude pour l'INSU, à partir de ~14000 DOI présents dans le WOS. À rendre pour mi-octobre 2022. -Voir et les `.ini` qui y sont. -Voir . +Voir et les `.ini` qui y sont. +Voir . +Voir . -Les DOI sont dans un `.bib`. +Les DOI sont dans un `.bib` ([BibTeX](http://www.bibtex.org/)). Décider sur quelle machine mettre ce dump. @@ -17,26 +18,27 @@ - [x] enrichissement service web base Pascal , [doc](https://openapi.services.inist.fr/?urls.primaryName=Classification%20en%20domaines%20scientifiques#/default/post_v1_en_classify) +- [ ] récupérer les organismes ## Workflow ```mermaid graph TD - A[(corpus_WoS_vol1-50.json)] --> B[[extract-fields.ini]] - B --> C[(corpus-simple-50.json)] + A[(corpus_WoS_vol1.json)] --> B[[extract-fields.ini]] + B --> C[(corpus-simple.json)] C --> D[[enrich-rnsr.ini]] - D --> E[(corpus-simple-rnsr-50.json)] + D --> E[(corpus-simple-rnsr.json)] E --> F[[enrich-etab.ini]] - F --> G[(corpus-simple-etab-50.json)] + F --> G[(corpus-simple-etab.json)] G --> H[[enrich-institutes.ini]] - H --> I[(corpus-simple-instituts-50.json)] + H --> I[(corpus-simple-instituts.json)] I --> J[[enrich-teeft.ini]] - J --> K[(corpus-simple-teeft-en-50.json)] + J --> K[(corpus-simple-teeft-en.json)] K --> L[[enrich-pascal.ini]] - L --> M[(corpus-simple-pascal-50.json)] + L --> M[(corpus-simple-pascal.json)] ``` -[![Workflow](https://mermaid.ink/img/pako:eNpd0U1LwzAYwPGvUp6TwjL04KUHwa179ThBsC0jtk9tpE1K8kSUse9umtGuS055-ecHIScoVIkQw5fmXR29JZmM3HhJ7wqlO2uO7-pw_FHNI3t6mH8bJe_ziLHnaJGm-EuaF8QqgU1p5kKKPL_cXvhkORjMiLZr8CpcqqWvEgdJLYqaaWn0VEn8-SpU-iykVj5djxQS_5xSa3--Cak-C6mNT7cjJaQhQZbw5oVbX-1CcIhNqO58vx9VQqxoCu598BqCvmMorx7MoEXdclG6Tzv1lzOgGlvMIHbTEituG8ogk2eXckvq8CcLiElbnIHtSk6YCO6-u4W44o1xux2XH0oN6_M_VYGrQQ)](https://mermaid-js.github.io/mermaid-live-editor/edit#pako:eNpd0U1LwzAYwPGvUp6TwjL04KUHwa179ThBsC0jtk9tpE1K8kSUse9umtGuS055-ecHIScoVIkQw5fmXR29JZmM3HhJ7wqlO2uO7-pw_FHNI3t6mH8bJe_ziLHnaJGm-EuaF8QqgU1p5kKKPL_cXvhkORjMiLZr8CpcqqWvEgdJLYqaaWn0VEn8-SpU-iykVj5djxQS_5xSa3--Cak-C6mNT7cjJaQhQZbw5oVbX-1CcIhNqO58vx9VQqxoCu598BqCvmMorx7MoEXdclG6Tzv1lzOgGlvMIHbTEituG8ogk2eXckvq8CcLiElbnIHtSk6YCO6-u4W44o1xux2XH0oN6_M_VYGrQQ) +[![Workflow](https://mermaid.ink/img/pako:eNpd0l1rgzAUgOG_IrnaoBZ268Vgrf3urjoYTKWkepwZmoTkZGyU_vdlxyqqV9G854FgrixXBbCIfRquq-AtTmXgn5fkIVdGO3t-V6fzt6qf5l9WyccsCMPnYJEk8IOG5xiWAurCzoUUWdaOLihZdkBoRaNruI-3yZKS2CvSiLwKjbRmSMS0v5oQbTZ0VtSteweQX4bOmvY3U4eyobOhbts7QloU6BBGB9tStZtqXWxH5I7ifU8iQIlDbU_BYapRF4IcYQdqjz2muc15PdSOVLxOtXvYWWzGGjANF4X_4df_yZRhBQ2kLPLLAkruakxZKm8-5Q7V6VfmLELjYMacLjhCLLi_Kg2LSl5b_1Vz-aFU9377A316wPA)](https://mermaid-js.github.io/mermaid-live-editor/edit#pako:eNpd0l1rgzAUgOG_IrnaoBZ268Vgrf3urjoYTKWkepwZmoTkZGyU_vdlxyqqV9G854FgrixXBbCIfRquq-AtTmXgn5fkIVdGO3t-V6fzt6qf5l9WyccsCMPnYJEk8IOG5xiWAurCzoUUWdaOLihZdkBoRaNruI-3yZKS2CvSiLwKjbRmSMS0v5oQbTZ0VtSteweQX4bOmvY3U4eyobOhbts7QloU6BBGB9tStZtqXWxH5I7ifU8iQIlDbU_BYapRF4IcYQdqjz2muc15PdSOVLxOtXvYWWzGGjANF4X_4df_yZRhBQ2kLPLLAkruakxZKm8-5Q7V6VfmLELjYMacLjhCLLi_Kg2LSl5b_1Vz-aFU9377A316wPA) ## Potentiels @@ -44,18 +46,6 @@ - alignement adresse / expression régulière pour le marquage labo - annotation de corpus avec un thésaurus (quel outil: XSLT ?) -## DEBUG - -Les items 25,26, 27, 29 ,30, 31, 32, 34, 35, 39, 41 ont un tableau dans le champ -`abstract`, ce qui pose problème au web service. Il faut donc s'arranger pour -n'envoyer qu'une chaîne. - -## Décisions - -- 26/09/2022: ne pas récupérer instituts, ni enrichissement Pascal. Priorité: - récupérer les notices pour tous les DOI (DOI originaux + manquants du chapitre - 11) - ## Configuration ezMaster Utiliser [lodex-crontab@1.4+](https://github.com/Inist-CNRS/ezmaster-apps/tree/main/applications/lodex-crontab), avec cette configuration: @@ -79,3 +69,276 @@ ] } ``` + +## Décisions + +- 26/09/2022: ne pas récupérer instituts, ni enrichissement Pascal. Priorité: + récupérer les notices pour tous les DOI (DOI originaux + manquants du chapitre + 11) + +## Procédure actuelle de l'équipe + +- Vérifier le nombre de publis +- récupération des DOI dans le rapport du GIEC (outil qui va chercher les liens dans le PDF (voir Ségia)) +- interrogation du WOS par API pour récupérer le corpus en JSON +- identifier les pays: + - aligner les pays avec dénominations Français en majuscules (à terme avec les hiddenLabels dans Loterre) + - regrouper les pays éclatés (England, Welsh), (France et Outre Mer (Guadeloupe, French Guiana, ...)), table de correspondance + - récupération du code ISO3 du pays homogénéisé (table `WoS_PaysENG_Correction_Correspondance`) pour la cartographie dans LODEX +- repérage du CNRS: + - unités internationales (anciennement UMI, maintenant IRL): ~40 + - adresses France: + - alignement UT / base consolidée du SAPPS (2012-2020): UT -> oui/non CNRS (si oui: labo et institut) (pas les collections de SHS) + - reliquat d'adresses non repérées: tables d'expressions régulières (lots par zones géographiques, par année pour éviter les homonymes) +- part France / Europe: regrouper par continent +- adresses françaises non CNRS: pas les universités, pas les tutelles, mais les autres organismes français présents hors CNRS + - aligner avec le RNSR (web service) + - retrouver INRIA, INSERM, INRAE, IRD, CEA, BRGM, IFREMER, Météo France: + - trouver les tutelles des labos non CNRS (à partir du RNSR) + - homogénéiser selon la forme des tutelles dans le RNSR (IRSTEA, INRA => INRAE) + - filtre "big 10" (table) +- dédoublonnage des labos (les paires UT/organisme (organisme = Identifiant + année)) +- rassemblement des organismes par UT (une colonne multivaluée des organismes) +- organismes mondiaux: à partir du JSON (plus d'infos), voir + + (forme normalisée par le WoS dans "Records Records Rec Static_Data + Fullrecord_Metadata Addresses Address_Name Address_Spec Organizations + Organization Content", si c'est le préférentiel (Pref = Y) et dans les Reprint_Addresses) +- thématiques + - catégories WoS subheadings (/publi) + - ne pas prendre les keywords plus: moins pertinents + - mots-clés d'auteur (keywords): pertinents mais peu présents + - (interroger Incites pour récupérer les classifications) + - Nathalie et Majid ont aligné (projection) avec le vocabulaire changement climatique (plusieurs outils); titre + résumé + mots-clés: recherche de termes (+ générique) + - enrichissement catégories Pascal (concaténation niveau 2 et 3) sur titre + résumé (problèmes: Psychologie apparaît, noms de bases comme BGI PRODIG) +- DOI / chapitre (MyCORE: Volume 1) + +## DEBUG + +### corpus 50 notices + +Les items 25,26, 27, 29 ,30, 31, 32, 34, 35, 39, 41 ont un tableau dans le champ +`abstract`, ce qui pose problème au web service. Il faut donc s'arranger pour +n'envoyer qu'une chaîne. + +### corpus 12643 notices (vol1, sans le dernier chapitre) + +L'enrichissement RNSR n'a rien retourné pour ces 61 UT: + +```bash +$ fx < data/corpus-simple-rnsr.json '.map(n => ({uri: n.uri, rnsr: n.ws.rnsr?.[0]}))' '.map(n => ({ ok: Array.isArray(n.rnsr), ...n}))' '.filter(n => !n.ok)' '.map(n => n.uri).join("\n")' | sort -u +WOS:000087687000034 +WOS:000201991500005 +WOS:000202541600015 +WOS:000259592400005 +WOS:000278783300013 +WOS:000297080200009 +WOS:000303246100021 +WOS:000307031000011 +WOS:000326102600010 +WOS:000328962700024 +WOS:000330731300004 +WOS:000336983900012 +WOS:000351469300002 +WOS:000358138100001 +WOS:000368910100002 +WOS:000369014100030 +WOS:000371481700005 +WOS:000375767000046 +WOS:000376443100012 +WOS:000382134800021 +WOS:000403527800002 +WOS:000415909900003 +WOS:000416761600042 +WOS:000417409700018 +WOS:000419033400048 +WOS:000425514300054 +WOS:000432597400029 +WOS:000433901600021 +WOS:000437255400003 +WOS:000437362800003 +WOS:000440301400006 +WOS:000446187900022 +WOS:000449897200002 +WOS:000451164300002 +WOS:000451785200002 +WOS:000462592200001 +WOS:000493421500001 +WOS:000515035400001 +WOS:000578319700001 +WOS:000598066100006 +WOS:000616977100020 +WOS:000620058900026 +WOS:A1945XY75400007 +WOS:A1949UA83200002 +WOS:A1954YH20800003 +WOS:A1955WU68300004 +WOS:A1955ZQ16500003 +WOS:A1957XF83300002 +WOS:A1960XF81800012 +WOS:A19614744A00031 +WOS:A1961WY83500001 +WOS:A1961XG98500003 +WOS:A19656660700020 +WOS:A19656993100009 +WOS:A19679381400001 +WOS:A1969E372700020 +WOS:A1969E761200001 +WOS:A1969F336900001 +WOS:A1970H335700006 +WOS:A1971I822800004 +WOS:A1971J729400017 +``` + +Premier cas: pas d'adresse d'affiliation (35 occurrences) + +```json +{ + "uri": "WOS:000087687000034", + "title": "A North Atlantic climate pacemaker for the centuries", + "abstract": "", + "publication_year": 2000, + "source": "SCIENCE", + "affiliations": [], + "countries": [], + "subjects": [ + "Multidisciplinary Sciences", + "Science & Technology - Other Topics" + ], + "subheadings": [ + null + ], + "headings": [ + "Science & Technology" + ] +} +``` + +Deuxième cas: tout semble normal + +```json +{ + "uri": "WOS:000259592400005", + "title": "On avoiding dangerous anthropogenic interference with the climate system: Formidable challenges ahead", + "abstract": "The ... degrees C.", + "publication_year": 2008, + "source": "PROCEEDINGS OF THE NATIONAL ACADEMY OF SCIENCES OF THE UNITED STATES OF AMERICA", + "affiliations": [ + "Univ Calif San Diego, Scripps Inst Oceanog, La Jolla, CA 92093 USA", + "Univ Calif San Diego, Scripps Inst Oceanog, 9500 Gilman Dr, La Jolla, CA 92093 USA" + ], + "countries": [ + "USA" + ], + "keywords": [ + "EMISSIONS", + "TRENDS", + "CHINA" + ], + "subjects": [ + "Multidisciplinary Sciences", + "Science & Technology - Other Topics" + ], + "subheadings": [ + null + ], + "headings": [ + "Science & Technology" + ] +}, +{ + "uri": "WOS:000278783300013", + "title": "Compensation between Model Feedbacks and Curtailment of Climate Sensitivity", + "abstract": "The ... of the intermodel spread.", + "publication_year": 2010, + "source": "JOURNAL OF CLIMATE", + "affiliations": [ + "Harvard Univ, Cambridge, MA 02138 USA", + "Harvard Univ, 20 Oxford St, Cambridge, MA 02138 USA" + ], + "countries": [ + "USA" + ], + "keywords": [ + "GENERAL-CIRCULATION MODELS", + "CLOUD FEEDBACK", + "SURFACE-TEMPERATURE", + "SIMULATIONS", + "PROJECTIONS", + "MECHANISMS", + "CYCLE" + ], + "subjects": [ + "Meteorology & Atmospheric Sciences" + ], + "subheadings": [ + "Physical Sciences" + ], + "headings": [ + "Science & Technology" + ] +} +``` + +En cherchant ces deux exemples à la main, le service ne trouve aucune structure +(logique, elles sont à l'étranger). + +```bash +$ curl -X 'POST' \ + 'https://affiliations-tools.services.inist.fr/v1/rnsr/info' \ + -H 'accept: application/json' \ + -H 'Content-Type: application/json' \ + -d '[ + { + "id": 1, + "value": { + "year": 2010, + "address": "Harvard Univ, Cambridge, MA 02138 USA" + } + }, + { + "id": 3, + "value": { + "year": 2010, + "address": "Harvard Univ, 20 Oxford St, Cambridge, MA 02138 USA" + } + }, + { + "id": 4, + "value": { + "year": 2008, + "address": "Univ Calif San Diego, Scripps Inst Oceanog, La Jolla, CA 92093 USA" + } + }, + { + "id": 5, + "value": { + "year": 2008, + "address": "Univ Calif San Diego, Scripps Inst Oceanog, 9500 Gilman Dr, La Jolla, CA 92093 USA" + } + } +]' +[{ + "id": 1, + "value": [] +}, +{ + "id": 3, + "value": [] +}, +{ + "id": 4, + "value": [] +}, +{ + "id": 5, + "value": [] +}] +``` + +Donc le service est capable de traiter ces adresses, et de retourner un tableau +vide pour chacune. Ça n'explique pas le comportement sur ces 61 - 35 = 26 +notices. + +Mais comme ça n'arrive que pour 26 notices sur plus de 12000, on va juste faire +en sorte que ça ne fasse pas planter le script suivant (`enrich-etab.ini`). diff --git a/enrich-etab.ini b/enrich-etab.ini index f85d273..6dc239b 100644 --- a/enrich-etab.ini +++ b/enrich-etab.ini @@ -22,7 +22,8 @@ # Concaténation des sigles et libellés des établissements associés [assign] path = ws.etab -value = get('ws.rnsr', []).map(structs => structs.map(struct => `${struct.sigle}: ${struct.intitule}`)).flatten() +; value = get('ws.rnsr', []).map(structs => structs.map(struct => `${struct.sigle}: ${struct.intitule}`)).flatten() +value = get('ws.rnsr', []).map(structs => Array.isArray(structs) ? structs.map(struct => `${struct.sigle}: ${struct.intitule}`) : []).flatten() # Save data [dump]