SPB Git

spb/wp44_uqo

Public

WP44: bibliography merge script (599 entries, 15 duplicate keys, 0 DOI conflicts)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Simon-Pierre Boucher committed (Nov 3, 2026) parent 96bb3ab Browse files

5 changed files +566 −2

modified .gitignore +2 −0
@@ -52,3 +52,5 @@ manuscript/*.bbl
52 52 manuscript/*.blg
53 53 manuscript/*.synctex.gz
54 54 .venv/
55 +references_all.bib
56 +manuscript/references_merge_report.txt
modified manuscript/main.tex +1 −1
@@ -82,7 +82,7 @@
82 82 \input{sections/part11_discussion}
83 83
84 84 \clearpage
85 −\bibliography{references}
85 +\bibliography{references_all}
86 86
87 87 \begin{appendices}
88 88 \input{appendices/appA_taxonomy}
added manuscript/merge_bibs.py +31 −0
@@ -0,0 +1,31 @@
1 +#!/usr/bin/env python3
2 +"""Merge manuscript/references.bib (main, Agent B-lit) with the writers' references_part*.bib into references_all.bib.
3 +First occurrence wins (main bib first); duplicate keys are reported in references_merge_report.txt with a flag when the
4 +DOI differs (a real conflict to resolve by hand). main.tex uses \\bibliography{references_all}."""
5 +import glob, re, os
6 +H = os.path.dirname(os.path.abspath(__file__))
7 +files = [os.path.join(H, "references.bib")] + sorted(glob.glob(os.path.join(H, "references_part*.bib")))
8 +seen = {}; out = []; dups = []
9 +for f in files:
10 + txt = open(f, encoding="utf-8").read()
11 + for m in re.finditer(r"@(\w+)\s*\{\s*([^,\s]+)\s*,", txt):
12 + start = m.start(); depth = 0; i = m.end() - 1
13 + # find matching closing brace of the entry
14 + j = txt.find("{", start); depth = 0; k = j
15 + while k < len(txt):
16 + if txt[k] == "{": depth += 1
17 + elif txt[k] == "}":
18 + depth -= 1
19 + if depth == 0: break
20 + k += 1
21 + entry = txt[start:k + 1]; key = m.group(2)
22 + doi = re.search(r"doi\s*=\s*[{\"]([^}\"]+)", entry, re.I)
23 + doi = doi.group(1).strip().lower() if doi else None
24 + if key in seen:
25 + dups.append((key, os.path.basename(f), "DOI_CONFLICT" if (doi and seen[key] and doi != seen[key]) else "same"))
26 + continue
27 + seen[key] = doi; out.append(entry)
28 +open(os.path.join(H, "references_all.bib"), "w", encoding="utf-8").write("% merged by merge_bibs.py — do not edit; edit the source bib files\n\n" + "\n\n".join(out) + "\n")
29 +with open(os.path.join(H, "references_merge_report.txt"), "w") as fh:
30 + fh.write(f"entries: {len(out)} from {len(files)} files\n"); [fh.write(f"DUP {k} in {f}: {st}\n") for k, f, st in dups]
31 +print(len(out), "entries;", len(dups), "duplicates;", sum(1 for d in dups if d[2] == "DOI_CONFLICT"), "DOI conflicts")
modified manuscript/sections/part03_data.tex +316 −1
@@ -1 +1,316 @@
1 −% part03_data — to be written (Phase 7)
1 +% ============================================================================
2 +% Part III — Data and Systematic Review Protocol
3 +% Written by Agent L (Part III instance), 2026-11-03. Every corpus number is a macro from tables/numbers.tex
4 +% (generated by tables/make_numbers.py from data/metadata/prisma_counts.json and linkage_report.json).
5 +% Sources of truth: RESEARCH_PLAN.md §2–§3, protocol/PROTOCOL.md, protocol/amendments.csv,
6 +% reports/PHASE0_FEASIBILITY.md, data/raw/README.md, ingestion/*.py, systematic_review/define_corpus.py.
7 +% ============================================================================
8 +
9 +\section{Information sources and conditions of access}
10 +\label{sec:data-sources}
11 +
12 +A field-level mapping study stands or falls with the bibliographic databases on which it is built. The choice
13 +of sources determines which works can be observed at all, how reliably they can be dated and typed, whether
14 +citation links are available, and under what licence derived data may be redistributed. This part documents
15 +these choices for WP44 and reports, stage by stage, how the mapping corpus was assembled from the raw
16 +sources. The exposition follows the order of the pipeline (identification, linkage, deduplication,
17 +eligibility, scope, dating) and closes with the quality indicators and the research-integrity procedures that
18 +govern every later analysis. The reporting structure is modelled on the PRISMA 2020 items that apply to a
19 +mapping study \citep{page2021prisma,page2021prismaee}; items concerned with risk of bias and effect measures
20 +have no counterpart in a bibliometric design and are replaced, as PRISMA-ScR does for scoping reviews
21 +\citep{tricco2018prismascr}, by indicators of metadata quality and coverage (Section~\ref{sec:data-quality}).
22 +The search-reporting recommendations of PRISMA-S \citep{rethlefsen2021prismas} are followed to the extent
23 +that a database-scope strategy without keyword queries permits.
24 +
25 +\subsection{Why a multi-source design}
26 +
27 +No single database indexes computer science completely, and the gaps are not random. The venue-centred
28 +coverage of DBLP, the publisher-centred coverage of Crossref, the preprint-centred coverage of arXiv and the
29 +aggregating coverage of OpenAlex each miss a distinct part of the literature and type the part they do cover
30 +in distinct ways. Comparative studies of bibliographic data sources have documented large differences in
31 +coverage between Web of Science, Scopus, Dimensions, Crossref and Microsoft Academic
32 +\citep{visser2021comparison,martinmartin2021comparison}, and the journal-level coverage of the two commercial
33 +indexes is known to under-represent conference proceedings, which carry a large share of computer-science
34 +output \citep{mongeon2016coverage}. For the open successor of Microsoft Academic, OpenAlex, the first
35 +independent assessments report strong coverage of works with DOIs together with weaker and uneven metadata on
36 +affiliations, document types and references \citep{alperin2024openalex,culbert2025openalex,
37 +scheidsteger2023openalex,delgadoquiros2024completeness}. These findings motivate the design adopted here: one
38 +source supplies the backbone (OpenAlex), a second supplies the definition of what counts as computer science
39 +(DBLP), a third supplies the preprint layer and its dates (arXiv), and a fourth checks the coverage of a
40 +subfield with a dense, curated venue structure (the ACL Anthology). Crossref is used for verification only.
41 +
42 +\subsection{OpenAlex}
43 +
44 +OpenAlex \citep{priem2022openalex} is the backbone of the corpus. It supplies, for every work, the
45 +identifiers (OpenAlex~W identifier, DOI, arXiv identifier where present), the publication date and type, the
46 +title and an inverted-index abstract where available, the venue (source) and its type, the authorships with
47 +institutions and countries, the topic assignment at three levels (field, subfield, topic) with a primary
48 +topic, the list of referenced works (the citation graph), the open-access status and licence, and the
49 +field-weighted citation impact together with yearly citation counts. OpenAlex is released under the CC0
50 +public-domain dedication, which permits redistribution of record-level derived data.
51 +
52 +Two access routes exist and both were used, for different purposes. The public snapshot is a versioned bulk
53 +release in gzipped JSON Lines, published in a public S3 bucket; the release used here is dated
54 +2026-10-14 and comprises 1{,}898 part files for the \emph{works} entity, 675.3~GB compressed, with a manifest
55 +listing the record count of each file. The snapshot was streamed from the primary compute node, each file's
56 +content length checked against the manifest and a SHA-256 of the compressed bytes recorded in a SQLite ledger
57 +before parsing; every one of the 1{,}898 files parsed without error and the sum of the per-file record counts
58 +equals the manifest total of \LinkSlimTotal{} works. Two outputs were written during this single pass. The
59 +first is the full JSON record of every work carrying \emph{any} topic in OpenAlex field~17 (Computer Science)
60 +with a publication year between 2018 and 2026, stored as Zstandard-compressed JSON Lines and partitioned by
61 +the snapshot's own date partitions (\LinkOaCsRecords{} records, about 20~GB). The second is a \emph{slim}
62 +table of every work in the snapshot (identifier, DOI, year, type, primary topic, subfield, field and domain,
63 +citation count and a few flags), kept in Parquet so that works cited by computer-science papers but published
64 +in other fields can be resolved for the interdisciplinary analyses of Part~VIII (decision D2 of
65 +\texttt{RESEARCH\_PLAN.md}). Records flagged by OpenAlex as XPAC expansion records are retained at this stage
66 +with their flag so that the exclusion decision can be taken, and counted, later (Section~\ref{sec:data-eligibility}).
67 +The smaller entity snapshots (topics, subfields, fields, domains, sources, institutions, publishers, funders,
68 +concepts) were downloaded the same day with a per-file SHA-256 ledger; author entities were not downloaded
69 +because the authorship data embedded in each work record suffice for the analyses planned.
70 +
71 +The second route is the REST API. Without an API key the public endpoint operates under a shared daily budget
72 +of USD~0.10, list-and-filter calls are priced at USD~0.0001 each, and cursor paging is unavailable, so that a
73 +single filtered query cannot return more than 10{,}000 results through basic paging. Single-record lookups by
74 +identifier are free. The API was therefore used for two narrowly defined tasks. First, an incremental harvest
75 +of works with any computer-science topic and a publication date between 2026-10-01 and 2026-11-02, intended
76 +to capture records added after the snapshot was cut; the harvest is sliced by publication day and, where a day
77 +exceeds the paging limit, split into records with a computer-science primary field and records without one.
78 +Raw JSON pages are stored verbatim under a dated directory with a ledger of counts and cost, and the job
79 +resumes on the following day when the budget is exhausted. Second, free single-record lookups by DOI serve as
80 +one of the verification routes for the bibliography of this manuscript (Section~\ref{sec:data-integrity}).
81 +A free API key, which would raise the daily budget, requires the principal investigator to act on an e-mail
82 +and was deliberately not obtained without instruction; the mandate forbids assuming credentials that have not
83 +been tested.
84 +
85 +\subsection{DBLP}
86 +
87 +The DBLP computer science bibliography \citep{ley2002dblp,ley2009dblp} is a curated, venue-centred index that
88 +has for three decades defined, in practice, the set of journals and conference series regarded as computer
89 +science. It is used here in that capacity: a work indexed by DBLP is in computer science by construction, and
90 +DBLP venue streams feed the taxonomy of Part~IV. The complete XML dump (\texttt{dblp.xml.gz}, dated 2026-11-02
91 +22:39~UTC, 1.12~GB) was downloaded together with its DTD and MD5 checksum, the checksum verified, and the file
92 +parsed with a validating XML parser into one row per publication record (articles, conference papers,
93 +proceedings volumes, books, book chapters, doctoral and master's theses, data records; the \texttt{www}
94 +person records are skipped). The whole archive was kept so that per-year counts are available for the
95 +historical baseline and for context. The DBLP dump is released under the Open Data Commons Attribution licence
96 +(ODC-BY~1.0). DBLP contributes, in addition to the scope definition, author person identifiers, venue streams,
97 +and DOI links for most records; the \texttt{ee} fields were also scanned for arXiv URLs, with a result reported
98 +in Section~\ref{sec:data-linkage}.
99 +
100 +\subsection{arXiv}
101 +
102 +The arXiv e-print repository \citep{ginsparg2011arxiv} is the main preprint channel of computer science and,
103 +for the period under study, the place where a large share of the most cited work first appeared. Its
104 +metadata are harvested through the OAI-PMH interface (\texttt{set=cs}, \texttt{metadataPrefix=arXiv}) in
105 +monthly datestamp windows from January 2018 to 2 November 2026. The harvester waits at least 3.5~s between
106 +requests and honours \texttt{Retry-After} headers; every raw XML page is kept verbatim as the immutable
107 +snapshot and parsed afterwards into a single Parquet table. Two properties of OAI-PMH matter for what follows.
108 +The \texttt{from}/\texttt{until} parameters filter on the record's \emph{datestamp}, the time of its last
109 +update, so that a monthly window contains every record updated in that month, not every record first
110 +submitted then; duplicates across windows are resolved at parse time with the latest datestamp winning. The
111 +\texttt{created} element gives the first submission date, which is the date used throughout this study for
112 +preprints. The harvest returned \LinkArxivCsRecords{} distinct records, of which
113 +\LinkArxivCreatedTwoZeroOneEightTwoZeroTwoSix{} were first submitted in 2018--2026; the remainder are older
114 +e-prints updated during the window. The arXiv metadata are released for reuse under the repository's metadata
115 +terms; e-prints themselves are governed by per-paper licences and are downloaded, for the high-priority set
116 +only, within those licences and at the repository's rate limits. The use of arXiv as a research dataset, and
117 +the caveats attached to its category labels and versioning, are discussed by \citet{clement2019arxiv}.
118 +
119 +\subsection{ACL Anthology}
120 +
121 +The ACL Anthology is the curated archive of the computational-linguistics community and has itself served as a
122 +bibliometric corpus \citep{radev2013acl}. Its BibTeX export with abstracts (\texttt{anthology+abstracts.bib.gz},
123 +46.7~MB, SHA-256 recorded) was downloaded on 2026-11-02 and parsed into a table of 138{,}796 entries, of which
124 +\LinkAclRecords{} are conference papers or journal articles and \LinkAclTwoZeroOneEightTwoZeroTwoSix{} fall in
125 +2018--2026. The Anthology plays a diagnostic role: because its venue structure is complete and hand-maintained,
126 +the share of its entries that the backbone can be matched to is a direct measure of OpenAlex coverage for a
127 +subfield that publishes overwhelmingly in conference proceedings. It also supplies abstracts for those entries
128 +in which OpenAlex has none. The export is licensed CC~BY~4.0.
129 +
130 +\subsection{Crossref, Semantic Scholar and other sources}
131 +
132 +Crossref \citep{hendricks2020crossref} is the registration agency behind most DOIs in the corpus and offers
133 +open metadata through a REST API with a polite pool. It is not used to build the corpus, whose backbone
134 +already carries Crossref-derived metadata through OpenAlex, but for three verification purposes: resolution of
135 +every DOI cited in this manuscript, a cross-check of publisher-assigned document types on samples, and a
136 +cross-check of citation counts (\texttt{is-referenced-by-count}) on a sample of highly cited works in
137 +Part~IX.
138 +
139 +The Semantic Scholar Academic Graph \citep{kinney2023s2} was listed in the mandate among the priority sources
140 +because of two signals it alone provides, the influential-citation classification and citation intent. At the
141 +time of the feasibility audit, anonymous requests to its API returned HTTP~429 with an instruction to apply for
142 +a key, and the bulk-dataset endpoint requires a key outright. In keeping with the rule that inaccessible data
143 +be recorded rather than circumvented, Semantic Scholar is recorded as unavailable (decision D3) and no analysis
144 +in this manuscript uses influential-citation or citation-intent signals; where Part~VIII discusses the
145 +strength of citation links, it does so with OpenAlex reference lists and the knowledge-graph extraction of
146 +Part~IV, whose limits are stated there. The Microsoft Academic Graph \citep{wang2020mag}, from which OpenAlex
147 +inherited much of its historical coverage, was discontinued at the end of 2021 and is not an independent source
148 +for the period studied. Kaggle credentials for the arXiv snapshot distributed there were absent and were not
149 +needed, OAI-PMH being sufficient. Benchmark repositories and code-hosting platforms enter only in the
150 +reproducibility and benchmark analyses scoped in Part~IV and are not part of the bibliographic corpus.
151 +
152 +Table~\ref{tab:data-sources} summarises the sources, the access route, the licence and the role of each.
153 +
154 +\begin{table}[htbp]
155 +\centering\small
156 +\caption{Information sources of the WP44 corpus (all accessed 2026-11-02/03).}
157 +\label{tab:data-sources}
158 +\begin{tabularx}{\textwidth}{lXll}
159 +\toprule
160 +Source & Access and snapshot & Licence & Role \\
161 +\midrule
162 +OpenAlex works snapshot & public S3 bucket, release 2026-10-14, 1{,}898 JSONL files, \LinkSlimTotal{} works & CC0 & backbone: identifiers, dates, types, topics, authorships, references, abstracts, OA status \\
163 +OpenAlex REST API & no key; USD~0.10 per day shared budget; increment 2026-10-01 to 2026-11-02; single lookups & CC0 & post-snapshot increment; reference verification \\
164 +DBLP & XML dump 2026-11-02 22:39~UTC, MD5 verified & ODC-BY~1.0 & computer-science scope; venue streams; author identifiers \\
165 +arXiv & OAI-PMH set \texttt{cs}, 2018-01 to 2026-11, raw pages kept & arXiv metadata terms & preprint layer; first-submission dates; categories \\
166 +ACL Anthology & BibTeX export with abstracts, 2026-11-02 & CC~BY~4.0 & coverage check for NLP venues; abstracts \\
167 +Crossref & REST API, polite pool & open metadata & verification of DOIs, types and citation counts \\
168 +Semantic Scholar & API key required; anonymous calls refused & --- & \emph{unavailable, recorded} \\
169 +\bottomrule
170 +\end{tabularx}
171 +\end{table}
172 +
173 +\section{Identification: what each source contributes}
174 +\label{sec:data-identification}
175 +
176 +There is no keyword search in this study. A mapping of an entire discipline cannot be defined by a query
177 +string without importing the vocabulary of whoever wrote it; it is defined instead by database scope filters
178 +that are themselves documented and reproducible, which is the strategy recommended for mapping studies in
179 +software engineering and adopted here for computer science as a whole
180 +\citep{petersen2008mapping,petersen2015mapping}. The identification stage (S0 in the notation of the research
181 +plan) therefore consists of four scope filters, one per source, applied to immutable snapshots whose dates and
182 +hashes are recorded in \texttt{data/raw/README.md}.
183 +
184 +\subsection{Scope filters}
185 +
186 +The OpenAlex filter retains every work with at least one topic, primary or secondary, in field~17 and a
187 +publication year in $[2018, 2026]$. The choice of \emph{any} topic rather than the primary topic is deliberate
188 +and conservative at this stage: a work whose primary topic lies in, say, statistics or electrical engineering
189 +but which carries a secondary computer-science topic is a candidate, and the decision whether it belongs to
190 +the core or to the penumbra is deferred to the eligibility stage, where it is made explicit and counted
191 +(Section~\ref{sec:data-core}). The filter yields
192 +\PrismaIdentifiedOpenalexCsTopicTwoZeroOneEightTwoZeroTwoSixPassOne{} records in the first pass over the
193 +snapshot. The DBLP filter retains the publication records of type article, inproceedings, incollection, book,
194 +phdthesis and data with a year in $[2018, 2026]$: \PrismaIdentifiedDblpTwoZeroOneEightTwoZeroTwoSix{} records.
195 +The arXiv filter retains the records of set \texttt{cs} whose first submission falls in the window:
196 +\PrismaIdentifiedArxivCsTwoZeroOneEightTwoZeroTwoSix{} records. The ACL filter retains the conference papers
197 +and journal articles of the Anthology with a year in the window:
198 +\PrismaIdentifiedAclTwoZeroOneEightTwoZeroTwoSix{} records. The four counts overlap heavily, since most DBLP
199 +and ACL records and a majority of arXiv records also exist in OpenAlex; the overlap is resolved by record
200 +linkage, not by summation, and no total of identified records is reported as if the sources were disjoint.
201 +
202 +\subsection{The OpenAlex topic classifier as a scope instrument}
203 +
204 +Because the OpenAlex filter relies on an automated topic classifier, its properties bear on everything
205 +downstream. OpenAlex assigns to each work up to three topics from a fixed list of 4{,}516, organised in 252
206 +subfields, 26 fields and four domains; the assignment is made by a model applied to the title, abstract and
207 +venue, and the field label of a work is inherited from its topics rather than assigned directly. Two
208 +consequences follow. A work can be labelled computer science because one of its topics belongs to field~17
209 +even when its content is only marginally computational, and conversely a work in a computer-science venue can
210 +receive no computer-science topic when its abstract is missing or its vocabulary is domain-specific. The first
211 +error inflates the candidate set with what will be called the penumbra; the second removes genuine
212 +computer-science works from the first-pass candidate set. DBLP is used to correct the second error, which is
213 +why the linkage stage has two passes (Section~\ref{sec:data-linkage}). The literature on OpenAlex has so far
214 +examined its coverage and metadata completeness rather than the accuracy of its topic labels
215 +\citep{alperin2024openalex,delgadoquiros2024completeness}; the present study treats the labels as a scope
216 +instrument whose errors are bounded by the DBLP and arXiv memberships and quantified in
217 +Section~\ref{sec:data-quality}, not as ground truth.
218 +
219 +\subsection{Verification of the scale against the mandate}
220 +
221 +The mandate set planning targets of more than one million candidate records and more than one hundred
222 +thousand deeply classified records, subject to availability. The feasibility audit established, before any
223 +ingestion, that the OpenAlex API alone reported more than six million works with a computer-science primary
224 +field in 2018--2026 and that the DBLP dump held more than four million records in the same years; the targets
225 +were therefore attainable without recourse to any restricted source. The audit also established what was
226 +\emph{not} attainable: a Semantic Scholar key, an OpenAlex key, Kaggle credentials and the AWS command-line
227 +tool were all absent, and the ingestion was designed around their absence (HTTPS streaming of the public
228 +bucket, basic paging of the public API). The record of this audit is \texttt{reports/PHASE0\_FEASIBILITY.md}.
229 +
230 +\section{Record linkage across sources}
231 +\label{sec:data-linkage}
232 +
233 +The four candidate sets describe overlapping populations with different identifiers. Record linkage (stage S1)
234 +establishes, for each DBLP, arXiv and ACL record, the OpenAlex work it describes, so that one node per work
235 +can be formed with the union of the metadata. The methods are deterministic and ordered by reliability; the
236 +probabilistic framework of \citet{fellegi1969linkage} is not needed because the available keys (DOI, arXiv
237 +identifier) are close to exact, and the residual title-based step is restricted to blocks where it is
238 +unambiguous. The implementation follows the standard decomposition of data matching into key normalisation,
239 +blocking, comparison and classification \citep{christen2012matching}; Part~IV gives the formal statement of the
240 +keys and of the precision-estimation design, and this section reports what was done and what it produced.
241 +
242 +\subsection{Keys and matching order}
243 +
244 +All keys are normalised before comparison. DOIs are lower-cased. arXiv identifiers are lower-cased and
245 +stripped of their version suffix (\texttt{v2}, \texttt{v3}, \ldots), so that all versions of an e-print map to
246 +one identifier. Titles are reduced to a normalised string by lower-casing and deleting every character that is
247 +not a letter or digit; the normalised title is used only when it has at least 25 characters, is unique within
248 +its source, and is unique within OpenAlex, which is the blocking rule that keeps the title step from
249 +producing spurious links between generic titles.
250 +
251 +For DBLP, the order is: (i) DOI equality, (ii) arXiv identifier equality, restricted to records not yet linked
252 +on either side, (iii) normalised title equality with a year difference of at most one, restricted to records
253 +not yet linked on either side. The DOI step linked \LinkLinkDblpOaDoi{} records and the title step
254 +\LinkLinkDblpOaTitleYear{}; the arXiv step linked none, because the extraction of arXiv URLs from the DBLP
255 +\texttt{ee} fields returned no candidate (\LinkDblpWithArxiv{} records with an extracted identifier). The most
256 +plausible reason is that DBLP now records the arXiv version of its CoRR entries as a DataCite DOI of the form
257 +\texttt{10.48550/arXiv.*}, which the DOI step already handles; the step is kept in the pipeline because other
258 +dumps may differ. In total \LinkDblpLinkedDistinct{} of the \LinkDblpTwoZeroOneEightTwoZeroTwoSix{} DBLP
259 +records in the window were linked to an OpenAlex work after the first pass, leaving \LinkDblpUnlinked{}
260 +unlinked. The composition of the unlinked set is informative: \LinkDblpUnlinkedByTypeArticle{} journal
261 +articles, \LinkDblpUnlinkedByTypeInproceedings{} conference papers, \LinkDblpUnlinkedByTypePhdthesis{}
262 +doctoral theses, \LinkDblpUnlinkedByTypeData{} data records, \LinkDblpUnlinkedByTypeIncollection{} chapters
263 +and \LinkDblpUnlinkedByTypeBook{} books. Of these, \LinkDblpUnlinkedWithDoiInSlim{} carry a DOI that
264 +\emph{does} exist in the slim table of all OpenAlex works, which means the work is in OpenAlex but was not
265 +caught by the computer-science topic filter; this is the second error of the topic classifier described above
266 +and the reason for the second pass.
267 +
268 +For arXiv, the order is: (i) arXiv identifier equality against the identifier OpenAlex records for the work,
269 +(ii) DOI equality for e-prints that carry a journal DOI, (iii) normalised title equality with a year
270 +difference of at most two, the wider tolerance reflecting the typical lag between a preprint and its published
271 +version \citep{lin2020preprints}. The steps linked \LinkLinkArxivOaArxivId{}, \LinkLinkArxivOaDoi{} and
272 +\LinkLinkArxivOaTitleYear{} records respectively, for \LinkArxivLinkedDistinct{} distinct e-prints linked.
273 +For the ACL Anthology, the order is: (i) DOI equality, (ii) equality between the Anthology identifier and the
274 +identifier embedded in an \texttt{aclanthology.org} landing-page URL among the work's OpenAlex locations,
275 +(iii) normalised title equality with a year difference of at most one. The steps linked
276 +\LinkLinkAclOaDoi{} records by DOI and \LinkLinkAclOaTitleYear{} by title, with the URL step contributing the
277 +remainder, for \LinkAclLinkedDistinctTwoZeroOneEightTwoZeroTwoSix{} distinct 2018--2026 entries linked out of
278 +\LinkAclTwoZeroOneEightTwoZeroTwoSix{}; the residual is examined in Section~\ref{sec:data-quality} as a
279 +measure of OpenAlex coverage of conference-heavy subfields.
280 +
281 +\subsection{The second snapshot pass}
282 +
283 +A DBLP record whose DOI resolves to an OpenAlex work outside the topic filter is, by the scope rule, a
284 +computer-science work that the first pass did not load. The same situation arises for arXiv e-prints whose
285 +journal DOI exists in OpenAlex without a computer-science topic. The linkage script therefore writes the list
286 +of OpenAlex identifiers that are needed but not loaded: \LinkNeededOaIdsSecondPassDblpDoi{} identifiers from
287 +DBLP DOIs and \LinkNeededOaIdsSecondPassArxivDoi{} from arXiv DOIs. A second pass over the works snapshot,
288 +restricted to this identifier list, retrieves the full records of these works; they are normalised into the
289 +same Parquet tables with a \texttt{\_p2} suffix, the DuckDB views are rebuilt over the union of both passes,
290 +and linkage is re-run so that the DBLP-linked set gains the works that the topic classifier had missed. The
291 +second pass is what makes the DBLP membership rule of Section~\ref{sec:data-core} operational: without it,
292 +``DBLP-indexed'' would silently mean ``DBLP-indexed and labelled computer science by OpenAlex'', and the DBLP
293 +correction would be void precisely where it matters. DBLP records with no OpenAlex counterpart after both
294 +passes (\PrismaLinkedDblpOnlyNoOpenalexRecord{} records before the second pass) are kept in a separate table
295 +with their year and type and are reported as such; they enter the volume counts of Part~IX only in the
296 +sensitivity analysis that adds DBLP-only records, because they lack the abstracts, references and affiliations
297 +on which every other indicator depends. Most of them are journal articles and conference papers with a DOI
298 +that OpenAlex does not hold at all, together with doctoral theses, which DBLP indexes from university
299 +repositories that OpenAlex covers unevenly.
300 +
301 +\subsection{Precision of the linkage}
302 +
303 +Exact-key links are correct whenever the key is correct in both sources; the known failure modes are DOIs
304 +reassigned by publishers between versions, DOIs registered for a proceedings volume rather than a paper, and
305 +e-prints whose OpenAlex record points to a different version. Title-based links can fail on near-identical
306 +titles of distinct works (extended abstracts and full papers, workshop and conference versions). The protocol
307 +pre-specifies the estimation of linkage precision on a sample of 500 DBLP--OpenAlex pairs stratified by method,
308 +with automatic agreement checks (normalised-title similarity, year difference, first-author surname) and a
309 +200-pair subsample reserved for the principal investigator (checkpoint H-1). The sampling script draws 250 DOI
310 +links, 200 title links and 50 arXiv links with a fixed seed; since the arXiv step produced no links in this
311 +dump, the realised sample has 450 pairs, and the precision estimate for the arXiv step is undefined rather
312 +than reported as perfect. At the time of writing the sampling script exists but the sample has not been drawn and the
313 +human checkpoint is unsigned; the automatic agreement rates and the human verdicts will be reported in Part~IX
314 +and Appendix~B, and every conclusion that depends on the title-based links is labelled as pending human review
315 +until H-1 is signed.
316 +
modified manuscript/sections/part04_methodology.tex +216 −0
@@ -553,3 +553,219 @@ share of the corpus) are classified from the title and the metadata only and
553 553 have lower recall for the keyword-dependent categories; the share of such
554 554 works is reported by year because it is not constant.
555 555
556 +\section{Bibliometric indicators}
557 +\label{sec:m-bibliometrics}
558 +
559 +The indicators of this section are the estimands of research questions RQ1,
560 +RQ3 and RQ6. They are standard in the scientometric literature, and the
561 +definitions follow the review of \citet{waltman2016review} where a choice had
562 +to be made; what is specific to this study is the citation-window discipline
563 +imposed by the eight-year span of the corpus and the explicit treatment of the
564 +two counting conventions. The scripts are \texttt{bibliometrics/01\_volume\_series.py},
565 +\texttt{02\_collaboration.py} and \texttt{03\_citation\_impact.py}.
566 +
567 +\subsection{Volume, composition and growth}
568 +
569 +The monthly count $N_t$ and the category counts $N_{k,t}$ of
570 +equation~\eqref{eq:counts} are tabulated by first month, period, date precision,
571 +type and source membership (DBLP-indexed, OpenAlex-primary, arXiv-linked), with
572 +the numbers of works having an abstract, having at least one resolvable
573 +reference, and being open access; the annual table adds the mean number of
574 +authors, references and countries per work. Composition is the share
575 +$s_{k,t}$; its annual counterpart uses the primary label on all eligible works.
576 +Growth between two dates separated by $\Delta$ years is summarised by the
577 +compound annual growth rate
578 +\begin{equation}
579 + \mathrm{CAGR}(t_a, t_b) \;=\; \Bigl( \frac{N_{t_b}}{N_{t_a}} \Bigr)^{1/\Delta} - 1,
580 + \qquad \Delta = (t_b - t_a)\ \text{in years},
581 + \label{eq:cagr}
582 +\end{equation}
583 +applied to annual totals and to annual category totals; it is a descriptive
584 +summary of two end points and says nothing about the path between them, which
585 +is why the structural-change analysis of Section~\ref{sec:m-structural} works
586 +on the full monthly series instead. The CAGR is computed at table-making time
587 +from the annual counts rather than by a dedicated script; the plan lists it
588 +among the Phase-4 indicators and it is reported for complete years only, since
589 +2026 is right-censored (Section~\ref{sec:m-truncation}).
590 +
591 +\subsection{Fixed citation windows}
592 +\label{sec:m-citations}
593 +
594 +OpenAlex provides, for each work, the number of citations received in each
595 +calendar year (\texttt{counts\_by\_year}). Let $c_{w}(u)$ be the citations
596 +received by $w$ in calendar year $u$ and $y(w)$ its publication year. The
597 +fixed-window counts are
598 +\begin{equation}
599 + c^{(12)}_w = \sum_{u \le y(w)+1} c_w(u), \qquad
600 + c^{(36)}_w = \sum_{u \le y(w)+2} c_w(u), \qquad
601 + c^{(48)}_w = \sum_{u \le y(w)+3} c_w(u),
602 + \label{eq:windows}
603 +\end{equation}
604 +so that $c^{(12)}$ counts citations in the publication year and the following
605 +calendar year, $c^{(36)}$ in the publication year and the two following years,
606 +and so on. The superscripts are the names used in the code and in the tables
607 +and must be read as calendar-year windows rather than as exact month counts: a
608 +work published in January and one published in December of the same year
609 +receive windows that differ by eleven months in effective length. This
610 +granularity is imposed by the data (OpenAlex does not provide citation dates
611 +below the year) and is the same for the baseline and the post period, so it
612 +blurs comparisons within a year but does not bias comparisons between years.
613 +The window is the device that neutralises citation-age bias: comparing the
614 +total citation count of a 2019 work with that of a 2025 work compares seven
615 +years of exposure with one, whereas comparing $c^{(36)}$ compares equal
616 +exposures. The cost is that the last window-length of the corpus cannot be
617 +evaluated; $c^{(36)}$ is complete for publication years up to 2023 given a
618 +snapshot taken late in 2026, and $c^{(12)}$ up to 2024. Tables flag the years
619 +for which a window is incomplete, and the choice of window length follows the
620 +evidence in \citet{wang2013window} that short windows rank works materially
621 +differently from long ones in slow-moving fields, which is why two lengths are
622 +reported rather than one.
623 +
624 +\subsection{Field normalisation}
625 +
626 +Raw citation counts differ across subfields and document types by factors that
627 +have nothing to do with influence. The normalised citation score of a work is
628 +its window count divided by the mean window count of its reference class
629 +\citep{waltman2016review, waltman2019fieldnorm}:
630 +\begin{equation}
631 + \mathrm{NCS}^{(h)}_w \;=\; \frac{c^{(h)}_w}{\bar c^{(h)}\bigl(y(w), \tau(w), f(w)\bigr)}, \qquad
632 + \bar c^{(h)}(y, \tau, f) = \frac{1}{|\mathcal{W}_{y,\tau,f}|}\sum_{v \in \mathcal{W}_{y,\tau,f}} c^{(h)}_v ,
633 + \label{eq:ncs}
634 +\end{equation}
635 +where $f(w)$ is the primary OpenAlex subfield of $w$ and $\mathcal{W}_{y,\tau,f}$
636 +the set of eligible works sharing year, type and subfield. The reference class
637 +is computed on the eligible corpus, not on all of OpenAlex, so the
638 +normalisation is relative to computer science as delimited here: an NCS of 2
639 +means twice the mean of comparable computer-science works, not twice the world
640 +mean. The score is undefined when the class mean is zero (very small classes in
641 +the most recent years) and is then left missing rather than set to zero.
642 +Normalisation by the mean of a heavy-tailed distribution is sensitive to a few
643 +very highly cited works in the class; the median-based alternatives discussed
644 +by \citet{waltman2016review} are not used because the median of $c^{(36)}$ is
645 +zero in many classes of this corpus, which would make them uninformative.
646 +
647 +OpenAlex's own field-weighted citation impact (FWCI) is kept as a secondary
648 +indicator. Its documentation defines it as ``citations received divided by
649 +citations expected for works of the same type, year, and subfield'', with a
650 +world average of one \citep{openalex2026fwci}. It differs from
651 +equation~\eqref{eq:ncs} in three respects: the expected count is computed over
652 +all of OpenAlex rather than over this corpus; the citation count is the total
653 +to date rather than a fixed window, so that FWCI values of recent works are
654 +based on a short and unequal exposure; and the computation is OpenAlex's,
655 +recomputed nightly, so that the value depends on the snapshot date. For these
656 +reasons FWCI is reported for comparison and never used to select works.
657 +
658 +\subsection{Inequality and concentration}
659 +
660 +Citation inequality within a publication year is measured by the Gini
661 +coefficient of $c^{(36)}$ among the $n$ eligible works of that year. With the
662 +works sorted so that $c_{(1)} \le c_{(2)} \le \dots \le c_{(n)}$, the estimator
663 +implemented in SQL is the rank form
664 +\begin{equation}
665 + G \;=\; \frac{2\sum_{i=1}^{n} i\, c_{(i)}}{n \sum_{i=1}^{n} c_{(i)}} - \frac{n+1}{n},
666 + \label{eq:gini}
667 +\end{equation}
668 +which equals one minus twice the area under the Lorenz curve and lies in
669 +$[0, 1 - 1/n]$; the coefficient is named after \citet{ceriani2012gini}'s
670 +account of its origin. Uncited works (a large share within a three-year
671 +window) contribute zero to the numerator and pull $G$ upward, so the share of
672 +uncited works is reported next to it. The protocol (H5) refers to the Gini of
673 +24-month citations; the implemented statistic uses the three-calendar-year
674 +window $c^{(36)}$, which is complete for one more publication year than the
675 +longer alternatives and less dominated by zeros than $c^{(12)}$. This is a
676 +deviation from the protocol wording and is recorded as such.
677 +
678 +Venue concentration within a year is the Herfindahl--Hirschman index of the
679 +distribution of works over sources,
680 +\begin{equation}
681 + \mathrm{HHI}_y \;=\; \sum_{v} \sigma_{v,y}^2, \qquad
682 + \sigma_{v,y} = \frac{N_{v,y}}{\sum_{v'} N_{v',y}},
683 + \label{eq:hhi}
684 +\end{equation}
685 +where $N_{v,y}$ is the number of eligible works of year $y$ whose primary
686 +source is $v$ \citep{hirschman1964paternity}; works without a source are
687 +excluded from the denominator, and the number of distinct sources and the
688 +largest single share are reported with the index. Because arXiv is a single
689 +OpenAlex source, growth in preprints mechanically raises $\mathrm{HHI}_y$ even
690 +when the journal and conference landscape becomes more dispersed; this is the
691 +reason the protocol's H5 predicts a stable or falling HHI only ``because of
692 +preprint growth'' with the preprint source treated separately, and the tables
693 +report the index with and without the preprint type.
694 +
695 +\subsection{Collaboration, countries and institutions}
696 +
697 +Team size is summarised by the mean and median number of authors per work and
698 +by the shares of single-author works and of works with at least five or ten
699 +authors. Two counting conventions are used for countries and institutions,
700 +because they answer different questions \citep{waltman2016review}. Under full
701 +counting a work contributes one unit to every country among its authors'
702 +affiliations; under fractional counting it contributes $1/|K(w)|$ to each of
703 +its $|K(w)|$ distinct countries, so that the fractional totals sum to the
704 +number of works with at least one country. The same pair of conventions is
705 +applied to institutions, with the fraction taken over the distinct institutions
706 +of the work. The international collaboration share of year $y$ is
707 +\begin{equation}
708 + \mathrm{ICS}_y \;=\; \frac{|\{w : y(w)=y,\ |K(w)| \ge 2\}|}{|\{w : y(w)=y,\ |K(w)| \ge 1\}|},
709 +\end{equation}
710 +that is, among works with at least one resolved country, the share with authors
711 +from two or more countries; works without affiliation data are excluded from
712 +the denominator and their share is reported, because affiliation completeness
713 +in OpenAlex varies by source and year and a change in completeness would
714 +otherwise masquerade as a change in collaboration. The industry share is the
715 +share of works with at least one affiliation of OpenAlex institution type
716 +\textit{company} among works with at least one typed affiliation. Country-pair
717 +and institution-level tables apply minimum-support thresholds (fifty joint
718 +works for a country pair, two hundred works for an institution within a period)
719 +that keep the released tables to the robustly estimated part of the
720 +distribution; these thresholds are reporting choices and are stated in the
721 +table notes.
722 +
723 +\subsection{Diversity indices}
724 +\label{sec:m-diversity}
725 +
726 +Interdisciplinarity is measured on the distribution of a work's references, or
727 +of a category's citations, over the categories of the ontology. Let
728 +$p = (p_1, \dots, p_K)$ be such a distribution and $\delta_{ij} \in [0,1]$ a
729 +dissimilarity between categories $i$ and $j$. The Rao--Stirling index
730 +\citep{rao1982diversity, stirling2007diversity}
731 +\begin{equation}
732 + \Delta_{\mathrm{RS}}(p) \;=\; \sum_{i \ne j} p_i\, p_j\, \delta_{ij}
733 + \label{eq:rao-stirling}
734 +\end{equation}
735 +is the expected dissimilarity between two categories drawn at random from $p$;
736 +it is zero when all mass sits on one category and increases with variety (the
737 +number of categories present), balance (the evenness of $p$) and disparity (the
738 +dissimilarity of the categories involved), the three components that
739 +\citeauthor{stirling2007diversity} argues any diversity measure should respond
740 +to. Its use in scientometrics follows \citet{rafols2010diversity}. Its known
741 +weakness is that it saturates: for very even distributions over many
742 +categories it approaches the mean dissimilarity and no longer discriminates
743 +\citep{zhang2016diversity}. The Leinster--Cobbold family
744 +\citep{leinster2012diversity} repairs this by defining, for a similarity matrix
745 +$Z = (z_{ij})$ with $z_{ij} = 1 - \delta_{ij}$ and an order $q \ge 0$,
746 +\begin{equation}
747 + {}^{q}D^{Z}(p) \;=\; \Bigl( \sum_{i : p_i > 0} p_i\, (Zp)_i^{\,q-1} \Bigr)^{1/(1-q)},
748 + \qquad (Zp)_i = \sum_j z_{ij}\, p_j ,
749 + \label{eq:leinster-cobbold}
750 +\end{equation}
751 +with the limit ${}^{1}D^{Z}(p) = \prod_i (Zp)_i^{-p_i}$ at $q = 1$. The quantity
752 +$(Zp)_i$ is the ``ordinariness'' of category $i$ under $p$: how much of the
753 +distribution is similar to $i$. The index is an effective number of
754 +categories---it equals $K$ for the uniform distribution over $K$ mutually
755 +dissimilar categories---and the order $q$ sets the weight given to rare
756 +categories (large $q$ counts only the dominant ones). Following
757 +\citet{zhang2016diversity} the manuscript reports $q = 2$, which has the
758 +closed form ${}^{2}D^{Z}(p) = 1 / \sum_{i,j} p_i z_{ij} p_j = 1/(1 - \Delta_{\mathrm{RS}}(p))$
759 +when $z_{ii} = 1$, so that the two families are monotone transforms of each
760 +other at this order and differ only in scale and in their behaviour at the
761 +saturation end. The dissimilarity $\delta_{ij}$ between categories is one
762 +minus the cosine similarity of the category centroids of
763 +Section~\ref{sec:m-semantic} in the baseline period, so that the disparity
764 +component is estimated from the corpus rather than imposed. The current
765 +pipeline computes the category flow matrices from which $p$ is formed
766 +(Section~\ref{sec:m-networks}) and the centroid similarities, but the two
767 +diversity indices are not yet produced by a script; they are defined here
768 +because the protocol commits to them, and their values in Part IX are
769 +\pending{Rao--Stirling and Leinster--Cobbold indices per category and period, not yet computed}
770 +until the computation is added and audited.
771 +
556 772
Menu

Theme