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)]
```
-[](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)
+[](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]