.. | |||
README.md | 2 years ago | ||
recupErreurs.pl | 2 years ago |
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
.
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
-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
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 :
grep ' => ERREUR ' P95_out.txt | sort | uniq -c
Si votre fichier est compressé avec gzip
, cette commande devient :
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
.
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 :
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 donner 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.
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 :
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.
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 :
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.
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 :
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 :
<fA11 dir=021000><s1>AVIL#A (J. G. A.)</s1></fA11>
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 auteurs est alors :
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.
recupErreurs.pl
Le nom de ce fichier est donné par l’option -r
. Il contient pour chaque notice ayant donné une erreur 400 :
matchStan2Istex.pl
mise en commentaireLa présence de la requête permet de la tester sur un navigateur Internet et, ainsi, de 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.
Ce fichier est strictement identique dans sa forme au fichier produit par le programme matchStan2Istex.pl
.
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.