diff --git a/corpusdirs.py b/corpusdirs.py index 55fd690..ea66a02 100755 --- a/corpusdirs.py +++ b/corpusdirs.py @@ -691,7 +691,7 @@ Données: 3 formats, rangés dans /data/ - .pdf, - .xml (natif) - - et .tei.xml (pub2tei) + - optionnel: .tei.xml (via pub2tei) Position dans le système de fichier: sous ./corpus_name @@ -729,7 +729,7 @@ ) # - parser.add_argument('--from_table', + parser.add_argument('-T', '--from_table', metavar='mes_docs.tsv', help="""tableau en entrée (tout tsv avec en COL1 istex_id et en COL2 le nom du lot... (par ex: la sortie détaillée de l'échantilloneur sampler.py)""", type=str, @@ -737,6 +737,18 @@ required=True, action='store') + parser.add_argument('-d', '--dtd_repair', + help="relie les références DTD internes aux XML natifs à une copie locale de cette DTD", + default=False, + required=False, + action='store_true') + + parser.add_argument('-t', '--transform_to_tei', + help="provoque l'ajout d'un dossier sous mon_corpus/data avec les transfos Pub2TEI des XML natifs (requiert linux et saxonb-xslt)", + default=False, + required=False, + action='store_true') + parser.add_argument('--debug', metavar='1', help="level of verbose/debug infos [default:0]", @@ -791,6 +803,7 @@ tgt_dir = tgt_dir, api_types = [the_api_type] ) + print("MAKE_SET: saved docs into CORPUS_HOME:%s" % cobj.name) if debug > 0: print(" (=> target dir:%s)" % tgt_dir) @@ -803,25 +816,28 @@ # persistance du statut des 2 dossiers créés cobj.save_shelves_status() - + + + if args.dtd_repair: + # copie en changeant les pointeurs dtd + print("***DTD LINKING***") + cobj.dtd_repair(debug_lvl = debug) + # (4/4) conversion tei (type gold biblStruct) ------------------------ - # copie en changeant les pointeurs dtd - print("***DTD LINKING***") - cobj.dtd_repair(debug_lvl = debug) - - print("***XML => TEI.XML CONVERSION***") - - # créera le dossier C-goldxmltei - cobj.pub2goldtei(debug_lvl = debug) # conversion - - cobj.assert_docs('GTEI') - - # persistence du statut du dossier créé - cobj.save_shelves_status() - - # voilà ! - cobj.print_corpus_info() - print("Corpus dirs successfully created in %s" % cobj.cdir) + if args.transform_to_tei: + print("***XML => TEI.XML CONVERSION***") + + # créera le dossier C-goldxmltei + cobj.pub2goldtei(debug_lvl = debug) # conversion + + cobj.assert_docs('GTEI') + + # persistence du statut du dossier créé + cobj.save_shelves_status() + + # voilà ! + cobj.print_corpus_info() + print("Corpus dirs successfully created in %s" % cobj.cdir) diff --git a/field_combo_count.py b/field_combo_count.py index 06343a3..1b14c4c 100644 --- a/field_combo_count.py +++ b/field_combo_count.py @@ -153,6 +153,38 @@ def pooling(crit_fields, verbose=False): + """ + Sorte de tableau croisé: compte le nombre de docs pour chaque combinaison de critères + + Renvoie un dict avec ces décomptes et les totaux + + Exemple pour les critères corpusName et pdfCharCount + { + "f": { + "corpusName:bmj AND pdfCharCount:[* TO 1999]": 24524, + "corpusName:bmj AND pdfCharCount:[2000 TO *]": 662848, + "corpusName:brill-journals AND pdfCharCount:[* TO 1999]": 10949, + "corpusName:brill-journals AND pdfCharCount:[2000 TO *]": 119318, + "corpusName:elsevier AND pdfCharCount:[* TO 1999]": 275461, + "corpusName:elsevier AND pdfCharCount:[2000 TO *]": 5740132, + "corpusName:nature AND pdfCharCount:[* TO 1999]": 332156, + "corpusName:nature AND pdfCharCount:[2000 TO *]": 45139, + "corpusName:oup AND pdfCharCount:[* TO 1999]": 58662, + "corpusName:oup AND pdfCharCount:[2000 TO *]": 1385591, + "corpusName:springer AND pdfCharCount:[* TO 1999]": 61973, + "corpusName:springer AND pdfCharCount:[2000 TO *]": 2242902, + "corpusName:wiley AND pdfCharCount:[* TO 1999]": 593998, + "corpusName:wiley AND pdfCharCount:[2000 TO *]": 4044204 + }, + "totd": 15982692 # nombre de docs au total dans la base + "nd": 15597857, # nombre de docs pour l'ensemble des critères + "nr": 15597857, # nombre de réponses pour l'ensemble des critère + # (intéressant pour les champs "QCM") + } + + NB: les choix de fourchettes et les valeurs de facettes sont + configurables dans field_value_lists.py + """ ####### POOLING ######## # N_reponses = 0 @@ -246,7 +278,7 @@ print("---------------------------------", file=stderr) # resulting pool info in f + various totals - return {'f':abs_freqs, 'nr':N_reponses, 'nd':N_workdocs, 'totd':doc_grand_total} + return {"f":abs_freqs, "nr":N_reponses, "nd":N_workdocs, "totd":doc_grand_total} if __name__ == "__main__": # arguments cli @@ -255,5 +287,5 @@ # run json = pooling(args.criteria_list, verbose=args.verbose) - # sortie - print(json) \ No newline at end of file + # sortie: en json valide et "pretty" + print(dumps(json, indent=2, sort_keys=True)) \ No newline at end of file diff --git a/sampler.py b/sampler.py index 3d95780..2c24620 100755 --- a/sampler.py +++ b/sampler.py @@ -20,8 +20,6 @@ Exemple *constraints*: "qualityIndicators.refBibsNative:true" "qualityIndicators.pdfCharCount:[500 TO *]" - -Assumes LC_ALL (aka sys.stdout.encoding) is 'UTF-8' """ __author__ = "Romain Loth" __copyright__ = "Copyright 2014-5 INIST-CNRS (ISTEX project)" @@ -31,7 +29,7 @@ __status__ = "Dev" # imports standard -from sys import argv, stderr +from sys import argv, stderr, stdout from re import sub, search, escape from random import shuffle from itertools import product @@ -398,7 +396,7 @@ # pour infos if verbose: - print(" ... drawing among %i docs :\n ... picked => %s" % (len(all_indices), local_tirage)) + print(" ... drawing among %i docs :\n ... picked => %s" % (len(all_indices), local_tirage), file=stderr) for indice in local_tirage: # ----------------- api.search(...) ---------------------------- @@ -768,7 +766,10 @@ # run stdoutput = full_run(arglist = argv[1:]) + enc = stdout.encoding + # output lines for line in stdoutput: - print(line) + # line contient de l'UTF-8 + print(line.encode(enc, errors="xmlcharrefreplace").decode(enc)) \ No newline at end of file