SPB Git

spb/wp45_uqo

Public
18.2 KB · 136 lines latex
1% paper/sections/corpus.tex — WP45 / JoF-2502% Every number below is a macro from paper/tables/numbers.tex (generated by scripts/07_make_numbers.py).3% \TODOmacro{name} marks a number whose macro does not exist yet; \profval{name} prints the macro if defined, a TODO marker otherwise.4\providecommand{\TODOmacro}[1]{\textcolor{red}{[TODO macro: \texttt{#1}]}}5\providecommand{\profval}[1]{\ifcsname #1\endcsname\csname #1\endcsname\else\TODOmacro{#1}\fi}6\providecommand{\profvalc}[1]{\ifcsname #1\endcsname\csname #1\endcsname\else\textcolor{red}{\scriptsize TODO}\fi}  % compact fallback for table cells; macro name stays in the source78\section{Corpus, inclusion rules, rights, and descriptive statistics}9\label{sec:corpus}1011\subsection{Provenance and scope}12\label{sec:corpus-provenance}1314The reference corpus consists of the research content of \emph{The Journal of Finance} (Wiley, on behalf of the American Finance Association), volumes 72 to 75, published between 2017 and 2020. The PDF files were obtained on 3 November 2026 through the library proxy of the Universit\'e du Qu\'ebec en Outaouais, under the institution's subscription and for the research use of a subscribing faculty member. The download produced one file per table-of-contents entry together with a bibliographic index (\texttt{index.\allowbreak{}csv}) listing, for each file, the title, authors, page range, publication date, DOI, table-of-contents section, year, volume and issue as displayed by the publisher. The original files are treated as read-only: no PDF is modified, moved, or redistributed, and the derived full-text structures described in Section~\ref{sec:extraction} are never committed to version control.1516Two features of the scope deserve an explicit statement. First, the project is labelled ``JoF-250'' because the mandate anticipated roughly 250 articles from 2018--2020; the folder as delivered also contained volume 72 (2017), and we retained it because the sole substantive criterion of the design is that every document predates the public release of ChatGPT on 30 November 2022 (amendment A-002 in \texttt{docs/\allowbreak{}PROGRESS.\allowbreak{}md}). The label is therefore a name, not a count; the verified count is \nIncluded{} included documents. Second, ``pre-ChatGPT'' does not mean ``free of algorithmic writing assistance'': spelling and grammar tools, and in some cases earlier language models, were available to authors throughout the period. The corpus is best described as a sample of peer-reviewed finance writing produced before large language models became a routine drafting tool, not as a sample of unassisted human prose.1718\subsection{Inventory and verification procedure}19\label{sec:corpus-inventory}2021The inventory (\texttt{jof250 corpus audit}; module \texttt{inventory.\allowbreak{}py}) scans the corpus folder recursively, skipping the download tooling directory, and records for every file its relative path, size, and SHA-256 digest. Each PDF is then probed with PyMuPDF: a file is considered valid when it opens, has at least one page, and yields more than 50 characters of text over its first three pages. The three-page window is deliberate: presidential addresses open with a full-page portrait of the speaker, and a one-page test would have flagged them as broken. The probe also extracts the document's embedded metadata and searches the first three pages for a DOI of the form \texttt{10.1111/\allowbreak{}jofi.\allowbreak{}\textit{nnnnn}}. An early version of this search failed on a subset of files because the publisher's typesetting encodes the ligature ``fi'' as the single Unicode code point U+FB01, so that ``jofi'' did not match a plain ASCII pattern; all PDF text is now normalised with Unicode NFKC before any pattern matching, both in the inventory and in the parser.2223The scanned records are joined to \texttt{index.\allowbreak{}csv} on the relative path, which attaches the publisher's bibliographic fields to every file. Every DOI is then verified against the Crossref public API (polite pool, cached locally so that the verification is reproducible offline). A record is marked \texttt{crossref\_\allowbreak{}ok} when the request returns status~200, the container title contains ``Journal of Finance'', and the fuzzy similarity between the index title and the Crossref title is at least 85 on a 0--100 scale. Missing metadata are never inferred: a file without a bibliographic record, or whose in-PDF DOI disagrees with the index DOI, is routed to a \texttt{review} decision rather than silently included. The final manifest (\texttt{corpus\_\allowbreak{}manifest.\allowbreak{}parquet}), the human-readable audit (\texttt{corpus\_\allowbreak{}audit.\allowbreak{}md}), and a frozen, hashed list of included documents (\texttt{corpus\_\allowbreak{}v1\_\allowbreak{}frozen.\allowbreak{}json}) are written together with an append-only inventory ledger.2425\subsection{Inclusion and exclusion}26\label{sec:corpus-inclusion}2728The decision rule is applied in a fixed order. A file is excluded if it is not a PDF, is smaller than 20,000 bytes, fails the validity probe, duplicates the content of another file (identical SHA-256), falls outside the years in scope, or belongs to a table-of-contents section other than \emph{Articles}, \emph{Replications and Corrigenda}, \emph{Corrigendum}, or the retraction notice section. A final title-based rule excludes items that the publisher's table of contents lists under \emph{Articles} but that are not research articles. One such case occurred: the participant schedule of the 2021 AFA annual meeting (volume 75, issue 6), which was mislabelled as an article by the publisher and is excluded with the reason ``not a research article''. The included documents are typed as regular articles, presidential addresses (identified by their title prefix), replications or corrigenda (by section), and retracted articles (by section). One retracted article is present; it is retained and flagged rather than removed, since the object of study is the writing conventions of the published record, not the validity of its findings.2930Table~\ref{tab:corpus-counts} reports the outcome. Of \nFiles{} files scanned (\nPDF{} PDFs), \nIncluded{} are included and \nExcluded{} excluded (the index file and the AFA schedule); no exact duplicates and no duplicate DOIs were found, and no record required manual review. All \nCrossrefOk{} included records pass the Crossref check. The included corpus spans \pagesTotal{} pages (median \pagesMedian{} pages per document) and \sizeMB{}~MB.3132\begin{table}[htbp]33\centering34\small35\caption{Corpus inventory: included documents by publication year and by article type. Source: \texttt{data/\allowbreak{}manifests/\allowbreak{}corpus\_\allowbreak{}audit.\allowbreak{}md}, generated by \texttt{jof250 corpus audit}.}36\label{tab:corpus-counts}37\begin{tabular}{lr@{\hspace{3em}}lr}38\toprule39Year & Included & Article type & Included \\40\midrule412017 (vol.\ 72) & \profvalc{nYearSeventeen} & Research article & \nTypeArticle \\422018 (vol.\ 73) & \profvalc{nYearEighteen} & Presidential address & \nTypePresidentialAddress \\432019 (vol.\ 74) & \profvalc{nYearNineteen} & Replication or corrigendum & \nTypeCorrigendumOrReplication \\442020 (vol.\ 75) & \profvalc{nYearTwenty} & Retracted article (flagged) & \nTypeRetractedArticle \\45\midrule46Total & \nIncluded & Total & \nIncluded \\47\bottomrule48\end{tabular}49\begin{minipage}{0.92\linewidth}\vspace{2pt}\footnotesize50Notes: files scanned \nFiles{} (\nPDF{} PDFs); excluded \nExcluded{} (\texttt{index.\allowbreak{}csv} and the mislabelled AFA 2021 participant schedule); exact duplicates 0; Crossref-verified included records \nCrossrefOk{}; pages \pagesTotal{} (median \pagesMedian{}); size \sizeMB{}~MB.51\end{minipage}52\end{table}5354\subsection{Document-level split}55\label{sec:corpus-split}5657Before any profile was computed or any prompt was tuned, the included documents were split at the document level into a training set and a held-out set (\texttt{data/\allowbreak{}splits/\allowbreak{}heldout\_\allowbreak{}v1.\allowbreak{}json}; script \texttt{03\_\allowbreak{}make\_\allowbreak{}splits.\allowbreak{}py}, seed 45). Within each (year, article type) stratum, 20\% of the documents were drawn at random into the held-out set, giving \nTrain{} training and \nHeldout{} held-out documents. Profiles (Section~\ref{sec:arch-profiles}) are built from the training set only, and the retrieval index records the split of every unit so that the writing engine can be restricted to training material. Author overlap between the two sets is measured and reported rather than eliminated: \nHeldoutAuthorOverlap{} of the \nHeldout{} held-out documents share at least one author surname with a training document. In a single-journal corpus with a dense co-authorship network, removing every such document would have left too few held-out articles to be useful; we therefore treat author overlap as a documented limitation of the split rather than a solved problem, and the preregistration (Section~\ref{sec:design}) states this explicitly.5859\subsection{Rights policy and data exposure}60\label{sec:corpus-rights}6162The policy is recorded in \texttt{config/\allowbreak{}rights.\allowbreak{}yaml} and \texttt{docs/\allowbreak{}RIGHTS\_\allowbreak{}AND\_\allowbreak{}ETHICS.\allowbreak{}md}. Three classes of material are distinguished. \emph{Private} material comprises the PDFs and the structured full texts produced by the parser (\texttt{data/\allowbreak{}derived/\allowbreak{}parsed/\allowbreak{}}); it stays on the author's machine, is excluded from version control, and is never redistributed or used for fine-tuning. \emph{Material sent to the API} for annotation is bounded: for one document and one call, the payload contains the abstract, the paragraphs of the introduction and of the conclusion, the heading and the first paragraph of every section, table titles with notes truncated to 350 characters, figure captions truncated to 300 characters, and section-level counts, with a hard cap of 60,000 characters per call enforced by trimming paragraphs from the middle of the introduction and conclusion. No full article is sent in a single call, no fine-tuning is performed, and every call is written to a ledger. \emph{Committed} material comprises metadata, counts, structural annotations, paraphrased summaries, aggregate profiles, and the retrieval index, whose textual units are capped at 400 characters so that the index cannot reconstruct a protected text. The engine is also instructed never to reuse sentences from the corpus, and every output is screened for eight-word overlap with the corpus (Section~\ref{sec:arch-audits}). None of this amounts to an endorsement by the journal or its publisher; the corpus is used as evidence about conventions, not as a style authority.6364\subsection{Descriptive structural statistics}65\label{sec:corpus-descriptives}6667Table~\ref{tab:corpus-structure} and Figure~\ref{fig:structure} summarise the structural statistics extracted by the parser of Section~\ref{sec:extraction}. Two sets of numbers are reported. The first column block gives medians over all \nIncluded{} included documents, as recorded in the parse summary; the second gives medians with interquartile ranges over the \profCorpusAllN{} training documents, as recorded in the \texttt{corpus\_\allowbreak{}all} profile, which is the quantity the writing engine actually consults. The two agree closely, as expected from a stratified random split.6869A typical included document has a body of \profCorpusAllNWordsBodyMed{} words (interquartile range \profCorpusAllNWordsBodyQa{}--\profCorpusAllNWordsBodyQb{}), an introduction of \profCorpusAllIntroWordsMed{} words in \profCorpusAllIntroParagraphsMed{} paragraphs, that is a \profCorpusAllIntroShareMed{} share of the body, \profCorpusAllNTablesMed{} tables, \parseMedianNFigures{} figures, \profCorpusAllNEquationsMed{} numbered equations, \profCorpusAllNReferencesMed{} reference entries, and \parseMedianNFootnotes{} footnotes; the abstract has \parseMedianAbstractWords{} words, which reflects the journal's abstract length limit, and the main text is divided into \parseMedianNSections{} roman-numbered sections. The conclusion is short, a \profCorpusAllConclusionShareMed{} share of the body. Minimum values of the distributions are driven by the corrigenda and the one-page replication notes, which the profiles retain for the \texttt{corpus\_\allowbreak{}all} aggregate but which are excluded by genre from the rhetoric profiles. We stress, here and wherever a profile is quoted, that these distributions describe what published articles did in 2017--2020; they are not evidence that any of these choices is editorially superior or required.707172\paragraph{Composition by genre and subfield.} The annotation stage of Section~\ref{sec:extraction-ontology} assigns each included document a genre and a subfield; Table~\ref{tab:corpus-genre} reports the resulting composition over all \nAnnValid{} validly annotated documents (training and held-out). These labels are produced by a language model under the controlled vocabularies of Table~\ref{tab:vocab} and should be read with the caveats of Section~\ref{sec:extraction-honesty}; they are used for stratifying profiles and filtering retrieval, not as a bibliometric classification of the journal. Theory papers are a sizeable minority (\nGenreTheoretical{} purely theoretical and \nGenreMixedTheoryEmpirical{} mixed), which is why the ontology and the engine are explicitly designed not to impose an empirical-paper template.7374\begin{table}[htbp]75\centering76\small77\caption{Composition of the annotated corpus by genre and by primary subfield (model annotation, ontology version 1.0, all \nAnnValid{} validly annotated included documents). Source: \texttt{data/\allowbreak{}annotations/\allowbreak{}annotations\_\allowbreak{}table.\allowbreak{}parquet}.}78\label{tab:corpus-genre}79\begin{tabular}{lr@{\hspace{2.5em}}lr}80\toprule81Genre & $n$ & Subfield & $n$ \\82\midrule83Empirical & \nGenreEmpirical & Asset pricing & \nSubAssetPricing \\84Mixed theory and empirical & \nGenreMixedTheoryEmpirical & Corporate finance & \nSubCorporateFinance \\85Theoretical & \nGenreTheoretical & Financial intermediation and banking & \nSubFinancialIntermediationBanking \\86Replication or correction & \nGenreReplicationOrCorrection & Household finance & \nSubHouseholdFinance \\87Methodological or econometric & \nGenreMethodologicalEconometric & Market microstructure & \nSubMarketMicrostructure \\88Survey or address & \nGenreSurveyOrAddress & Behavioural finance & \nSubBehavioralFinance \\89 & & Macro-finance & \nSubMacroFinance \\90 & & Entrepreneurial finance and private equity & \nSubEntrepreneurialFinancePrivateEquity \\91 & & International finance & \nSubInternationalFinance \\92 & & Financial econometrics & \nSubFinancialEconometrics \\93\bottomrule94\end{tabular}95\end{table}9697\begin{figure}[htbp]98\centering99\IfFileExists{figures/fig_structure_distributions.pdf}{\includegraphics[width=\linewidth]{figures/fig_structure_distributions.pdf}}{\fbox{\parbox{0.9\linewidth}{\centering\small Figure \texttt{fig\_\allowbreak{}structure\_\allowbreak{}distributions.\allowbreak{}pdf} is produced by \texttt{jof250 profiles build}.}}}100\caption{Structural distributions of the training split (\profCorpusAllN{} documents): body words, tables, figures, numbered equations, reference entries, and introduction share of the body. The vertical line marks the median. Counts come from the heuristic PyMuPDF parser (Section~\ref{sec:extraction}); numbered-equation counts in particular are approximate. Held-out documents are not shown.}101\label{fig:structure}102\end{figure}103104\begin{table}[htbp]105\centering106\small107\caption{Descriptive structural statistics of the corpus. Left block: medians over all \nIncluded{} included documents (\texttt{parse\_\allowbreak{}summary.\allowbreak{}parquet}). Right block: median and interquartile range over the \profCorpusAllN{} training documents (\texttt{profiles/\allowbreak{}corpus\_\allowbreak{}all.\allowbreak{}yaml}, structure block). Bootstrap 95\% intervals for the medians (500 resamples, seed 45) are stored in the profile file. Cells printed as TODO await a macro in \texttt{numbers.\allowbreak{}tex}.}108\label{tab:corpus-structure}109\begin{tabular}{lccc}110\toprule111 & All included & \multicolumn{2}{c}{Training split} \\112\cmidrule(lr){3-4}113Statistic & Median & Median & IQR \\114\midrule115Pages & \pagesMedian & \profvalc{profCorpusAllPagesMed} & \profvalc{profCorpusAllPagesQa}--\profvalc{profCorpusAllPagesQb} \\116Body words & \parseMedianNWordsBody & \profCorpusAllNWordsBodyMed & \profCorpusAllNWordsBodyQa--\profCorpusAllNWordsBodyQb \\117Abstract words & \parseMedianAbstractWords & \profvalc{profCorpusAllAbstractWordsMed} & \profvalc{profCorpusAllAbstractWordsQa}--\profvalc{profCorpusAllAbstractWordsQb} \\118Numbered sections & \parseMedianNSections & \profvalc{profCorpusAllNSectionsMed} & \profvalc{profCorpusAllNSectionsQa}--\profvalc{profCorpusAllNSectionsQb} \\119Introduction words & --- & \profCorpusAllIntroWordsMed & \profCorpusAllIntroWordsQa--\profCorpusAllIntroWordsQb \\120Introduction paragraphs & --- & \profCorpusAllIntroParagraphsMed & \profCorpusAllIntroParagraphsQa--\profCorpusAllIntroParagraphsQb \\121Introduction share of body & --- & \profCorpusAllIntroShareMed & \profCorpusAllIntroShareQa--\profCorpusAllIntroShareQb \\122Conclusion share of body & --- & \profCorpusAllConclusionShareMed & \profCorpusAllConclusionShareQa--\profCorpusAllConclusionShareQb \\123Tables & \parseMedianNTables & \profCorpusAllNTablesMed & \profCorpusAllNTablesQa--\profCorpusAllNTablesQb \\124Figures & \parseMedianNFigures & \profvalc{profCorpusAllNFiguresMed} & \profvalc{profCorpusAllNFiguresQa}--\profvalc{profCorpusAllNFiguresQb} \\125Numbered equations & \parseMedianNEquations & \profCorpusAllNEquationsMed & \profCorpusAllNEquationsQa--\profCorpusAllNEquationsQb \\126Reference entries & \parseMedianNReferences & \profCorpusAllNReferencesMed & \profCorpusAllNReferencesQa--\profCorpusAllNReferencesQb \\127Footnotes & \parseMedianNFootnotes & \profvalc{profCorpusAllNFootnotesMed} & \profvalc{profCorpusAllNFootnotesQa}--\profvalc{profCorpusAllNFootnotesQb} \\128\midrule129Share with a robustness section & --- & \profvalc{profCorpusAllHasRobustnessShare} & \\130Share with a separate literature section & --- & \profvalc{profCorpusAllHasLiteratureShare} & \\131Share with an in-text appendix & --- & \profvalc{profCorpusAllHasAppendixShare} & \\132Share referring to an Internet Appendix & --- & \profvalc{profCorpusAllHasInternetAppendixShare} & \\133\bottomrule134\end{tabular}135\end{table}136
Files · f48490eca784017968beb6af9e04c942bd1390d9
Menu

Theme