WP44: corpus v2 metadata (7.11 M core works), configurable DuckDB memory
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
13 changed files +263 −195
modified
bibliometrics/02_collaboration.py
+1 −1
@@ -10,7 +10,7 @@ import argparse, os, duckdb | ||
| 10 | 10 | def main(): |
| 11 | 11 | ap = argparse.ArgumentParser(); ap.add_argument("--root", required=True); a = ap.parse_args(); R = a.root |
| 12 | 12 | out = os.path.join(R, "results/bibliometrics"); os.makedirs(out, exist_ok=True) |
| 13 | − con = duckdb.connect(os.path.join(R, "data/processed/wp44.duckdb"), read_only=True); con.execute("SET threads TO 20; SET memory_limit='60GB';") | |
| 13 | + con = duckdb.connect(os.path.join(R, "data/processed/wp44.duckdb"), read_only=True); con.execute("SET threads TO 20; SET memory_limit='" + os.environ.get("WP44_DUCKDB_MEM", "60GB") + "';") | |
| 14 | 14 | con.execute("CREATE OR REPLACE TEMP VIEW E AS SELECT * FROM corpus_works WHERE eligible") |
| 15 | 15 | con.execute(f"""COPY (SELECT publication_year AS year, period, count(*) n, round(avg(n_authors),3) mean_authors, quantile_cont(n_authors,0.5) med_authors, |
| 16 | 16 | sum((n_authors=1)::int) single, sum((n_authors>=5)::int) five_plus, sum((n_authors>=10)::int) ten_plus, sum((n_countries>=2)::int) intl, |
modified
bibliometrics/03_citation_impact.py
+1 −1
@@ -14,7 +14,7 @@ import argparse, os, duckdb | ||
| 14 | 14 | def main(): |
| 15 | 15 | ap = argparse.ArgumentParser(); ap.add_argument("--root", required=True); a = ap.parse_args(); R = a.root |
| 16 | 16 | out = os.path.join(R, "results/bibliometrics"); os.makedirs(out, exist_ok=True) |
| 17 | − con = duckdb.connect(os.path.join(R, "data/processed/wp44.duckdb")); con.execute("SET threads TO 20; SET memory_limit='60GB';") | |
| 17 | + con = duckdb.connect(os.path.join(R, "data/processed/wp44.duckdb")); con.execute("SET threads TO 20; SET memory_limit='" + os.environ.get("WP44_DUCKDB_MEM", "60GB") + "';") | |
| 18 | 18 | con.execute("""CREATE OR REPLACE TABLE work_citation_windows AS |
| 19 | 19 | WITH E AS (SELECT id, preprint_work_id, publication_year AS y, coalesce(type, 'unknown') AS type, coalesce(primary_subfield_id, -1) AS sf, cited_by_count, fwci |
| 20 | 20 | FROM corpus_works WHERE eligible AND NOT e6_retracted), |
added
data/metadata/dblp_only_counts.csv
+54 −0
@@ -0,0 +1,54 @@ | ||
| 1 | +year,rec_type,n,with_doi | |
| 2 | +2018,article,22769,19614 | |
| 3 | +2018,book,89,4 | |
| 4 | +2018,data,246,245 | |
| 5 | +2018,incollection,171,115 | |
| 6 | +2018,inproceedings,11322,508 | |
| 7 | +2018,phdthesis,4430,43 | |
| 8 | +2019,article,29350,26379 | |
| 9 | +2019,book,115,4 | |
| 10 | +2019,data,471,444 | |
| 11 | +2019,incollection,30,5 | |
| 12 | +2019,inproceedings,11656,546 | |
| 13 | +2019,phdthesis,4162,35 | |
| 14 | +2020,article,37639,34805 | |
| 15 | +2020,book,62,5 | |
| 16 | +2020,data,816,807 | |
| 17 | +2020,incollection,52,5 | |
| 18 | +2020,inproceedings,13639,610 | |
| 19 | +2020,phdthesis,3857,79 | |
| 20 | +2021,article,39300,36294 | |
| 21 | +2021,book,80,5 | |
| 22 | +2021,data,972,927 | |
| 23 | +2021,incollection,47,0 | |
| 24 | +2021,inproceedings,15423,588 | |
| 25 | +2021,phdthesis,4222,86 | |
| 26 | +2022,article,46967,43149 | |
| 27 | +2022,book,70,1 | |
| 28 | +2022,data,1335,1265 | |
| 29 | +2022,incollection,33,2 | |
| 30 | +2022,inproceedings,19180,574 | |
| 31 | +2022,phdthesis,4133,138 | |
| 32 | +2023,article,56159,51893 | |
| 33 | +2023,book,88,1 | |
| 34 | +2023,data,1773,1691 | |
| 35 | +2023,incollection,21,21 | |
| 36 | +2023,inproceedings,18807,827 | |
| 37 | +2023,phdthesis,3648,97 | |
| 38 | +2024,article,66262,61366 | |
| 39 | +2024,book,60,2 | |
| 40 | +2024,data,2471,2372 | |
| 41 | +2024,incollection,23,0 | |
| 42 | +2024,inproceedings,24391,646 | |
| 43 | +2024,phdthesis,3343,69 | |
| 44 | +2025,article,53124,47735 | |
| 45 | +2025,book,44,0 | |
| 46 | +2025,data,3835,3782 | |
| 47 | +2025,incollection,41,0 | |
| 48 | +2025,inproceedings,26050,692 | |
| 49 | +2025,phdthesis,2099,1 | |
| 50 | +2026,article,16280,11901 | |
| 51 | +2026,book,21,2 | |
| 52 | +2026,data,2765,2741 | |
| 53 | +2026,inproceedings,18840,3473 | |
| 54 | +2026,phdthesis,398,0 | |
modified
data/metadata/linkage_report.json
+23 −24
@@ -1,45 +1,44 @@ | ||
| 1 | 1 | { |
| 2 | − "created": "2026-11-03T20:50:56.182276+00:00", | |
| 3 | − "oa_cs_records": 15490159, | |
| 4 | − "oa_cs_distinct_ids": 15490159, | |
| 2 | + "created": "2026-11-03T23:03:10.160666+00:00", | |
| 3 | + "oa_cs_records": 16592966, | |
| 4 | + "oa_cs_distinct_ids": 16592966, | |
| 5 | 5 | "dblp_2018_2026": 4347365, |
| 6 | 6 | "dblp_with_doi": 4052326, |
| 7 | 7 | "dblp_with_arxiv": 0, |
| 8 | 8 | "link_dblp_oa": { |
| 9 | − "title_year": 179990, | |
| 10 | − "doi": 2562431 | |
| 9 | + "title_year": 141062, | |
| 10 | + "doi": 3639848 | |
| 11 | 11 | }, |
| 12 | − "dblp_linked_distinct": 2736903, | |
| 13 | − "dblp_unlinked": 1610462, | |
| 12 | + "dblp_linked_distinct": 3774184, | |
| 13 | + "dblp_unlinked": 573181, | |
| 14 | 14 | "dblp_unlinked_by_type": { |
| 15 | − "phdthesis": 26841, | |
| 16 | − "incollection": 3362, | |
| 17 | − "inproceedings": 477235, | |
| 18 | − "book": 1398, | |
| 19 | − "article": 1084640, | |
| 20 | − "data": 16986 | |
| 15 | + "incollection": 418, | |
| 16 | + "book": 629, | |
| 17 | + "phdthesis": 30292, | |
| 18 | + "inproceedings": 159308, | |
| 19 | + "article": 367850, | |
| 20 | + "data": 14684 | |
| 21 | 21 | }, |
| 22 | − "dblp_unlinked_with_doi_in_slim": 1077407, | |
| 22 | + "dblp_unlinked_with_doi_in_slim": 1605, | |
| 23 | 23 | "arxiv_cs_records": 915115, |
| 24 | 24 | "arxiv_created_2018_2026": 890852, |
| 25 | 25 | "link_arxiv_oa": { |
| 26 | − "arxiv_id": 792672, | |
| 27 | − "doi": 520, | |
| 28 | − "title_year": 2143 | |
| 26 | + "title_year": 1768, | |
| 27 | + "doi": 783, | |
| 28 | + "arxiv_id": 914406 | |
| 29 | 29 | }, |
| 30 | − "arxiv_linked_distinct": 744680, | |
| 30 | + "arxiv_linked_distinct": 864677, | |
| 31 | 31 | "acl_records": 135558, |
| 32 | 32 | "acl_2018_2026": 85625, |
| 33 | 33 | "link_acl_oa": { |
| 34 | − "doi": 57474, | |
| 35 | − "title_year": 14904 | |
| 34 | + "doi": 58174, | |
| 35 | + "title_year": 15004 | |
| 36 | 36 | }, |
| 37 | − "acl_linked_distinct_2018_2026": 72223, | |
| 37 | + "acl_linked_distinct_2018_2026": 72949, | |
| 38 | 38 | "needed_oa_ids_second_pass": { |
| 39 | − "dblp_doi": 1077406, | |
| 40 | − "arxiv_doi": 39200 | |
| 39 | + "dblp_doi": 1605 | |
| 41 | 40 | }, |
| 42 | 41 | "slim_total": 464765485, |
| 43 | 42 | "slim_cs_any_2018_2026": 15490159, |
| 44 | − "seconds": 10 | |
| 43 | + "seconds": 12 | |
| 45 | 44 | } |
| \ No newline at end of file | ||
modified
data/metadata/prisma_counts.json
+79 −69
@@ -1,98 +1,108 @@ | ||
| 1 | 1 | { |
| 2 | − "generated": "2026-11-03T21:08:38.910490+00:00", | |
| 2 | + "generated": "2026-11-03T23:03:34.908225+00:00", | |
| 3 | 3 | "window": [ |
| 4 | 4 | "2018-01-01", |
| 5 | 5 | "2026-11-02" |
| 6 | 6 | ], |
| 7 | 7 | "boundary": "2022-11-30", |
| 8 | 8 | "identified": { |
| 9 | − "openalex_cs_topic_2018_2026_pass1": 15490159, | |
| 10 | − "openalex_total_records_loaded": 15490159, | |
| 9 | + "openalex_cs_topic_2018_2026_pass1": 16592966, | |
| 10 | + "openalex_total_records_loaded": 16592966, | |
| 11 | 11 | "dblp_2018_2026": 4347365, |
| 12 | 12 | "arxiv_cs_2018_2026": 890852, |
| 13 | 13 | "acl_2018_2026": 85625 |
| 14 | 14 | }, |
| 15 | 15 | "linked": { |
| 16 | − "dblp_to_openalex": 2736903, | |
| 17 | − "arxiv_to_openalex": 744680, | |
| 18 | − "acl_to_openalex": 72256, | |
| 19 | − "dblp_only_no_openalex_record": 1610462 | |
| 16 | + "dblp_to_openalex": 3774184, | |
| 17 | + "arxiv_to_openalex": 864677, | |
| 18 | + "acl_to_openalex": 73054, | |
| 19 | + "dblp_only_no_openalex_record": 573181 | |
| 20 | 20 | }, |
| 21 | 21 | "excluded": { |
| 22 | − "e1_outside_window": 160, | |
| 23 | − "e2_type": 3961633, | |
| 24 | − "e3_xpac": 3950876, | |
| 25 | − "e4_no_title": 16426, | |
| 26 | − "e5_duplicate": 114115, | |
| 27 | − "e6_retracted": 25165, | |
| 28 | − "xpac_kept_dblp": 87288 | |
| 22 | + "e1_outside_window": 59453, | |
| 23 | + "e2_type": 3995235, | |
| 24 | + "e3_xpac": 3974822, | |
| 25 | + "e4_no_title": 16442, | |
| 26 | + "e5_duplicate": 120147, | |
| 27 | + "e7_generic_deposit": 1277584, | |
| 28 | + "e6_retracted": 28587, | |
| 29 | + "xpac_kept_dblp": 74771 | |
| 29 | 30 | }, |
| 30 | 31 | "excluded_e2_by_type": { |
| 31 | − "dataset": 2775759, | |
| 32 | − "other": 522654, | |
| 32 | + "dataset": 2779058, | |
| 33 | + "other": 538613, | |
| 33 | 34 | "libguides": 191658, |
| 34 | − "software": 177500, | |
| 35 | − "conference-abstract": 66267, | |
| 36 | − "peer-review": 60176, | |
| 37 | − "paratext": 39162, | |
| 38 | − "reference-entry": 32247, | |
| 39 | − "editorial": 24907, | |
| 40 | − "supplementary-materials": 18882, | |
| 41 | − "erratum": 17340, | |
| 42 | − "standard": 10113, | |
| 43 | − "book-review": 9517, | |
| 44 | − "retraction": 8217, | |
| 45 | − "data-paper": 5255, | |
| 46 | − "letter": 1979 | |
| 35 | + "software": 177515, | |
| 36 | + "conference-abstract": 68101, | |
| 37 | + "peer-review": 60180, | |
| 38 | + "paratext": 41468, | |
| 39 | + "reference-entry": 33290, | |
| 40 | + "editorial": 29543, | |
| 41 | + "erratum": 20850, | |
| 42 | + "supplementary-materials": 18946, | |
| 43 | + "standard": 10125, | |
| 44 | + "book-review": 9524, | |
| 45 | + "retraction": 8924, | |
| 46 | + "data-paper": 5308, | |
| 47 | + "letter": 2132 | |
| 47 | 48 | }, |
| 48 | 49 | "excluded_sequential": { |
| 49 | − "e1_outside_window": 160, | |
| 50 | − "e2_type": 3961589, | |
| 51 | − "e3_xpac": 1421692, | |
| 52 | − "e4_no_title": 1188, | |
| 53 | − "e5_duplicate": 106928 | |
| 50 | + "e1_outside_window": 59453, | |
| 51 | + "e2_type": 3994472, | |
| 52 | + "e3_xpac": 1430851, | |
| 53 | + "e4_no_title": 1193, | |
| 54 | + "e5_duplicate": 114421, | |
| 55 | + "e7_generic_deposit": 473549 | |
| 54 | 56 | }, |
| 55 | − "after_exclusions": 9998602, | |
| 56 | − "cs_core_eligible": 6403238, | |
| 57 | − "cs_penumbra_eligible_otherwise": 3595364, | |
| 57 | + "after_exclusions": 10519027, | |
| 58 | + "version_relationship": { | |
| 59 | + "arxiv_id": 13175, | |
| 60 | + "title_year": 84776 | |
| 61 | + }, | |
| 62 | + "cs_core_eligible": 7110289, | |
| 63 | + "cs_penumbra_eligible_otherwise": 3402475, | |
| 58 | 64 | "eligible_by_period": { |
| 59 | − "pre": 1367, | |
| 60 | − "post": 3457315, | |
| 61 | − "baseline": 2944556 | |
| 65 | + "pre": 1864, | |
| 66 | + "post": 3704028, | |
| 67 | + "baseline": 3404397 | |
| 62 | 68 | }, |
| 63 | 69 | "eligible_by_year": { |
| 64 | − "2018": 561564, | |
| 65 | − "2019": 600167, | |
| 66 | − "2020": 612005, | |
| 67 | − "2021": 604393, | |
| 68 | − "2022": 610670, | |
| 69 | − "2023": 678150, | |
| 70 | − "2024": 785101, | |
| 71 | − "2025": 973274, | |
| 72 | − "2026": 977914 | |
| 70 | + "2018": 642661, | |
| 71 | + "2019": 695209, | |
| 72 | + "2020": 708854, | |
| 73 | + "2021": 710953, | |
| 74 | + "2022": 699308, | |
| 75 | + "2023": 784990, | |
| 76 | + "2024": 901406, | |
| 77 | + "2025": 1065569, | |
| 78 | + "2026": 901339 | |
| 73 | 79 | }, |
| 74 | 80 | "eligible_by_type": { |
| 75 | − "article": 3192312, | |
| 76 | − "conference-paper": 1840499, | |
| 77 | − "preprint": 624265, | |
| 78 | − "book-chapter": 335735, | |
| 79 | − "dissertation": 258440, | |
| 80 | − "report": 54120, | |
| 81 | − "book": 52139, | |
| 82 | − "review": 25251, | |
| 83 | − "other": 17387, | |
| 84 | − "software-paper": 2350, | |
| 85 | − "book-review": 615, | |
| 86 | − "data-paper": 125 | |
| 81 | + "article": 3656399, | |
| 82 | + "conference-paper": 2138761, | |
| 83 | + "preprint": 618946, | |
| 84 | + "book-chapter": 343079, | |
| 85 | + "dissertation": 237332, | |
| 86 | + "book": 47825, | |
| 87 | + "report": 33064, | |
| 88 | + "review": 28323, | |
| 89 | + "software-paper": 3542, | |
| 90 | + "other": 1661, | |
| 91 | + "book-review": 1197, | |
| 92 | + "data-paper": 160 | |
| 87 | 93 | }, |
| 88 | 94 | "eligible_membership": { |
| 89 | − "in_dblp": 2640780, | |
| 90 | − "cs_primary": 5619140, | |
| 91 | − "arxiv_linked": 709460, | |
| 92 | − "in_acl": 70078, | |
| 93 | − "has_abstract": 4867840, | |
| 94 | − "has_references": 3715037, | |
| 95 | − "retracted_flagged": 14412 | |
| 95 | + "in_dblp": 3608016, | |
| 96 | + "cs_primary": 5322535, | |
| 97 | + "arxiv_linked": 802308, | |
| 98 | + "in_acl": 70033, | |
| 99 | + "has_abstract": 5385235, | |
| 100 | + "has_references": 4614417, | |
| 101 | + "retracted_flagged": 17094 | |
| 102 | + }, | |
| 103 | + "eligible_date_precision": { | |
| 104 | + "month": 5703718, | |
| 105 | + "year": 1406571 | |
| 96 | 106 | }, |
| 97 | − "strict_core_dblp_and_cs_primary": 1868188 | |
| 107 | + "strict_core_dblp_and_cs_primary": 1832623 | |
| 98 | 108 | } |
| \ No newline at end of file | ||
modified
experiments/emerging_detection.py
+1 −1
@@ -78,7 +78,7 @@ def main(): | ||
| 78 | 78 | ap = argparse.ArgumentParser(); ap.add_argument("--root", required=True); ap.add_argument("--last-month", default="2026-06") |
| 79 | 79 | ap.add_argument("--horizon", type=int, default=12); a = ap.parse_args(); R = a.root |
| 80 | 80 | out = os.path.join(R, "results/emerging"); os.makedirs(out, exist_ok=True) |
| 81 | − con = duckdb.connect(os.path.join(R, "data/processed/wp44.duckdb")); con.execute("SET threads TO 20; SET memory_limit='60GB';") | |
| 81 | + con = duckdb.connect(os.path.join(R, "data/processed/wp44.duckdb")); con.execute("SET threads TO 20; SET memory_limit='" + os.environ.get("WP44_DUCKDB_MEM", "60GB") + "';") | |
| 82 | 82 | P, C = build_panel(R, con, a.last_month); P.to_parquet(f"{out}/panel_volume.parquet"); C.to_parquet(f"{out}/panel_citations.parquet") |
| 83 | 83 | months = list(P.columns); h = a.horizon |
| 84 | 84 | def idx(m): return months.index(m) |
modified
ingestion/compact_tables.py
+1 −1
@@ -5,7 +5,7 @@ hit the macOS open-file limit. Also compacts the slim table of all OpenAlex work | ||
| 5 | 5 | import duckdb, os, sys, time |
| 6 | 6 | R = sys.argv[1]; suffix = sys.argv[2] if len(sys.argv) > 2 else "" # e.g. "_p2" for the second snapshot pass |
| 7 | 7 | tables_dir = os.path.join(R, "data/processed/tables" + suffix); out = os.path.join(R, "data/processed/compact"); os.makedirs(out, exist_ok=True) |
| 8 | −con = duckdb.connect(); con.execute("SET threads TO 24; SET memory_limit='70GB'; SET preserve_insertion_order=false;") | |
| 8 | +con = duckdb.connect(); con.execute("SET threads TO 24; SET memory_limit='" + os.environ.get("WP44_DUCKDB_MEM", "60GB") + "'; SET preserve_insertion_order=false;") | |
| 9 | 9 | jobs = [(t + suffix, f"{tables_dir}/{t}/*.parquet") for t in ["works", "authorships", "work_topics", "work_keywords", "references", "abstracts", "locations", "grants", "counts_by_year"]] |
| 10 | 10 | if not suffix: |
| 11 | 11 | jobs.append(("slim_all_works", f"{R}/data/raw/openalex/works/slim/*.parquet")) |
modified
ingestion/link_sources.py
+1 −1
@@ -13,7 +13,7 @@ import duckdb | ||
| 13 | 13 | def main(): |
| 14 | 14 | ap = argparse.ArgumentParser(); ap.add_argument("--root", required=True); ap.add_argument("--db", default=None) |
| 15 | 15 | a = ap.parse_args(); R = a.root; db = a.db or os.path.join(R, "data/processed/wp44.duckdb") |
| 16 | − con = duckdb.connect(db); con.execute("SET threads TO 24; SET memory_limit='60GB'; SET preserve_insertion_order=false;") | |
| 16 | + con = duckdb.connect(db); con.execute("SET threads TO 24; SET memory_limit='" + os.environ.get("WP44_DUCKDB_MEM", "60GB") + "'; SET preserve_insertion_order=false;") | |
| 17 | 17 | T = os.path.join(R, "data/processed/tables"); t0 = time.time(); rep = {"created": dt.datetime.now(dt.UTC).isoformat()} |
| 18 | 18 | def log(m): print(f"[{time.time()-t0:7.0f}s] {m}", flush=True) |
| 19 | 19 | for t in ["works", "authorships", "work_topics", "work_keywords", "references", "abstracts", "locations", "grants", "counts_by_year"]: |
modified
knowledge_graph/01_citation_graph.py
+1 −1
@@ -15,7 +15,7 @@ import argparse, os, duckdb | ||
| 15 | 15 | def main(): |
| 16 | 16 | ap = argparse.ArgumentParser(); ap.add_argument("--root", required=True); a = ap.parse_args(); R = a.root |
| 17 | 17 | G = os.path.join(R, "data/processed/graph"); out = os.path.join(R, "results/graph"); os.makedirs(G, exist_ok=True); os.makedirs(out, exist_ok=True) |
| 18 | − con = duckdb.connect(os.path.join(R, "data/processed/wp44.duckdb")); con.execute("SET threads TO 24; SET memory_limit='70GB';") | |
| 18 | + con = duckdb.connect(os.path.join(R, "data/processed/wp44.duckdb")); con.execute("SET threads TO 24; SET memory_limit='" + os.environ.get("WP44_DUCKDB_MEM", "60GB") + "';") | |
| 19 | 19 | con.execute("CREATE OR REPLACE TEMP TABLE E AS SELECT id, publication_year AS y, type, primary_field_id FROM corpus_works WHERE eligible") |
| 20 | 20 | con.execute("""CREATE OR REPLACE TABLE cit_edges_internal AS |
| 21 | 21 | SELECT r.work_id AS citing_id, r.ref_id AS cited_id, a.y AS citing_year, b.y AS cited_year |
modified
knowledge_graph/02_category_flows.py
+1 −1
@@ -21,7 +21,7 @@ def main(): | ||
| 21 | 21 | ap = argparse.ArgumentParser(); ap.add_argument("--root", required=True); ap.add_argument("--ontology", required=True); a = ap.parse_args(); R = a.root |
| 22 | 22 | out = os.path.join(R, "results/graph"); os.makedirs(out, exist_ok=True) |
| 23 | 23 | ont = yaml.safe_load(open(a.ontology)); cat_area = {c["id"]: c["area"] for c in ont["categories"]}; cats = [c["id"] for c in ont["categories"]] |
| 24 | − con = duckdb.connect(os.path.join(R, "data/processed/wp44.duckdb")); con.execute("SET threads TO 24; SET memory_limit='70GB';") | |
| 24 | + con = duckdb.connect(os.path.join(R, "data/processed/wp44.duckdb")); con.execute("SET threads TO 24; SET memory_limit='" + os.environ.get("WP44_DUCKDB_MEM", "60GB") + "';") | |
| 25 | 25 | con.execute(f"CREATE OR REPLACE VIEW work_primary AS SELECT * FROM read_parquet('{R}/data/processed/classification/primary/*.parquet')") |
| 26 | 26 | con.execute(f"CREATE OR REPLACE VIEW work_categories AS SELECT * FROM read_parquet('{R}/data/processed/classification/cats/*.parquet')") |
| 27 | 27 | con.execute("CREATE OR REPLACE TEMP TABLE area_map AS SELECT * FROM (VALUES " + ",".join(f"('{c}','{cat_area[c]}')" for c in cats) + ") t(category_id, area)") |
modified
manuscript/tables/numbers.tex
+98 −93
@@ -1,111 +1,116 @@ | ||
| 1 | 1 | % machine-generated by tables/make_numbers.py — do not edit |
| 2 | −\newcommand{\PrismaGenerated}{2026-11-03T21:08:38.910490+00:00} | |
| 2 | +\newcommand{\PrismaGenerated}{2026-11-03T23:03:34.908225+00:00} | |
| 3 | 3 | \newcommand{\PrismaBoundary}{2022-11-30} |
| 4 | −\newcommand{\PrismaIdentifiedOpenalexCsTopicTwoZeroOneEightTwoZeroTwoSixPassOne}{15{,}490{,}159} | |
| 5 | −\newcommand{\PrismaIdentifiedOpenalexTotalRecordsLoaded}{15{,}490{,}159} | |
| 4 | +\newcommand{\PrismaIdentifiedOpenalexCsTopicTwoZeroOneEightTwoZeroTwoSixPassOne}{16{,}592{,}966} | |
| 5 | +\newcommand{\PrismaIdentifiedOpenalexTotalRecordsLoaded}{16{,}592{,}966} | |
| 6 | 6 | \newcommand{\PrismaIdentifiedDblpTwoZeroOneEightTwoZeroTwoSix}{4{,}347{,}365} |
| 7 | 7 | \newcommand{\PrismaIdentifiedArxivCsTwoZeroOneEightTwoZeroTwoSix}{890{,}852} |
| 8 | 8 | \newcommand{\PrismaIdentifiedAclTwoZeroOneEightTwoZeroTwoSix}{85{,}625} |
| 9 | −\newcommand{\PrismaLinkedDblpToOpenalex}{2{,}736{,}903} | |
| 10 | −\newcommand{\PrismaLinkedArxivToOpenalex}{744{,}680} | |
| 11 | −\newcommand{\PrismaLinkedAclToOpenalex}{72{,}256} | |
| 12 | −\newcommand{\PrismaLinkedDblpOnlyNoOpenalexRecord}{1{,}610{,}462} | |
| 13 | −\newcommand{\PrismaExcludedEOneOutsideWindow}{160} | |
| 14 | −\newcommand{\PrismaExcludedETwoType}{3{,}961{,}633} | |
| 15 | −\newcommand{\PrismaExcludedEThreeXpac}{3{,}950{,}876} | |
| 16 | −\newcommand{\PrismaExcludedEFourNoTitle}{16{,}426} | |
| 17 | −\newcommand{\PrismaExcludedEFiveDuplicate}{114{,}115} | |
| 18 | −\newcommand{\PrismaExcludedESixRetracted}{25{,}165} | |
| 19 | −\newcommand{\PrismaExcludedXpacKeptDblp}{87{,}288} | |
| 20 | −\newcommand{\PrismaExcludedETwoByTypeDataset}{2{,}775{,}759} | |
| 21 | −\newcommand{\PrismaExcludedETwoByTypeOther}{522{,}654} | |
| 9 | +\newcommand{\PrismaLinkedDblpToOpenalex}{3{,}774{,}184} | |
| 10 | +\newcommand{\PrismaLinkedArxivToOpenalex}{864{,}677} | |
| 11 | +\newcommand{\PrismaLinkedAclToOpenalex}{73{,}054} | |
| 12 | +\newcommand{\PrismaLinkedDblpOnlyNoOpenalexRecord}{573{,}181} | |
| 13 | +\newcommand{\PrismaExcludedEOneOutsideWindow}{59{,}453} | |
| 14 | +\newcommand{\PrismaExcludedETwoType}{3{,}995{,}235} | |
| 15 | +\newcommand{\PrismaExcludedEThreeXpac}{3{,}974{,}822} | |
| 16 | +\newcommand{\PrismaExcludedEFourNoTitle}{16{,}442} | |
| 17 | +\newcommand{\PrismaExcludedEFiveDuplicate}{120{,}147} | |
| 18 | +\newcommand{\PrismaExcludedESevenGenericDeposit}{1{,}277{,}584} | |
| 19 | +\newcommand{\PrismaExcludedESixRetracted}{28{,}587} | |
| 20 | +\newcommand{\PrismaExcludedXpacKeptDblp}{74{,}771} | |
| 21 | +\newcommand{\PrismaExcludedETwoByTypeDataset}{2{,}779{,}058} | |
| 22 | +\newcommand{\PrismaExcludedETwoByTypeOther}{538{,}613} | |
| 22 | 23 | \newcommand{\PrismaExcludedETwoByTypeLibguides}{191{,}658} |
| 23 | −\newcommand{\PrismaExcludedETwoByTypeSoftware}{177{,}500} | |
| 24 | −\newcommand{\PrismaExcludedETwoByTypeConferenceAbstract}{66{,}267} | |
| 25 | −\newcommand{\PrismaExcludedETwoByTypePeerReview}{60{,}176} | |
| 26 | −\newcommand{\PrismaExcludedETwoByTypeParatext}{39{,}162} | |
| 27 | −\newcommand{\PrismaExcludedETwoByTypeReferenceEntry}{32{,}247} | |
| 28 | −\newcommand{\PrismaExcludedETwoByTypeEditorial}{24{,}907} | |
| 29 | −\newcommand{\PrismaExcludedETwoByTypeSupplementaryMaterials}{18{,}882} | |
| 30 | −\newcommand{\PrismaExcludedETwoByTypeErratum}{17{,}340} | |
| 31 | −\newcommand{\PrismaExcludedETwoByTypeStandard}{10{,}113} | |
| 32 | −\newcommand{\PrismaExcludedETwoByTypeBookReview}{9{,}517} | |
| 33 | −\newcommand{\PrismaExcludedETwoByTypeRetraction}{8{,}217} | |
| 34 | −\newcommand{\PrismaExcludedETwoByTypeDataPaper}{5{,}255} | |
| 35 | −\newcommand{\PrismaExcludedETwoByTypeLetter}{1{,}979} | |
| 36 | −\newcommand{\PrismaExcludedSequentialEOneOutsideWindow}{160} | |
| 37 | −\newcommand{\PrismaExcludedSequentialETwoType}{3{,}961{,}589} | |
| 38 | −\newcommand{\PrismaExcludedSequentialEThreeXpac}{1{,}421{,}692} | |
| 39 | −\newcommand{\PrismaExcludedSequentialEFourNoTitle}{1{,}188} | |
| 40 | −\newcommand{\PrismaExcludedSequentialEFiveDuplicate}{106{,}928} | |
| 41 | −\newcommand{\PrismaAfterExclusions}{9{,}998{,}602} | |
| 42 | −\newcommand{\PrismaCsCoreEligible}{6{,}403{,}238} | |
| 43 | −\newcommand{\PrismaCsPenumbraEligibleOtherwise}{3{,}595{,}364} | |
| 44 | −\newcommand{\PrismaEligibleByPeriodPre}{1{,}367} | |
| 45 | −\newcommand{\PrismaEligibleByPeriodPost}{3{,}457{,}315} | |
| 46 | −\newcommand{\PrismaEligibleByPeriodBaseline}{2{,}944{,}556} | |
| 47 | −\newcommand{\PrismaEligibleByYearTwoZeroOneEight}{561{,}564} | |
| 48 | −\newcommand{\PrismaEligibleByYearTwoZeroOneNine}{600{,}167} | |
| 49 | −\newcommand{\PrismaEligibleByYearTwoZeroTwoZero}{612{,}005} | |
| 50 | −\newcommand{\PrismaEligibleByYearTwoZeroTwoOne}{604{,}393} | |
| 51 | −\newcommand{\PrismaEligibleByYearTwoZeroTwoTwo}{610{,}670} | |
| 52 | −\newcommand{\PrismaEligibleByYearTwoZeroTwoThree}{678{,}150} | |
| 53 | −\newcommand{\PrismaEligibleByYearTwoZeroTwoFour}{785{,}101} | |
| 54 | −\newcommand{\PrismaEligibleByYearTwoZeroTwoFive}{973{,}274} | |
| 55 | −\newcommand{\PrismaEligibleByYearTwoZeroTwoSix}{977{,}914} | |
| 56 | −\newcommand{\PrismaEligibleByTypeArticle}{3{,}192{,}312} | |
| 57 | −\newcommand{\PrismaEligibleByTypeConferencePaper}{1{,}840{,}499} | |
| 58 | −\newcommand{\PrismaEligibleByTypePreprint}{624{,}265} | |
| 59 | −\newcommand{\PrismaEligibleByTypeBookChapter}{335{,}735} | |
| 60 | −\newcommand{\PrismaEligibleByTypeDissertation}{258{,}440} | |
| 61 | −\newcommand{\PrismaEligibleByTypeReport}{54{,}120} | |
| 62 | −\newcommand{\PrismaEligibleByTypeBook}{52{,}139} | |
| 63 | −\newcommand{\PrismaEligibleByTypeReview}{25{,}251} | |
| 64 | −\newcommand{\PrismaEligibleByTypeOther}{17{,}387} | |
| 65 | −\newcommand{\PrismaEligibleByTypeSoftwarePaper}{2{,}350} | |
| 66 | −\newcommand{\PrismaEligibleByTypeBookReview}{615} | |
| 67 | −\newcommand{\PrismaEligibleByTypeDataPaper}{125} | |
| 68 | −\newcommand{\PrismaEligibleMembershipInDblp}{2{,}640{,}780} | |
| 69 | −\newcommand{\PrismaEligibleMembershipCsPrimary}{5{,}619{,}140} | |
| 70 | −\newcommand{\PrismaEligibleMembershipArxivLinked}{709{,}460} | |
| 71 | −\newcommand{\PrismaEligibleMembershipInAcl}{70{,}078} | |
| 72 | −\newcommand{\PrismaEligibleMembershipHasAbstract}{4{,}867{,}840} | |
| 73 | −\newcommand{\PrismaEligibleMembershipHasReferences}{3{,}715{,}037} | |
| 74 | −\newcommand{\PrismaEligibleMembershipRetractedFlagged}{14{,}412} | |
| 75 | −\newcommand{\PrismaStrictCoreDblpAndCsPrimary}{1{,}868{,}188} | |
| 76 | −\newcommand{\LinkCreated}{2026-11-03T20:50:56.182276+00:00} | |
| 77 | −\newcommand{\LinkOaCsRecords}{15{,}490{,}159} | |
| 78 | −\newcommand{\LinkOaCsDistinctIds}{15{,}490{,}159} | |
| 24 | +\newcommand{\PrismaExcludedETwoByTypeSoftware}{177{,}515} | |
| 25 | +\newcommand{\PrismaExcludedETwoByTypeConferenceAbstract}{68{,}101} | |
| 26 | +\newcommand{\PrismaExcludedETwoByTypePeerReview}{60{,}180} | |
| 27 | +\newcommand{\PrismaExcludedETwoByTypeParatext}{41{,}468} | |
| 28 | +\newcommand{\PrismaExcludedETwoByTypeReferenceEntry}{33{,}290} | |
| 29 | +\newcommand{\PrismaExcludedETwoByTypeEditorial}{29{,}543} | |
| 30 | +\newcommand{\PrismaExcludedETwoByTypeErratum}{20{,}850} | |
| 31 | +\newcommand{\PrismaExcludedETwoByTypeSupplementaryMaterials}{18{,}946} | |
| 32 | +\newcommand{\PrismaExcludedETwoByTypeStandard}{10{,}125} | |
| 33 | +\newcommand{\PrismaExcludedETwoByTypeBookReview}{9{,}524} | |
| 34 | +\newcommand{\PrismaExcludedETwoByTypeRetraction}{8{,}924} | |
| 35 | +\newcommand{\PrismaExcludedETwoByTypeDataPaper}{5{,}308} | |
| 36 | +\newcommand{\PrismaExcludedETwoByTypeLetter}{2{,}132} | |
| 37 | +\newcommand{\PrismaExcludedSequentialEOneOutsideWindow}{59{,}453} | |
| 38 | +\newcommand{\PrismaExcludedSequentialETwoType}{3{,}994{,}472} | |
| 39 | +\newcommand{\PrismaExcludedSequentialEThreeXpac}{1{,}430{,}851} | |
| 40 | +\newcommand{\PrismaExcludedSequentialEFourNoTitle}{1{,}193} | |
| 41 | +\newcommand{\PrismaExcludedSequentialEFiveDuplicate}{114{,}421} | |
| 42 | +\newcommand{\PrismaExcludedSequentialESevenGenericDeposit}{473{,}549} | |
| 43 | +\newcommand{\PrismaAfterExclusions}{10{,}519{,}027} | |
| 44 | +\newcommand{\PrismaVersionRelationshipArxivId}{13{,}175} | |
| 45 | +\newcommand{\PrismaVersionRelationshipTitleYear}{84{,}776} | |
| 46 | +\newcommand{\PrismaCsCoreEligible}{7{,}110{,}289} | |
| 47 | +\newcommand{\PrismaCsPenumbraEligibleOtherwise}{3{,}402{,}475} | |
| 48 | +\newcommand{\PrismaEligibleByPeriodPre}{1{,}864} | |
| 49 | +\newcommand{\PrismaEligibleByPeriodPost}{3{,}704{,}028} | |
| 50 | +\newcommand{\PrismaEligibleByPeriodBaseline}{3{,}404{,}397} | |
| 51 | +\newcommand{\PrismaEligibleByYearTwoZeroOneEight}{642{,}661} | |
| 52 | +\newcommand{\PrismaEligibleByYearTwoZeroOneNine}{695{,}209} | |
| 53 | +\newcommand{\PrismaEligibleByYearTwoZeroTwoZero}{708{,}854} | |
| 54 | +\newcommand{\PrismaEligibleByYearTwoZeroTwoOne}{710{,}953} | |
| 55 | +\newcommand{\PrismaEligibleByYearTwoZeroTwoTwo}{699{,}308} | |
| 56 | +\newcommand{\PrismaEligibleByYearTwoZeroTwoThree}{784{,}990} | |
| 57 | +\newcommand{\PrismaEligibleByYearTwoZeroTwoFour}{901{,}406} | |
| 58 | +\newcommand{\PrismaEligibleByYearTwoZeroTwoFive}{1{,}065{,}569} | |
| 59 | +\newcommand{\PrismaEligibleByYearTwoZeroTwoSix}{901{,}339} | |
| 60 | +\newcommand{\PrismaEligibleByTypeArticle}{3{,}656{,}399} | |
| 61 | +\newcommand{\PrismaEligibleByTypeConferencePaper}{2{,}138{,}761} | |
| 62 | +\newcommand{\PrismaEligibleByTypePreprint}{618{,}946} | |
| 63 | +\newcommand{\PrismaEligibleByTypeBookChapter}{343{,}079} | |
| 64 | +\newcommand{\PrismaEligibleByTypeDissertation}{237{,}332} | |
| 65 | +\newcommand{\PrismaEligibleByTypeBook}{47{,}825} | |
| 66 | +\newcommand{\PrismaEligibleByTypeReport}{33{,}064} | |
| 67 | +\newcommand{\PrismaEligibleByTypeReview}{28{,}323} | |
| 68 | +\newcommand{\PrismaEligibleByTypeSoftwarePaper}{3{,}542} | |
| 69 | +\newcommand{\PrismaEligibleByTypeOther}{1{,}661} | |
| 70 | +\newcommand{\PrismaEligibleByTypeBookReview}{1{,}197} | |
| 71 | +\newcommand{\PrismaEligibleByTypeDataPaper}{160} | |
| 72 | +\newcommand{\PrismaEligibleMembershipInDblp}{3{,}608{,}016} | |
| 73 | +\newcommand{\PrismaEligibleMembershipCsPrimary}{5{,}322{,}535} | |
| 74 | +\newcommand{\PrismaEligibleMembershipArxivLinked}{802{,}308} | |
| 75 | +\newcommand{\PrismaEligibleMembershipInAcl}{70{,}033} | |
| 76 | +\newcommand{\PrismaEligibleMembershipHasAbstract}{5{,}385{,}235} | |
| 77 | +\newcommand{\PrismaEligibleMembershipHasReferences}{4{,}614{,}417} | |
| 78 | +\newcommand{\PrismaEligibleMembershipRetractedFlagged}{17{,}094} | |
| 79 | +\newcommand{\PrismaEligibleDatePrecisionMonth}{5{,}703{,}718} | |
| 80 | +\newcommand{\PrismaEligibleDatePrecisionYear}{1{,}406{,}571} | |
| 81 | +\newcommand{\PrismaStrictCoreDblpAndCsPrimary}{1{,}832{,}623} | |
| 82 | +\newcommand{\LinkCreated}{2026-11-03T23:03:10.160666+00:00} | |
| 83 | +\newcommand{\LinkOaCsRecords}{16{,}592{,}966} | |
| 84 | +\newcommand{\LinkOaCsDistinctIds}{16{,}592{,}966} | |
| 79 | 85 | \newcommand{\LinkDblpTwoZeroOneEightTwoZeroTwoSix}{4{,}347{,}365} |
| 80 | 86 | \newcommand{\LinkDblpWithDoi}{4{,}052{,}326} |
| 81 | 87 | \newcommand{\LinkDblpWithArxiv}{0} |
| 82 | −\newcommand{\LinkLinkDblpOaTitleYear}{179{,}990} | |
| 83 | −\newcommand{\LinkLinkDblpOaDoi}{2{,}562{,}431} | |
| 84 | −\newcommand{\LinkDblpLinkedDistinct}{2{,}736{,}903} | |
| 85 | −\newcommand{\LinkDblpUnlinked}{1{,}610{,}462} | |
| 86 | −\newcommand{\LinkDblpUnlinkedByTypePhdthesis}{26{,}841} | |
| 87 | −\newcommand{\LinkDblpUnlinkedByTypeIncollection}{3{,}362} | |
| 88 | −\newcommand{\LinkDblpUnlinkedByTypeInproceedings}{477{,}235} | |
| 89 | −\newcommand{\LinkDblpUnlinkedByTypeBook}{1{,}398} | |
| 90 | −\newcommand{\LinkDblpUnlinkedByTypeArticle}{1{,}084{,}640} | |
| 91 | −\newcommand{\LinkDblpUnlinkedByTypeData}{16{,}986} | |
| 92 | −\newcommand{\LinkDblpUnlinkedWithDoiInSlim}{1{,}077{,}407} | |
| 88 | +\newcommand{\LinkLinkDblpOaTitleYear}{141{,}062} | |
| 89 | +\newcommand{\LinkLinkDblpOaDoi}{3{,}639{,}848} | |
| 90 | +\newcommand{\LinkDblpLinkedDistinct}{3{,}774{,}184} | |
| 91 | +\newcommand{\LinkDblpUnlinked}{573{,}181} | |
| 92 | +\newcommand{\LinkDblpUnlinkedByTypeIncollection}{418} | |
| 93 | +\newcommand{\LinkDblpUnlinkedByTypeBook}{629} | |
| 94 | +\newcommand{\LinkDblpUnlinkedByTypePhdthesis}{30{,}292} | |
| 95 | +\newcommand{\LinkDblpUnlinkedByTypeInproceedings}{159{,}308} | |
| 96 | +\newcommand{\LinkDblpUnlinkedByTypeArticle}{367{,}850} | |
| 97 | +\newcommand{\LinkDblpUnlinkedByTypeData}{14{,}684} | |
| 98 | +\newcommand{\LinkDblpUnlinkedWithDoiInSlim}{1{,}605} | |
| 93 | 99 | \newcommand{\LinkArxivCsRecords}{915{,}115} |
| 94 | 100 | \newcommand{\LinkArxivCreatedTwoZeroOneEightTwoZeroTwoSix}{890{,}852} |
| 95 | −\newcommand{\LinkLinkArxivOaArxivId}{792{,}672} | |
| 96 | −\newcommand{\LinkLinkArxivOaDoi}{520} | |
| 97 | −\newcommand{\LinkLinkArxivOaTitleYear}{2{,}143} | |
| 98 | −\newcommand{\LinkArxivLinkedDistinct}{744{,}680} | |
| 101 | +\newcommand{\LinkLinkArxivOaTitleYear}{1{,}768} | |
| 102 | +\newcommand{\LinkLinkArxivOaDoi}{783} | |
| 103 | +\newcommand{\LinkLinkArxivOaArxivId}{914{,}406} | |
| 104 | +\newcommand{\LinkArxivLinkedDistinct}{864{,}677} | |
| 99 | 105 | \newcommand{\LinkAclRecords}{135{,}558} |
| 100 | 106 | \newcommand{\LinkAclTwoZeroOneEightTwoZeroTwoSix}{85{,}625} |
| 101 | −\newcommand{\LinkLinkAclOaDoi}{57{,}474} | |
| 102 | −\newcommand{\LinkLinkAclOaTitleYear}{14{,}904} | |
| 103 | −\newcommand{\LinkAclLinkedDistinctTwoZeroOneEightTwoZeroTwoSix}{72{,}223} | |
| 104 | −\newcommand{\LinkNeededOaIdsSecondPassDblpDoi}{1{,}077{,}406} | |
| 105 | −\newcommand{\LinkNeededOaIdsSecondPassArxivDoi}{39{,}200} | |
| 107 | +\newcommand{\LinkLinkAclOaDoi}{58{,}174} | |
| 108 | +\newcommand{\LinkLinkAclOaTitleYear}{15{,}004} | |
| 109 | +\newcommand{\LinkAclLinkedDistinctTwoZeroOneEightTwoZeroTwoSix}{72{,}949} | |
| 110 | +\newcommand{\LinkNeededOaIdsSecondPassDblpDoi}{1{,}605} | |
| 106 | 111 | \newcommand{\LinkSlimTotal}{464{,}765{,}485} |
| 107 | 112 | \newcommand{\LinkSlimCsAnyTwoZeroOneEightTwoZeroTwoSix}{15{,}490{,}159} |
| 108 | −\newcommand{\LinkSeconds}{10} | |
| 113 | +\newcommand{\LinkSeconds}{12} | |
| 109 | 114 | \newcommand{\DblpParsedRecords}{8{,}840{,}866} |
| 110 | 115 | \newcommand{\DblpTypeIncollection}{71{,}247} |
| 111 | 116 | \newcommand{\DblpTypeBook}{21{,}648} |
modified
systematic_review/define_corpus.py
+1 −1
@@ -18,7 +18,7 @@ WINDOW_START, BOUNDARY, WINDOW_END = "2018-01-01", "2022-11-30", "2026-11-02" | ||
| 18 | 18 | |
| 19 | 19 | def main(): |
| 20 | 20 | ap = argparse.ArgumentParser(); ap.add_argument("--root", required=True); a = ap.parse_args(); R = a.root |
| 21 | − con = duckdb.connect(os.path.join(R, "data/processed/wp44.duckdb")); con.execute("SET threads TO 24; SET memory_limit='60GB';") | |
| 21 | + con = duckdb.connect(os.path.join(R, "data/processed/wp44.duckdb")); con.execute("SET threads TO 24; SET memory_limit='" + os.environ.get("WP44_DUCKDB_MEM", "60GB") + "';") | |
| 22 | 22 | t0 = time.time(); q = lambda s: con.execute(s).fetchall(); n = lambda s: q(s)[0][0] |
| 23 | 23 | log = lambda m: print(f"[{time.time()-t0:6.0f}s] {m}", flush=True) |
| 24 | 24 | # ---- S0/S1: base table with membership flags ---- |
modified
taxonomy/classify.py
+1 −1
@@ -95,7 +95,7 @@ def process_chunk(args): | ||
| 95 | 95 | |
| 96 | 96 | |
| 97 | 97 | def prepare(root, db, out_dir, chunk_rows): |
| 98 | − con = duckdb.connect(db); con.execute("SET threads TO 24; SET memory_limit='60GB';") | |
| 98 | + con = duckdb.connect(db); con.execute("SET threads TO 24; SET memory_limit='" + os.environ.get("WP44_DUCKDB_MEM", "60GB") + "';") | |
| 99 | 99 | os.makedirs(os.path.join(out_dir, "input"), exist_ok=True) |
| 100 | 100 | con.execute("""CREATE OR REPLACE TABLE cls_input AS |
| 101 | 101 | SELECT w.id, w.publication_year AS year, w.title, a.abstract, |
| 102 | 102 | |