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 manuscript/*.blg 52 manuscript/*.blg
53 manuscript/*.synctex.gz 53 manuscript/*.synctex.gz
54 .venv/ 54 .venv/
55+references_all.bib
56+manuscript/references_merge_report.txt
modified manuscript/main.tex +1 −1
@@ -82,7 +82,7 @@
82 \input{sections/part11_discussion} 82 \input{sections/part11_discussion}
83 83
84 \clearpage 84 \clearpage
85−\bibliography{references} 85+\bibliography{references_all}
86 86
87 \begin{appendices} 87 \begin{appendices}
88 \input{appendices/appA_taxonomy} 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 have lower recall for the keyword-dependent categories; the share of such 553 have lower recall for the keyword-dependent categories; the share of such
554 works is reported by year because it is not constant. 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