diff --git a/README.md b/README.md index 7661d0a..2961a78 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,151 @@ alignement-pascal-francis =============== -Programmes d’alignement des notices bibliographiques INIST avec les documents ISTEX \ No newline at end of file +Programmes d’alignement des notices bibliographiques INIST avec les documents ISTEX + +L’alignement des notices bibliographiques Pascal/Francis de l’**Inist** avec les documents de la base **Istex** se fait en plusieurs étapes, à savoir : + + - l’alignement proprement dit : pour chaque notice bibliographique, on cherche à l’aide de l’API **Istex** le document ayant le plus de similitudes et on calcule un score qui permettra de décider si l’appariement est bon ou pas. + - la correction des erreurs au cours de l’interrogation de l’API, dus soit à un problème de connexion, soit à une erreur de syntaxe dans l’écriture de la requête. + - le dédoublonnage : non seulement les bases Pascal et Francis ont des notices en commun, mais il y a également des documents qui ont été indexés plusieurs fois. Après cette étape, seule une notice, avec le meilleur score, est retenue. + - la génération des fichiers d’enrichissement au format TEI pour la base **Istex**. + +Dans l’exemple qui suit, on prend le cas de la base Pascal 1995 et on va voir toutes les étapes et toutes les commandes utilisées pour réaliser l’alignement. On suppose que nous sommes dans un répertoire `data` avec les sous-répertoires suivants : + +```txt + data + ├── Pascal + │   └── 1995 + │   └── Pascal.strd95.bib + ├── etape1 + ├── etape2 + ├── etape3 + ├── etape4 + │   └── CC + └── resultats +``` + +Évidemment, le répertoire `Pascal` est supposé contenir toutes les bases de 1984 à 2015. Pour chaque année, on a un répertoire contenant les notices dans un système de fichier appelé **HFD** (voir `divers`). Le répertoire `etape4/CC` contient les tables d’équivalence permettant de verbaliser les codes de classement Pascal et Francis et le répertoire `resultats` contient les résultats déjà obtenus auparavant, résultats qui serviront lors de la phase de dédoublonnage. + +### Étape 1 + +Le programme d’alignement s’appelle `matchStan2Istex.pl`. La commande de base est : + +```bash +matchStan2Istex.pl -h Pascal/1995/Pascal.strd95.bib > etape1/P1995.txt +``` + +Comme le traitement peut être assez long, on peut voir la progression en donnant l’heure chaque fois qu’un certain nombre de notices, indiqué par l’option `-v`, ont été traitées : + +```bash +matchStan2Istex.pl -h Pascal/1995/Pascal.strd95.bib -v 10000 > etape1/P1995.txt +``` +L’option `-v` fournit également le nom du fichier de notices, le nom et la version du programme d’alignement et la date du traitement. Comme dans l’étape finale de génération des fichiers d’enrichissement, il vous faudra indiquer la date à laquelle l’alignement a été fait et la version du programme `matchStan2Istex.pl` utilisé, il est intéressant de conserver la sortie erreur standard dans un fichier “log” : + +```bash +matchStan2Istex.pl -h Pascal/1995/Pascal.strd95.bib -v 10000 > etape1/P1995.txt 2> etape1/logP1995.txt +``` + +Si l’on veut refaire l’alignement seulement sur un ou plusieurs nouveaux corpus récemment ajoutés à la base **Istex**, il suffit de les indiquer avec l’option `-c` : + +```bash +matchStan2Istex.pl -h Pascal/1995/Pascal.strd95.bib -v 10000 -c droz,taylor-francis > etape1/P1995.txt +``` + +Dans le cas où le programme est arrêté avant la fin du traitement, on peut reprendre là où il s'est arrêté. Pour cela, il faut voir dans le fichier de sortie `etape1/P1995.txt` l’identifiant **Inist** de la dernière notice dont la réponse est complète, effacer ce qui suit en laissant une ligne blanche et relancer en indiquant le numéro de la dernière notice avec l’option `-r` : + +```bash +matchStan2Istex.pl -h Pascal/1995/Pascal.strd95.bib -v 10000 -r 95-0419795 > etape1/P1995.txt +``` + +Dans l’étape finale de génération des fichiers d’enrichissement, il vous faudra indiquer la date à laquelle l’alignement a été fait et la version du programme `matchStan2Istex.pl` utilisé, d’où l’intérêt de conserver les messages + +### Étape 2 + +Il peut arriver au cours du traitement que la connexion au serveur ne se fasse pas, que l’API ne réponde pas ou que la réponse soit tronquée. Il est facile de vérifier la présence d’erreurs avec la commande : + +```bash +grep ' => ERREUR ' etape1/P1995.txt | sort | uniq -c +``` + +En présence d’erreurs, on peut retraiter les notices concernées avec le programme `recupErreurs.pl` : + +```bash +recupErreurs.pl -h Pascal/1995/Pascal.strd95.bib -a etape1/P1995.txt -r rP1995.txt > etape2/P1995.txt +``` + +Le fichier défini par l’option `-r`, à savoir dans notre exemple `rP1995.txt`, sert à recevoir les notices qui ne peuvent être traitées correctement parce que la requête générée entraine une erreur de syntaxe. Normalement, cela ne devrait plus arriver, mais l’option est obligatoire. + +Comme cette étape est rapide, elle peut être réalisée sans même chercher à savoir s’il y a des erreurs ou pas. + + +### Étape 3 + +Lorsque l’alignement a été réalisé sur toutes les bases Pascal et Francis, on alors passer à l’étape du dédoublonnage. Pour cela, il faut l'ensemble des résultats, y compris ce qui a été fait bien avant. Le programme de dédoublonnage `weedTei.pl` doit avoir les noms de tous les fichiers. La façon la plus simple de faire cela est de lister l’ensemble de ces fichiers, c’est-à-dire, dans notre exemple, ceux contenus dans le répertoire `etape2` et le répertoire `resultats`, avant d’envoyer le tout sur l’entrée standard de `weedTei.pl` : + +```bash +(find resultats -name '[FP]????.txt'; find etape2 -name 'P????.txt'; find etape2 -name 'F????.txt') | weedTei.pl -f - -r etape3 +``` + +Toujours envoyer la liste des anciens résultats en premier et, pour les résultats récents, la liste des résultats de Pascal avant ceux de Francis. Deux raisons pour cela : + + - en cas de doublon, et sauf si le nouveau a un score supérieur, on garde l’ancien appariement, donc le fichier d'enrichissement existant et on ne modifie pas la base **Istex** pour rien. + - dans le cas où les anciens fichiers portent le même nom que les nouveaux, le programme `weedTei.pl` créera les deux fichiers dans le même répertoire, ici `etape3`, et le nouveau fichier écrasera l’ancien (ce qui n’est pas un problème). + + +### Étape 4 + +L’étape finale consiste à générer les fichiers d’enrichissement au format TEI dans le système de répertoires à 4 niveaux d’**Istex**. Ces fichiers sont suffixés par `_ipf` (pour **I**ndexation **P**ascal-**F**rancis) et ont l’extension `.tei` comme dans l’exemple suivant : + +```txt + E + └── 6 + └── 0 + └── E60DA2B19D7356D5BC7E5612DCBBE9FCAAA9516D + └── E60DA2B19D7356D5BC7E5612DCBBE9FCAAA9516D_ipf.tei +``` + +À la fin, on se retrouve avec 16 répertoires nommés de `0` à `9`et de `A` à `F`, +La commande de base, avec le programme `alignment2tei.pl`, est : + +```bash +cd etape4 +alignment2tei.pl -h ../Pascal/1995/Pascal.strd95.bib -a ../etape3/P1995.txt -d 2020-10-17 -v 2.12.10 +``` + +Comme indiqué à l’étape 1, il faut fournir la date du traitement (au format “*aaaa-mm-jj*”) et la version du programme `matchStan2Istex.pl`. Pour conserver une trace des fichiers générés, vous pouvez créer un fichier “*log*” avec l’option `-l`. + +```bash +alignment2tei.pl -h ../Pascal/1995/Pascal.strd95.bib -a ../etape3/P1995.txt -d 2020-10-17 -v 2.12.10 -l logP1995.txt +``` +Dans ce fichier “*log*”, pour chaque notice bibliographique appariée, on a : + + - l’identifiant **Inist** de la notice bibliographique + - le score de l’alignement + +et pour le document **Istex** associé : + + - l’identifiant **Istex** + - l’identifiant pérenne ARK + - le DOI + - le PII + - le PMID + +Enfin, si, à l’inverse de notre exemple, le répertoire `CC` contenant les tables d’équivalence ne se trouve pas dans le répertoire courant, il faut indiquer son nom et son chemin avec l’option `-c` : + +```bash +alignment2tei.pl -h ../Pascal/1995/Pascal.strd95.bib -a ../etape3/P1995.txt -d 2020-10-17 -v 2.12.10 -l logP1995.txt -c ~/etc/CC +``` + +Lorsque toutes les bases ont passées avec succès les différentes étapes et que le répertoire `étape4` contient l’ensemble des nouveaux fichiers d’enrichissement, il ne reste plus qu’à archiver le tout : + +```bash +zip -r -9 -q enrich.zip [0-9A-F] +``` + +### Étape 5 + +Dans notre exemple, avant même de faire toutes les étapes sur toutes les bases Pascal et Francis, nous avions déjà un ensemble de résultats auquel nous avons comparé les nouveaux résultats lors du dédoublonnage. En prévision d’un futur traitement, comme l’ajout d’un nouveau corpus à la base **Istex**, il faut fusionner tous les résultats, anciens et nouveaux. + +Mais, comme le cas ne s'est pas encore présenté, on attend d’avoir un exemple concret pour écrire le script adéquat. + diff --git a/alignement/README.md b/alignement/README.md index 7861c0f..cf5e92a 100644 --- a/alignement/README.md +++ b/alignement/README.md @@ -1,15 +1,17 @@ Alignement Pascal-Francis / Istex =============== -Programmes d’alignement des notices bibliographiques Inist avec les documents Istex +Programme d’alignement des notices bibliographiques Inist avec les documents Istex -Ce programme permet d’aligner les bases bibliographiques Pascal et Francis de l’**Inist** avec la base **Istex**, c’est-à-dire retrouver dans la base Istex les documents correspondants aux notices bibliographiques des base Pascal ou Francis. +Le programme `matchStan2Istex.pl` permet d’aligner les bases bibliographiques Pascal et Francis de l’**Inist** avec la base **Istex**, c’est-à-dire retrouver dans la base Istex les documents correspondants aux notices bibliographiques des base Pascal ou Francis. À noter que si ce programme est utilisé à l'Inist, il est recommandé d’éviter de passer par le proxy. Pour cela, il faut supprimer les variables globales le définissant, ce qui se fait avec la commande  : `unset http_proxy https_proxy no_proxy`. Vérifiez également avec la commande `env` si ces mêmes variables n'existent pas en majuscule. Auquel cas, supprimez les avec la commande : `unset HTTP_PROXY HTTPS_PROXY NO_PROXY`. + ### Prérequis Le programme `matchStan2Istex.pl` fonctionne sous Unix/Linux ainsi qu’avec Cygwin sous Windows. Il utilise plusieurs modules qui ne sont pas tous dans la distribution standard de **Perl**. Les modules qu’on peut être amené à installer sont : + - HTML::Entities - HTTP::CookieJar::LWP - JSON @@ -18,8 +20,11 @@ - Text::Unidecode - URI::Encode +Il peut aussi être nécessaire d’avoir le programme `IhfdCat` pour accéder aux notices **Inist** i eles sont dans un fichier **HFD** (voir `divers`). + ### Usage + ```txt matchStan2Istex.pl -f (fichier|-) [ -d ] [ -v nombre ] [ -r id ] [ -n notices ] [ -c corpus[,corpus]* ]* @@ -30,6 +35,7 @@ ### Options + ``` -c indique le nom du ou des corpus de la base Istex à interroger (on peut soit répéter cette option, soit mettre tous les noms de corpus séparés par des virgules, mais sans @@ -117,6 +123,8 @@ #### 2 - Sortie standard +##### Cas général + Pour chaque notice Inist traitée, et sauf pour 2 exceptions que l’on verra plus loin, on a une première ligne commençant par `URI` et indiquant la requête envoyée à l’API. La ligne suivante donne le nombre de réponses obtenues. ```txt @@ -164,6 +172,49 @@ On considère que l'alignement est bon si le score est supérieur ou égal à `3.490`. Pour les scores inférieurs à cette valeur, on a parfois un point d’exclamation `!` qui indique que les données bibliographiques sur la revue, l’année de publication, la volumaison, la tomaison (si elle existe) et la pagination sont correctes, mais que le reste des données ne correspond pas. Cela peut être dû à des fautes de frappe ou d’OCR dans les noms d’auteur ou dans le titre, ou cela peut être dû à une erreur de bulletinage : le document s'est vu attribuer par exemple la pagination d’un autre article du même fascicule. On trouve de tels décalages aussi bien dans les données Inist que dans celles des éditeurs. +##### Messages divers + +On peut aussi avoir des messages, pas forcément d’erreur, après la requête. Ils sont précédés d’une flèche, ont un texte en majuscule et se terminent par un point d’exclamation, comme `=> CORRECTION MAC !`. Ils indiquent un traitement particulier et ont servi à perfectionner le programme. + +Les véritables erreurs sont indiquées comme telles. Ont a 3 types d’erreur : + + - requête incorrecte `=> ERREUR 400 "400 Bad Request" !` + - problème de connexion au serveur `=> ERREUR 500 "500 Internal Server Error" !` + - mauvaise conversion de JSON vers Perl `=> ERREUR CONVERSION JSON -> PERL !` + +La première est due aux données de la notice Inist. En utilisant les notices corrigées, cela ne devrait plus arriver. Les deux autres sont des problèmes temporaires qu'on peut corriger avec le programme `recupErreurs.pl` dans le répertoire “**correction**”. + +##### Notices groupées + +Certaines notices Inist concernent non pas un article, mais un groupe d’articles pour différentes raisons : + + - “Pro and con” : en médecine, deux auteurs (ou groupes d’auteurs) discutent d’un sujet, comme une procédure médicale, et un auteur est pour, l’autre est contre. + - juste à la suite d’un article, on a un commentaire d’un autre auteur, voire la réponse du premier auteur aux commentaires sur son article. + - plusieurs articles associés, déjà regroupés dans le fascicule et traitant du même sujet. + +Les différents articles pouvant être regroupés sont indiqués après le résultat général. Pour chaque article, on a une flèche ` ~~> ` suivie de 7 champs séparés par des tabulations. On a respectivement : + + - la première page + - la dernière page + - la liste des auteurs séparés par une barre verticale `|` + - le titre de l’article + - l’identifiant Istex + - l’identifiant pérenne ARK + - l’identifiant DOI + +Ces document sont présentés normalement dans l’ordre de la pagination, comme dans cet exemple article/commentaires/réponses. + +```txt + ~~> 2 10 I. P. Stolerman|M. J. Jarvis The scientific case that nicotine is addictive 5A8E718F07659D84B0480F8D78D661F0E17ECAC6 ark:/67375/1BB-TFLHTXVC-4 10.1007/BF02245088 + ~~> 11 13 J. E. Henningfield|S. J. Heishman The addictive role of nicotine in tobacco use B16BD3EAB82D95F6780752DAEC1ABB1E1FAA27BF ark:/67375/1BB-3ZB0VPRG-6 10.1007/BF02245089 + ~~> 14 15 S. Shiffman Comments on nicotine addiction 79BF81FCD57EECD784BC85C823992173162BE5C1 ark:/67375/1BB-QWBZ3DS5-C 10.1007/BF02245090 + ~~> 16 17 J. H. Robinson|W. S. Pritchard Reply to stolerman and jarvis 70F7FD3CA45D99F42EAD372FF607CAC82376B7EA ark:/67375/1BB-0KBPPP8C-F 10.1007/BF02245091 + ~~> 18 20 M. E. Jarvik Commentary DC536BE3D44EEC8BCA32DCFE79FE23590494CA35 ark:/67375/1BB-JZ3PB2LS-Z 10.1007/BF02245092 + ~~> 21 22 J. H. Jaffe Commentary on the nicotine IS/IS not addictive debate 5B0620646FBF8A3785C50F3597709ED9B25DA216 ark:/67375/1BB-XFHN05CC-V 10.1007/BF02245093 +``` + +##### Exceptions + Dans deux cas, on n’a pas de requête, mais seulement un résultat nul : pour les monographies et pour les articles dont la revue n’est pas dans la base Istex. Dans le premier cas, la note est un *underscore* `_`, le score est un tiret `-` et le niveau bibliographique est `M`. Dans le deuxième cas, on a le même résultat que lorsque l’API n’a trouvé aucun document, mais sans la requête. En fait, au premier article d’une revue, on teste la présence de cette revue dans la base. Si la réponse est nulle, tous les autres articles de la même revue ne font l’objet d’aucune recherche inutile. #### 3 - Erreur standard diff --git a/correction/README.md b/correction/README.md new file mode 100644 index 0000000..35155a5 --- /dev/null +++ b/correction/README.md @@ -0,0 +1,139 @@ +Correction de l’alignement Pascal-Francis / Istex +=============== + +Programme de correction de l’alignement des notices bibliographiques Inist avec les documents Istex + +Le programme `recupErreurs.pl` permet de corriger les erreurs apparues lors de l’alignement des bases bibliographiques Pascal et Francis de l’**Inist** avec la base **Istex** si elles sont dues à des problèmes de connexion à l’API **Istex** ou, à défaut, d’isoler les notices bibliographiques responsables d’une erreur de syntaxe lors de la génération de la requête à l’API. Dans ce dernier cas, le programme permet également après correction de ces notices de modifier le fichier de sortie du programme d’alignement `matchStan2Istex.pl` pour inclure les réponses correctes. + +À noter que si ce programme est utilisé à l'Inist, il est recommandé d’éviter de passer par le proxy. Pour cela, il faut supprimer les variables globales le définissant, ce qui se fait avec la commande  : `unset http_proxy https_proxy no_proxy`. Vérifiez également avec la commande `env` si ces mêmes variables n'existent pas en majuscule. Auquel cas, supprimez les avec la commande : `unset HTTP_PROXY HTTPS_PROXY NO_PROXY`. + + +### Usage + +```txt + recupErreurs_v3.pl -h hfd -a alignement -r rejet [ -l log ] [ -m matchStan ] + recupErreurs_v3.pl -f fichier -a alignement -r rejet [ -l log ] [ -m matchStan ] + recupErreurs_v3.pl -i +``` + + +### Options + + +``` + -a indique le nom du fichier de résultats de l’alignement dont on doit + corriger les erreurs + -f indique le nom du fichier d’entrée contenant les notices Pascal ou Francis + (qui peut être un fichier compressé avec “gzip” ou “bzip2”) + -h indique le nom du fichier HFD servant d’entrée au programme + -i affiche cette aide. + -l indique le nom du fichier “log” qui recevra, à la fois, le résultat avant + et après lorsqu’une notice traitée donnera un résultat différent + -m indique le nom et le chemin du programme d’alignement si ce n'est pas + celui par défaut + -r indique le nom du fichier contenant les notices Pascal ou Francis ayant + été modifiées parce que les notices originales ont provoqué une erreur +``` + + +### Correction + +#### 1 - Détection des erreurs + +Pour voir si votre fichier de résultats a des erreurs, un simple `grep` suffit. Pour le fichier `P95_out.txt` contenant les résultats bruts de Pascal 1995, la commande suivante permet de compter le nombre d’erreurs par type : +```bash +grep ' => ERREUR ' P95_out.txt | sort | uniq -c +``` +Si votre fichier est compressé avec `gzip`, cette commande devient : +```bash +gzip -cd P95_out.txt.gz | grep ' => ERREUR ' | sort | uniq -c +``` +Évidemment, s’il n’y a pas d’erreur, on s’arrête là. Autrement, on fait un premier passage avec `recupErreurs.pl` + +#### 2 - Premier passage + +Il consiste à traiter les mêmes notices Pascal ou Francis en indiquant dans quel fichier stocker les notices qui n'ont pas pu être corrigées. Si vous êtes parti du HFD des notices Pascal 1995 `Pascal.strd95.bib` et si vous compressez vos fichiers de résultats, la commande est : +```bash +recupErreurs.pl -h Pascal.strd95.bib -a P95_out.txt.gz -r rejetP95.txt | gzip -c9 > P95_out2.txt.gz +``` +Vous pouvez également créer un fichier de “log” avec l’option `-l` et vous devez donnez le nom, voire le chemin, du programme `matchStan2Istex.pl` si vous n’utilisez pas celui par défaut ou s’il n’est pas dans un répertoire déclaré dans la variable `PATH`. + +Si le fichier `rejetP95.txt` obtenu est vide, alors, la correction est terminée. Sinon, il faudra corriger les notices contenues dans ce fichier avant de passer à l’étape suivante. + +#### 3 - Deuxième passage + +La syntaxe de la commande est fondamentalement la même que pour le premier passage. Simplement, on substitue le nouveau fichier de résultats à l’ancien : +```bash +recupErreurs.pl -h Pascal.strd95.bib -a P95_out2.txt.gz -r rejetP95.txt | gzip -c9 > P95_out3.txt.gz +``` +Normalement, là, votre fichier de résultats est correct. En fait, on ne devrait plus avoir besoin de ce deuxième passage, comme il est dit plus bas. + + +### Types d’erreur + +#### 1 - Erreur de connexion + +Il arrive que la connexion à l’API ne se fasse pas ou qu’elle se passe mal. On obtient alors un code retour 500 avec différents messages d’erreur comme : + +```txt +500 Can't connect to api.istex.fr:443 (Bad hostname 'api.istex.fr') +500 Can't connect to api.istex.fr:443 (Échec temporaire dans la résolution du nom) +500 Internal Server Error +500 Status read failed: Connection reset by peer +500 Server closed connection without sending any data back +``` + +Dans certains cas, l’API renvoie effectivement une réponse, mais la connexion est coupée et on a un enregistrement JSON tronqué. L’analyse de cette réponse donnera également un message d’erreur : + +``` +ERREUR CONVERSION JSON -> PERL ! +``` + +Dans tous ces cas, on peut obtenir une réponse correcte en relançant l’alignement sur ces seules notices. + + +#### 2 - Erreur de syntaxe + +Certaines notices contiennent des champs avec une ou des erreurs qui font que la requête générée par le programme `matchStan2Istex.pl` ne suivra pas la syntaxe requise par l’API **Istex**. On a alors une erreur 400 : + +```txt +400 Bad Request +``` + +On trouve ces erreurs surtout dans les numéros de volume ou de fascicule ou dans les noms d’auteur, mais pas seulement. Dans l’exemple suivant, tiré de la notice Pascal `90-0351247`, le champ correspondant au deuxième auteur est : + +```sgml +AVIL#A (J. G. A.) +``` +Pour rappel, les notices ne sont pas en XML, mais en SGML et utilise des entités caractères pour les caractères accentués et les symboles. L’entité caractère `#` correspond au caractère dièse `#`. La partie de la requête consacrée aux auteur est alors : + +```txt +author.name:("PEREZ" OR "AVIL#A" OR "MARTINEZ") +``` + +Ce caractère `#` qui n'est pas encodé en `%23` provoque une erreur immédiate. + +Mais, normalement, **ce genre d’erreur ne devrait plus arriver** parce que la totalité des notices à l’origine de ces messages `400 Bad Request` ont été corrigées. + + +### Fichiers générés par `recupErreurs.pl` + +#### 1 - Fichier de notices rejetées + +Le nom de ce fichier est donné par l’option `-r`. Il contient pour chaque notice ayant donné une erreur 400 : + + - la requête générée par le programme `matchStan2Istex.pl` mise en commentaire + - la notice Inist au format Inist 1994 SGML + +La présence de la requête permet de la tester sur un navigateur Internet et, ainsi, trouver l’erreur. La notice pourra ensuite être corrigée (ce qui demande une bonne connaissance du format). + +Après correction, ce même fichier pourra être utilisé pour corriger le résultat de l’alignement. + +#### 2 - Fichier en sortie standard + +Ce fichier est strictement identique dans sa forme au fichier produit par le programme `matchStan2Istex.pl`. + +#### 3 - Fichier de “log” + +Ce fichier est optionnel. Si vous l’avez demandé avec l’option `-l`, vous obtiendrez, pour chaque notice testée, l’identifiant Inist de la notice et, si une modification a eu lieu, le résultat de l’alignement avant et après. + diff --git a/dedoublonnage/README.md b/dedoublonnage/README.md new file mode 100644 index 0000000..f6eedd4 --- /dev/null +++ b/dedoublonnage/README.md @@ -0,0 +1,51 @@ +Dédoublonnage de l’alignement Pascal-Francis / Istex +=============== + +Programme de dédoublonnage des résultats de l’alignement. + +Le programme `weedTei.pl` permet de repérer les doublons dans l’ensemble des fichiers de résultats de l’alignement et de choisir une notice **Inist** avec un score maximal pour chaque document **Istex** apparié. + + +### Usage + +```txt + weedTei3.pl -f fichier[,fichier]* -r répertoire [ -l log ] [ -x ] + weedTei3.pl -h +``` + +### Options + +```txt + -f indique le nom du ou des fichiers d’entrée (qui peuvent être des fichiers + compressés avec “gzip” ou “bzip2”). L’option est répétitive et il est possible + d’indiquer plusieurs noms de fichier en les séparant par des virgules (mais + sans espace entre eux). Si l’argument de l’option est un tiret “-”, alors la + liste des fichiers (pas leur contenu) est lue sur l’entrée standard + -h affiche cette aide + -l indique le nom du fichier “log” contenant la liste des appariements + supprimés + -r indique le nom du répertoire où seront créés les fichiers de sortie + portant le même nom que les fichiers d’entrée + -x accepte comme valides les appariements lorsque la valeur du score est + suivie d’un point d’exclamation (“!”) +``` + + +### Description + +Ce programme lit l'ensemble des fichiers de résultat de l’alignement, recherche les doublons avant de réécrire les fichiers dans un répertoire différent avec le même nom. Lorsqu’il y a un appariement en double, le programme choisit l'appariement avec le meilleur score et, en cas d’égalité, le premier traité. De ce fait, quand on compare un nouveau fichier aux anciens fichiers déjà dédoublonnés, il est préférable de faire passer les anciens fichiers en premier pour limiter les modifications dans ceux-ci. De la même façon, comme certaines notices de Pascal ont été reprises dans Francis, il est préférable de faire passer les fichiers Pascal en premier. +Dans les fichiers créés, les doublons rejetés sont marqués par un signe moins “-” ajouté après le score. Dans l’exemple suivant, on a le résultat pour 2 notices dont l’une est conservée, l’autre rejetée : + +```txt +***** 5.000 A 96-0127566 Adolescent pregnancy and subsequent obesity in african-american girls JOURNAL OF ADOLESCENT HEALTH ! ! ! 1994 15 6 491 494 SEGEL J.S. MCANARNEY, E.R. E47E5C8C67C62B0DA70B1CEF5AED43DA684A18DB ark:/67375/6H6-945TPDV9-D 10.1016/1054-139X(94)90497-Q 1054-139X(94)90497-Q 7811682 +****  4.444- A 95-0012606 Adolescent pregnancy and subsequent obesity in African-American girls Journal of adolescent health ! 1054-139X ! 1994 15 6 194 494 SEGEL J. S. MCANARNEY, E. R. E47E5C8C67C62B0DA70B1CEF5AED43DA684A18DB ark:/67375/6H6-945TPDV9-D 10.1016/1054-139X(94)90497-Q 1054-139X(94)90497-Q 7811682 +``` +Comme dans la documentation du programme `matchStan2Istex.pl`, les champs vides sont signalés par un point d’exclamation. + +Dans le cas de notices groupées où une notice décrit plusieurs articles, les doublons rejetés sont signalés en remplaçant la flèche en début de ligne ` ~~> ` par une flèche différente ` ::> `, comme dans l’exemple suivant : + +```txt + ::> 485 490 Christoph U. Lehmann M.D.|Jane Barr M.D.|Patricia J. Kelly M.D. Emergency department utilization by adolescents AE3EBD19A57CFD17B92295681E1B0F2FD4D62FAB ark:/67375/6H6-92BN6QVT-8 10.1016/1054-139X(94)90496-P 1054-139X(94)90496-P 7811681 + ::> 491 494 Jill S. Segel M.D.|Elizabeth R. McAnarney M.D. Adolescent pregnancy and subsequent obesity in African-American girls E47E5C8C67C62B0DA70B1CEF5AED43DA684A18DB ark:/67375/6H6-945TPDV9-D 10.1016/1054-139X(94)90497-Q 1054-139X(94)90497-Q 7811682 +``` + diff --git a/divers/README.md b/divers/README.md new file mode 100644 index 0000000..d827d3c --- /dev/null +++ b/divers/README.md @@ -0,0 +1,48 @@ +Utilitaire IhfdCat +=============== + +Programme de lecture de systèmes de fichiers **HFD**. + +Le programme `IhfdCat` permet d’extraire et d’envoyer sur la sortie standard les notices contenues dans un système de fichiers **HFD**. + + +### Usage + +```txt + IhfdCat fichier_HFD (fichier_HFD)* +``` + + +### Description + +Un fichier **HFD** est un système de fichiers destiné à archiver des enregistrements divers comme des notices bibliographiques. À partir d’un premier répertoire qui forme la racine du système de fichiers et qui lui donne son nom, on a de 1 à 100 répertoires fils maximum, nommés de `00.dd` à `99.dd` (`dd` pour *data directory*). Chacun de ces répertoire contient de 1 à 100 fichiers maximum, nommés de `00.df` à `99.df` (`df` pour *data file*). Ces fichiers peuvent être compressés par l’utilitaire `gzip`. Ils sont alors suffixés par `.z`. Finalement, chaque fichier contient de 1 à 100 enregistrements, un par ligne, précédés par un numéro et une tabulation. Le numéro est formé avec le numéro du répertoire, suivi du numéro du fichier et enfin, du numéro d’ordre de l’enregistrement dans le fichier, allant de `00` à `99`. Ainsi, la douzième notice du fichier `43.df` du répertoire `07.dd` aura le numéro `074311`. Dans le cas de la base Pascal 1995, le fichier **HFD** est nommé `Pascal.strd95.bib`, avec `strd` pour indiquer que les notices sont au format Inist Standard 1994 et l’extension `.bib` pour indiquer que ce sont des notices bibliographiques. L’arborescence de ce fichier **HFD** est schématisé dans la figure suivante : + +```txt + Pascal.strd95.bib + ├── 00.dd + │   ├── 00.df.z + │   ├── 01.df.z + │   ├── 02.df.z + │   ... + │   └── 99.df.z + ├── 01.dd + │   ├── 00.df.z + │   ├── 01.df.z + │   ├── 02.df.z + │   ... + │   └── 99.df.z + ... + └── 49.dd + ├── 00.df.z + ├── 01.df.z + ├── 02.df.z + ... + └── 53.df.z +``` + +Ce fichier **HFD** a 50 répertoires fils, de `00.dd` à `49.dd`, le dernier répertoire ayant 54 fichiers compressés, de `00.df.z` à `53.df.z`. Ce dernier fichier contient 69 notices, la dernière numérotée `495368`. + + + + + diff --git a/generation_tei/README.md b/generation_tei/README.md new file mode 100644 index 0000000..0b649ce --- /dev/null +++ b/generation_tei/README.md @@ -0,0 +1,113 @@ +Génération de fichiers d’enrichissement TEI +=============== + +Programme de génération de fichiers au format TEI pour la base Istex. + +Le programme `alignment2tei.pl` permet, à partir des résultats dédoublonnés de l’alignement Pascal/Francis - Istex, de générer un fichier d’enrichissement au format TEI. Les fichiers ainsi générés peuvent être placés directement dans un système de répertoires à 4 niveaux pour pouvoir intégrer la base **Istex**. + + +### Usage + +```txt + alignment2tei.pl -f (fichier|-) -a fichier_align -d date -v version [ -l log ] + [ -c répertoire_cc ] [ -r (0|1) ] [ -x ] + alignment2tei.pl -h fichier_HFD -a fichier_align -d date -v version [ -l log ] + [ -c répertoire_cc ] [ -r (0|1) ] [ -x ] + alignment2tei.pl -i +``` + +### Options + +```txt + -a indique le nom du fichier résultat de l’alignement (qui peut être un + fichier compressé avec “gzip” ou “bzip2”) + -c indique le nom du répertoire contenant les tables de correspondance + entre codes de classement Pascal ou Francis et verbalisation (“CC” par + défaut) + -d indique la date à laquelle a été fait l’alignement, en utilisant le format + “aaaa-mm-jj” (par ex. “2020-09-28”) + -f indique le nom du fichier de notices Pascal/Francis (qui peut être un + fichier compressé avec “gzip” ou “bzip2”). Pour utiliser l’entrée standard, + mettre un tiret “-” comme argument + -h indique le nom du fichier HFD de notices Pascal/Francis servant d’entrée + au programme + -i affiche cette aide + -l indique le nom du fichier “log” recevant la liste des notices INIST + appariées ainsi que les identifiants des documents ISTEX correspondants + -r crée l'organisation hiérarchique en 4 répertoires d’ISTEX si la valeur + est 1 (valeur par défaut). Autrement, les fichiers sont créés dans le + répertoire courant + -v indique le numéro de version du programme “matchStan2Istex.pl” utilisé + pour réaliser l’alignement + -x accepte comme valides les appariements lorsque la valeur du score est + suivie d’un point d’exclamation (“!”) +``` + + +### Description + +Le programme lit le fichier de résultat de l'alignement, après correction (si nécessaire) et dédoublonnage, établit la liste des notices **Inist** et documents **Istex** appariés et, à partir des informations extraites des notices **Inist**, génère pour chaque document **Istex** un fichier XML au format TEI contenant des données identifiant la notice bibliographique et le document lui-même, ainsi que les codes de classement, avec leur verbalisation en français et en anglais pour chaque niveau hiérarchique du code en question, comme dans l’exemple suivant avec le code `001B30B80P` : + +```xml + + + Physique + + + Physique atomique et moléculaire + + + Propriétés atomiques et interactions avec les photons + + + Interactions des photons avec les atomes + + + Refroidissement optique d'atomes; piégeage + + +``` + +On y trouve aussi les mots-clés extraits de la notice bibliographique, également en français et en anglais, avec pour certains descripteurs leur nature ou fonction, ou leur statut dans la base (i.e. candidat descripteur ou terme libre), comme dans l’exemple suivant : + +```xml + + Lithium + + + + + + Cation + + + + + Constante Rydberg + + + Spectrométrie microonde + + + + + + Candidat descripteur + + + +``` + +Pour verbaliser les codes de classement, le programme utilise plusieurs tables de correspondance, par défaut présentes dans le répertoire `CC` ou dans le répertoire défini par l’option `-c`. Ces tables contiennent : + + - la verbalisation en français et en anglais des différents codes Pascal ou Francis : + - `verbFrancisEn.txt` + - `verbFrancisFr.txt` + - `verbPascalEn.txt` + - `verbPascalFr.txt` + - les équivalences entre codes pour avoir une verbalisation unique quelle que soit la date de production de la notice : + - `equivCCFrancis.txt` + - `equivCCPascal.txt` + - la liste des liens vers l’application Lodex définissant les domaines scientifiques : + - `liensLodex.txt` +