Librairies communes de consultation et échantillonage de corpus sur API-ISTEX
etc | 8 years ago | ||
pool_cache | 8 years ago | ||
test | 9 years ago | ||
README.md | 8 years ago | ||
README_ressources_tierces_parties.md | 8 years ago | ||
__init__.py | 8 years ago | ||
api.py | 8 years ago | ||
corpusdirs.py | 8 years ago | ||
field_combo_count.py | 8 years ago | ||
field_value_lists.py | 8 years ago | ||
ids_to_table.py | 8 years ago | ||
libconsulte.conf | 8 years ago | ||
sampler.py | 8 years ago |
3 routines pour requêter/échantilloner/récupérer des documents
sampler.py
pour piocher une liste d'ID au hasard, (/!\ avec représentativité!)
corpusdirs.py
pour récupérer les fulltexts et métadonnées pour une liste d'IDs
L'essentiel tient en 2 commandes:
# échantilloner 100 docs par date python3 sampler.py -n 100 -c publicationDate -o tab > mes_100_documents.tsv # récupérer dans mon_nouveau_corpus python3 corpusdirs.py mon_nouveau_corpus --from_table mes_100_documents.tsv
Ici on veut 100 documents avec un peu de chaque période dans la base Istex (par exemple pour tester leur qualité OCR).
python3 sampler.py -n 100 -c publicationDate -o tab > mes_100_documents.tsv
-o tab
Ensuite on veut obtenir les documents : avec corpusdirs.py
, on peut lancer les téléchargements dans un nouveau dossier de notre choix.
python3 corpusdirs.py mon_nouveau_corpus --from_table mes_100_documents.tsv
mes_100_documents.tsv
obtenue de l'échantilloneur comme liste de documents à télécharger/traiter.Tout cela sera stocké sous mon_nouveau_corpus/data
avec la structure suivante:
tree mon_nouveau_corpus mon_nouveau_corpus ├── data │ ├── A-pdfs │ │ ├── els-63DD13DF0D6186E15D0C15A3CF0E68FC01BC22F8.pdf │ │ ├── wil-2027F65F05E2F0DDEA37C64869B5729F5CDA8B3C.pdf │ │ ├── oup-652D02E55E57E3091F4D2B2B28219844A770F83D.pdf │ │ └── (...) │ ├── B-xmlnatifs │ │ ├── els-63DD13DF0D6186E15D0C15A3CF0E68FC01BC22F8.xml │ │ ├── wil-2027F65F05E2F0DDEA37C64869B5729F5CDA8B3C.xml │ │ ├── oup-652D02E55E57E3091F4D2B2B28219844A770F83D.xml │ │ └── (...) │ └── C-goldxmltei │ ├── els-63DD13DF0D6186E15D0C15A3CF0E68FC01BC22F8.tei.xml │ ├── wil-2027F65F05E2F0DDEA37C64869B5729F5CDA8B3C.tei.xml │ ├── oup-652D02E55E57E3091F4D2B2B28219844A770F83D.tei.xml │ └── (...) └── meta ├── infos.tab # tableau TSV résumé (date, titre, auteur 1, ID, corpus...) ├── basenames.ls # liste des noms de fichiers └── shelf_triggers.json # liste des sous-dossiers remplis
Chaque sous-dossier s'appelle "shelf" ou "étagère". Il est faisable d'en ajouter d'autres dans la configuration de corpusdirs.
L'échantilloneur a 3 types de sorties possibles, selon l'option -o
sampler.py -o ids -n 20 > my_ids.txt
echantillon_$date-$heure
sampler.py -o docs -n 20
sampler.py -o tab -n 20 > my_tab.tsv
istex_id | corpus | pub_period | pdfver | ... | title |
63DD13D... | els | [1980 TO 1989] | 1.2 | ... | Measurements of the total transmittance of the solar radiation... |
2027F65... | wil | [2000 TO *] | 1.4 | ... | Appropriate dosing of antiarrhythmic drugs in Japan... |
652D02E... | oup | [* TO 1959] | 1.2 | ... | "Once upon a time." |
etc | etc | etc | etc | etc | etc |
Pour calculer la représentativité, l'échantilloneur doit connaître les facettes possibles d'un champ. Si on lui donne comme critère de représentativité corpusName
, il va s'informer en interrogeant la route facette correspondante de l'API. Pour d'autres champs, il utilise des listes des valeurs possibles (toutes comme pour categories.wos ou une partition en paquets pour les facettes de type range, les langues et les genres). Ces listes sont inscrites dans le module field_value_lists.py
Les champs utilisables comme critère d'échantillonnage sont:
corpusName
qualityIndicators.pdfVersion
qualityIndicators.refBibsNative
language
genre
categories.wos
publicationDate
copyrightDate
qualityIndicators.pdfCharCount
api.py
gère toute l'interaction lowlevel avec l'API.
Les fonctions principales sont les suivantes :
search(q, limit=None, n_docs=None, outfields=('title', 'host.issn', 'fulltext'), i_from=0) terms_facet(facet_name, q='*') count(q, api_conf={'host': 'api.istex.fr', 'route': 'document'}) write_fulltexts(doc_id, tgt_dir='.', login, passw, api_types=['fulltext/pdf', 'metadata/xml']`
Les modules sampler.py et corpusdirs.py l'importent et utilisent ces fonctions.
Cette librairie importe:
# pour plus d'infos: python3 sampler.py -h python3 corpusdirs.py -h