% Options for packages loaded elsewhere
\PassOptionsToPackage{unicode}{hyperref}
\PassOptionsToPackage{hyphens}{url}
\PassOptionsToPackage{dvipsnames,svgnames,x11names}{xcolor}
%
\documentclass[
]{ccr}

% [WvA] change from original template.tex - amssymb is replaced by / clashes with newtxmath]
% \usepackage{amsmath,amssymb}
\usepackage{amsmath}

\usepackage{iftex}
\ifPDFTeX
  \usepackage[T1]{fontenc}
  \usepackage[utf8]{inputenc}
  \usepackage{textcomp} % provide euro and other symbols
\else % if luatex or xetex
  % [WvA] change from original template.tex - unicode-math is replaced by / clashes with newtxmath]
  %% \usepackage{unicode-math}
  \defaultfontfeatures{Scale=MatchLowercase}
  \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1}
\fi
% Use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
\IfFileExists{microtype.sty}{% use microtype if available
  \usepackage[]{microtype}
  \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
}{}
\makeatletter
\@ifundefined{KOMAClassName}{% if non-KOMA class
  \IfFileExists{parskip.sty}{%
    \usepackage{parskip}
  }{% else
    \setlength{\parindent}{0pt}
    \setlength{\parskip}{6pt plus 2pt minus 1pt}}
}{% if KOMA class
  \KOMAoptions{parskip=half}}
\makeatother
\usepackage{xcolor}
\setlength{\emergencystretch}{3em} % prevent overfull lines
\setcounter{secnumdepth}{-\maxdimen} % remove section numbering
% Make \paragraph and \subparagraph free-standing
\ifx\paragraph\undefined\else
  \let\oldparagraph\paragraph
  \renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}}
\fi
\ifx\subparagraph\undefined\else
  \let\oldsubparagraph\subparagraph
  \renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}}
\fi
\usepackage{color}
\usepackage{fancyvrb}
\newcommand{\VerbBar}{|}
\newcommand{\VERB}{\Verb[commandchars=\\\{\}]}
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
% Add ',fontsize=\small' for more characters per line
\usepackage{framed}
\definecolor{shadecolor}{RGB}{241,243,245}
\newenvironment{Shaded}{\begin{snugshade}}{\end{snugshade}}
\newcommand{\AlertTok}[1]{\textcolor[rgb]{0.68,0.00,0.00}{#1}}
\newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.37,0.37,0.37}{#1}}
\newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.40,0.45,0.13}{#1}}
\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.68,0.00,0.00}{#1}}
\newcommand{\BuiltInTok}[1]{\textcolor[rgb]{0.00,0.23,0.31}{#1}}
\newcommand{\CharTok}[1]{\textcolor[rgb]{0.13,0.47,0.30}{#1}}
\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.37,0.37,0.37}{#1}}
\newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.37,0.37,0.37}{\textit{#1}}}
\newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{#1}}
\newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.00,0.23,0.31}{\textbf{#1}}}
\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.68,0.00,0.00}{#1}}
\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.68,0.00,0.00}{#1}}
\newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.37,0.37,0.37}{\textit{#1}}}
\newcommand{\ErrorTok}[1]{\textcolor[rgb]{0.68,0.00,0.00}{#1}}
\newcommand{\ExtensionTok}[1]{\textcolor[rgb]{0.00,0.23,0.31}{#1}}
\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.68,0.00,0.00}{#1}}
\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.28,0.35,0.67}{#1}}
\newcommand{\ImportTok}[1]{\textcolor[rgb]{0.00,0.46,0.62}{#1}}
\newcommand{\InformationTok}[1]{\textcolor[rgb]{0.37,0.37,0.37}{#1}}
\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.23,0.31}{\textbf{#1}}}
\newcommand{\NormalTok}[1]{\textcolor[rgb]{0.00,0.23,0.31}{#1}}
\newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.37,0.37,0.37}{#1}}
\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.23,0.31}{#1}}
\newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.68,0.00,0.00}{#1}}
\newcommand{\RegionMarkerTok}[1]{\textcolor[rgb]{0.00,0.23,0.31}{#1}}
\newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.37,0.37,0.37}{#1}}
\newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.13,0.47,0.30}{#1}}
\newcommand{\StringTok}[1]{\textcolor[rgb]{0.13,0.47,0.30}{#1}}
\newcommand{\VariableTok}[1]{\textcolor[rgb]{0.07,0.07,0.07}{#1}}
\newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.13,0.47,0.30}{#1}}
\newcommand{\WarningTok}[1]{\textcolor[rgb]{0.37,0.37,0.37}{\textit{#1}}}

\usepackage{longtable,booktabs,array}
\newcounter{none} % for unnumbered tables
\usepackage{calc} % for calculating minipage widths
% Correct order of tables after \paragraph or \subparagraph
\usepackage{etoolbox}
\makeatletter
\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{}
\makeatother
% Allow footnotes in longtable head/foot
\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}}
\makesavenoteenv{longtable}
\usepackage{graphicx}
\makeatletter
\newsavebox\pandoc@box
\newcommand*\pandocbounded[1]{% scales image to fit in text height/width
  \sbox\pandoc@box{#1}%
  \Gscale@div\@tempa{\textheight}{\dimexpr\ht\pandoc@box+\dp\pandoc@box\relax}%
  \Gscale@div\@tempb{\linewidth}{\wd\pandoc@box}%
  \ifdim\@tempb\p@<\@tempa\p@\let\@tempa\@tempb\fi% select the smaller of both
  \ifdim\@tempa\p@<\p@\scalebox{\@tempa}{\usebox\pandoc@box}%
  \else\usebox{\pandoc@box}%
  \fi%
}
% Set default figure placement to htbp
\def\fps@figure{htbp}
\makeatother





\setlength{\emergencystretch}{3em} % prevent overfull lines

\providecommand{\tightlist}{%
  \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}



 
\usepackage[]{biblatex}
\addbibresource{/wiki/References/_references.bib}


\usepackage{booktabs}
\usepackage{longtable}
\usepackage{array}
\usepackage{multirow}
\usepackage{wrapfig}
\usepackage{float}
\usepackage{colortbl}
\usepackage{pdflscape}
\usepackage{tabu}
\usepackage{threeparttable}
\usepackage{threeparttablex}
\usepackage[normalem]{ulem}
\usepackage{makecell}
\usepackage{xcolor}
\usepackage{etoolbox}
\AtBeginEnvironment{Shaded}{\fontsize{7}{9}\selectfont}
\AtBeginEnvironment{Highlighting}{\fontsize{7}{9}\selectfont}
\makeatletter
\@ifpackageloaded{caption}{}{\usepackage{caption}}
\AtBeginDocument{%
\ifdefined\contentsname
  \renewcommand*\contentsname{Table of contents}
\else
  \newcommand\contentsname{Table of contents}
\fi
\ifdefined\listfigurename
  \renewcommand*\listfigurename{List of Figures}
\else
  \newcommand\listfigurename{List of Figures}
\fi
\ifdefined\listtablename
  \renewcommand*\listtablename{List of Tables}
\else
  \newcommand\listtablename{List of Tables}
\fi
\ifdefined\figurename
  \renewcommand*\figurename{Figure}
\else
  \newcommand\figurename{Figure}
\fi
\ifdefined\tablename
  \renewcommand*\tablename{Table}
\else
  \newcommand\tablename{Table}
\fi
}
\@ifpackageloaded{float}{}{\usepackage{float}}
\floatstyle{ruled}
\@ifundefined{c@chapter}{\newfloat{codelisting}{h}{lop}}{\newfloat{codelisting}{h}{lop}[chapter]}
\floatname{codelisting}{Listing}
\newcommand*\listoflistings{\listof{codelisting}{List of Listings}}
\makeatother
\makeatletter
\makeatother
\makeatletter
\@ifpackageloaded{caption}{}{\usepackage{caption}}
\@ifpackageloaded{subcaption}{}{\usepackage{subcaption}}
\makeatother
\ifLuaTeX
  \usepackage{selnolig}  % disable illegal ligatures
\fi
\usepackage[]{biblatex}
\addbibresource{/wiki/References/_references.bib}
\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}}
\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available
\urlstyle{same} % disable monospaced font for URLs
\makeatletter
\hypersetup{
  pdftitle={Hansard DB: A Relational Database of Australian Parliamentary Speech},
  pdfauthor={{\if@review{Anonymous}\else{Alfie Chadwick; Simon D. Angus; Libby Lester}\fi}},
  pdfkeywords={To Insert},
  colorlinks=true,
  linkcolor={blue},
  filecolor={Maroon},
  citecolor={Blue},
  urlcolor={Blue},
  pdfcreator={LaTeX via pandoc}}
\makeatother

\title{Hansard DB: A Relational Database of Australian Parliamentary
Speech}
\authorsnames{Alfie Chadwick, Simon D. Angus, Libby Lester}
\authorsaffiliations{
    {Monash Climate Communication Hub, School of Media, Film and
Journalism, Monash University}, 
    {Dept. of Economics \& SoDa Laboratories, Monash Business School,
Monash University}, 
    {Monash Climate Communication Hub, School of Media, Film and
Journalism, Monash University}
}


\begin{document}
\abstract{Legislative chambers are central institutions of democratic
governance, where representatives debate policy, justify decisions, and
are held accountable. In Australia, the principal record of what is said
and done in parliament is the official parliamentary transcript,
commonly known in Westminster systems as Hansard. Yet while these
records are publicly accessible, they are difficult to use at scale
because they are not readily queryable, computationally integrated, or
suitable for systematic longitudinal analysis.

This paper addresses that problem by introducing Hansard DB, a
relational database of Australian federal parliamentary speech spanning
Federation to the present. Hansard DB integrates speeches, questions,
answers, and interjections with parliamentarian metadata from the
Parliamentary Handbook. Built through a multi-stage parsing and
validation pipeline, the database supports flexible querying across text
and metadata for large-scale and longitudinal analysis.

The paper also discusses the epistemic limitations of Hansard research.
The official transcripts are edited and incomplete records of political
speech, shaped by institutional rules, editorial practices, and
omissions of tone, gesture, and context. Hansard DB therefore
contributes not only a usable database, but also guidance for
interpreting parliamentary transcripts acconting for these limitations.}
\keywords{To Insert}
\maketitle
\volume{1}
\pubnumber{1}
\pubyear{2019}
\firstpage{1}
\doi{10.5117/CCRxxxxxxxxx}
\shortauthors{Chadwick et al.}\section{Introduction}\label{introduction}

In any modern democracy, transparency is essential to ensuring
accountability, public trust, informed participation, and the prevention
of corruption \autocite{stiglitz1999}. One of the primary instruments
for transparency in Australia -- and in many other Westminster-style
democracies -- is Hansard: the official, verbatim transcript of
parliamentary proceedings \autocite{PARHansard}. Hansard provides a
detailed public record of every division, question, and speech delivered
in both houses of the Australian Parliament since Federation in 1901 and
is an invaluable resource for citizens, journalists, and historians to
scrutinise debates and hold elected representatives accountable.

However, the current form of Hansard, while publicly available, presents
significant challenges for those wishing to conduct large-scale
analysis. Parliamentary records are published in PDF or XML formats,
both of which often suffer from inconsistent formatting and structural
errors. These issues make automated data extraction and processing
difficult, particularly for researchers and developers seeking to build
tools or undertake comprehensive analyses. Furthermore, Hansard's
official repository, ParlInfo, offers limited functionality: it does not
support complex querying of the full corpus or easy extraction of
targeted subsets of data.

The challenges surrounding the accessibility of the Australian Hansard
have led to a highly fragmented research environment for Australian
parliamentary texts. Researchers often find themselves creating bespoke
datasets -- each extracting and cleaning Australian Hansard data
according to their own requirements and unique methodological approaches
\autocite{alexander2021,ng2025,martinez2023,hames2025}. This repeated,
individualised extraction not only leads to unnecessary duplication of
effort, but also results in a proliferation of datasets that are
difficult to compare or integrate across projects.

This problem is particularly acute given the extraordinary advances in
computational tools for textual analysis over the past decade. Natural
language processing (NLP), including transformer-based models and large
language models (LLMs), have opened new possibilities for extracting
meaning, sentiment, argument structure, and rhetorical patterns from
large corpora \autocite{ziems2024}. Sophisticated discourse analysis
platforms have become increasingly accessible, enabling researchers
across communications, political science, economics, and digital
humanities to pursue questions that were previously impractical or
impossible to investigate at scale. Yet the utility of these powerful
analytical tools depends fundamentally on the availability of data in
structured, machine-readable formats. None of these capabilities matter
if the underlying data cannot be reliably extracted, cleaned, and
organised for analysis \autocite{angus2026}.

\textcite{katz2023} made an important contribution toward addressing
these challenges by providing a tabular dataset of Australian Hansard
proceedings. This resource significantly improved longitudinal research
by offering cleaner and more reliable data than raw downloads. But
important limitations remain. Current coverage begins in 1998
\autocite{katz2026}, and rectangular data formats are less well suited
to representing the nested and relational structure of parliamentary
proceedings, including the links between speeches, questions, answers,
interjections, chamber context, and changing speaker careers over time.

This paper addresses that problem by introducing Hansard DB, a
relational database of Australian federal parliamentary speech spanning
Federation to the present. Hansard DB integrates speeches, questions,
answers, and interjections with parliamentarian metadata from the
Parliamentary Handbook in a single structured resource designed for
flexible longitudinal and computational analysis. The database is built
through a multi-stage parsing and validation pipeline intended not only
to improve usability, but also to make visible where the underlying
record is uncertain, inconsistent, or incomplete.

This paper makes three principal contributions to the study of
Australian parliamentary discourse:

\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\item
  \textbf{Practical contribution}: We construct and openly release a
  comprehensive, cleaned, integrated, and queryable relational database
  of Australian Hansard proceedings from Federation (1901) to the
  present, including speeches, questions, answers, and interjections
  with full metadata from the Parliamentary Handbook.
\item
  \textbf{Technical contribution}: We document and release the full
  parsing pipeline, including automated detection and correction of date
  errors, speaker attribution issues, and service inconsistencies,
  providing a reproducible method for similar parliamentary data
  projects.
\item
  \textbf{Epistemic contribution}: We show that responsible large-scale
  analysis of parliamentary records requires confronting both technical
  errors and systemic limitations. Understanding what Hansard
  records---and what it omits---is essential for valid interpretation.
\end{enumerate}

The rest of this paper is structured as follows. The Background section
provides necessary context on the Australian parliamentary system and
explores how Hansard is constructed as a textual artefact. The Method
section details the pipeline for transforming raw Hansard XML into a
relational database, including the automated validation procedures and
key design decisions. The Results section demonstrates Hansard DB's
utility. Finally, the Discussion section explores the possible uses of
this resource and the limitations of its interpretation.

\section{Background}\label{background}

\subsection{The Australian Parliamentary
Context}\label{the-australian-parliamentary-context}

Australia's Federal Parliament broadly mirrors other Westminster-style
systems seen throughout various Commonwealth countries
\autocite{nethercote2016}. It has two chambers: the House of
Representatives and the Senate. House members represent constituencies,
while senators represent the states \autocite{AEC}. The government is
formed from the party or coalition with a majority in the House of
Representatives \autocite{ward2014}. Unlike its British inspiration, the
Australian Senate has strong powers to block legislation, leading some
to describe the system as a `Washminster' model: a blend of Westminster
tradition and the powerful upper house characteristic of the United
States Senate \autocite{thompson2001}. Australia's states and
territories also have their own parliaments, which operate independently
of the Federal Parliament within their respective jurisdictions.

The formal head of state is the monarch, represented in Australia by the
Governor-General, who plays a largely ceremonial role in the legislative
process \autocite{PA2025}. Day-to-day leadership rests with the Prime
Minister, who heads a cabinet of ministers responsible for various
governmental portfolios \autocite{PA2025a}. The second-largest party or
coalition in the House forms the opposition, led by the Leader of the
Opposition and supported by shadow ministers in a shadow cabinet. The
Opposition's role is to hold the government accountable, scrutinise its
actions, and offer alternative policies to the public
\autocite{PA2025a}.

\subsection{Procedural and Political Influences on Parliamentary
Speech}\label{procedural-and-political-influences-on-parliamentary-speech}

\subsubsection{Formal constraints on
speech}\label{formal-constraints-on-speech}

Communication within Australia's parliamentary chambers is profoundly
shaped by the procedural rules and customs that define the Westminster
system. Parliamentary language is tightly regulated by standing orders,
formal rules that dictate not only what may be said, but also how, by
whom, and when \autocite{PEOorder}. Members must direct all comments
through the Speaker, use respectful and non-inflammatory language, and
avoid references to ongoing legal matters or personal attacks. These
constraints enforce a formal and often indirect style of speech, where
criticism must be carefully phrased and rhetoric is highly ritualised.

The daily routine of chamber business reinforces established norms.
Proceedings follow a structured sequence: formal openings, consideration
of government bills within strict procedural frameworks, and members'
statements that offer brief opportunities to address issues beyond
current bills \autocite{ward2014}. Questions without notice are a
notable exception and often attract significant media and public
attention \autocite{APHQuestionTime}. During Question Time, government
backbenchers may pose friendly questions -- known as Dorothy Dixers --
while opposition members directly challenge ministers on virtually any
aspect of executive activity, with the government expected to respond.
Despite its ostensible purpose as a mechanism of government
accountability, Question Time frequently serves to score political
points rather than genuinely seek information or hold the executive to
account \autocite{hebden2023,ilie2022}.

\subsubsection{Performance and party
dynamics}\label{performance-and-party-dynamics}

Although parliamentary speech is structured around the principle of open
debate, these exchanges are seldom spontaneous contests of policy or
ideas \autocite{bayley2004}. Instead, debates in the Australian
Parliament function as carefully choreographed performances, where
rhetorical jabs and gestures are less about policy construction and more
about signalling party strength, unity, and competence to the public.
The image of adversarial contest is itself a political performance,
designed to show that representatives are energetically advocating for
their causes -- even when the real policy bargaining happens off camera
\autocite{denniss2025,crewe2020}.

Political parties are central to this performance because they organise,
coordinate, and control what unfolds in the chamber. Party strategy and
policy formulation occur behind closed doors in party rooms -- the
``backstage'' -- while parliament serves as the ``front stage'' for a
unified public presentation \autocite{karlsson2022,alasuutari2025}. This
backstage coordination is necessary because parties must present
themselves as coherent collective actors if they are to compete
effectively for office, maintain legislative unity, and govern
successfully. It therefore constrains the policy choices and rhetoric
available to individual MPs, who are expected to support the party's
agreed position \autocite{bowler1999}. Party leaders maintain discipline
by controlling members' career incentives and parliamentary
opportunities -- such as advancement, committee positions, access to
party resources, and renomination -- which reduces the scope for open
dissent \autocite{proksch2014,bowler1999}.

Party management also orchestrates who speaks and what is spoken about
at a broader level. Opportunities to speak are granted rather than
intrinsic rights, and the business of the chamber is tabled and
prioritised according to the government's agenda
\autocite{ward2014,back2019}. Within these longstanding procedural
rules, speeches and exchanges become part of a broader political
performance, serving not only parliamentary business but also the
pursuit of political advantage and the management of public perception.

\subsubsection{The recorded audience}\label{the-recorded-audience}

Parliamentary speech is inherently mediated, addressed not only to
parliamentarians participating in debate but also to broader publics
watching from afar, especially the media through which it is reported
\autocite{davis2009a,davis2009,vliegenthart2016}. This mediation
operates in two directions.

On one hand, parliamentarians perform both for those present in the
chamber and for audiences beyond it: not only for the general public,
but also to reassert leadership, signal to party members, frame key
debates for their own side, and position themselves against opponents
\autocite{proksch2014}. Theatrical actions and visual stunts are often
deliberately designed to resonate in the room while also lending
themselves to media coverage and wider circulation
\autocite{edelman1988}.

A particularly vivid illustration occurred in 2017, when then-Treasurer
Scott Morrison brought a lump of coal into the House of Representatives
as a deliberate prop to make a political point about energy policy.

\begin{quote}
Mr MORRISON (Cook---Treasurer) (14:28): This is coal. Do not be afraid.
Do not be scared. It will not hurt you.

The SPEAKER: The Treasurer knows the rule on props.\footnote{House of
  Representatives Hansard, 9 February 2017, p.~536}
\end{quote}

This stunt, and others like them, are theatrical performances staged for
audiences beyond the chamber itself -- deliberate acts designed to be
watched, recorded, and circulated to the broader public.

On the other hand, awareness of being recorded can shape parliamentary
speech, encouraging strategic avoidance such as evading questions,
qualifying answers, or withholding potentially damaging remarks
\autocite{ilie2022}. Parliamentarians may also explicitly acknowledge
this mediated context. For example, when MP Julian Hill told the House
about his daughter's conception, he remarked:

\begin{quote}
``I won't tell the story of how my daughter was conceived in the
Hansard.''\footnote{House of Representatives Hansard, 23 March 2026,
  p.~161}
\end{quote}

Some MPs also push back against intensified recording and scrutiny,
arguing that elected representatives need space to exercise judgement
rather than simply perform for cameras
\autocite{smith2018,chisholm2005}. Their objection is not necessarily to
publicity as such, but to forms of scrutiny that flatten parliamentary
activity into easily consumable metrics or spectacles, without capturing
the institutional constraints and contextual factors -- such as party
whipping, pairing arrangements, selective participation, illness, or
leave -- that shape parliamentary behaviour. In this view, increased
visibility without increased public understanding can distort, rather
than enhance, democratic accountability.

\subsection{Hansard as an Edited Textual
Artefact}\label{hansard-as-an-edited-textual-artefact}

\subsubsection{Editorial decisions}\label{editorial-decisions}

While Hansard is often presented as a verbatim transcript, it is in fact
a carefully edited textual artefact that both represents and reshapes
parliamentary speech
\autocite{edwards2016,kotze2023,slembrouck1992,mollin2007}. Reported in
2023 to comprise around 45 staff members \autocite{coleman2023},
Hansard's reporters and editors collectively determine what enters the
official record. These staff first produce a ``proof'' transcript,
published within hours of a sitting \autocite{PEOhansard}. A central
part of the editing process is the removal of repetition and digression
to produce a more coherent and readable text. Grammar and syntax are
corrected, colloquialisms are smoothed out, and incomplete sentences may
be clarified, all with the stated aim of capturing what the speaker
meant to say rather than their exact words \autocite{PEOhansard}. In
some instances, Hansard editors may remove entire passages or speeches
from the official record if they are judged to be out of order,
offensive, or in breach of parliamentary rules
\autocite{feldman2023,hames2025}. Members of Parliament may also request
factual corrections to proofs, such as names or historical details, but
may not alter the meaning or substance of proceedings. The final
official Hansard then replaces the proof version, typically around two
weeks later \autocite{PEOhansard}. The cumulative effect of these
editorial decisions is to produce a text that is more formal, orderly,
and controlled than the debate as originally spoken
\autocite{kotze2023}.

Interjections from other members---such as jeers, cheers, or
laughter---are also selectively recorded, often only when they are
judged to constitute material interruptions rather than background
noise, as determined by Hansard editorial policies
\autocite{edwards2016}. This selectivity is compounded by the absence of
any systematic attendance data, since Hansard provides no record of how
many members were actually present in the chamber during a given debate.
While formal quorum requirements must be met (40 members in the House of
Representatives and 32 in the Senate) for a chamber to sit officially
\autocite{aphquorum}, the record does not distinguish between a minister
addressing a full chamber and one speaking to only a handful of
parliamentarians.

At the same time, this editorial apparatus is not static, and staff
turnover, evolving guidelines, and individual variations in judgement
mean that consistency across the corpus cannot be assumed. Judgements
about what counts as a ``material'' interjection, whether a remark is
sufficiently ``offensive'' to omit, or how best to render an incomplete
sentence are inherently subjective and may vary from one parliament to
the next, from one session to the next, or even from one day to the
next. One reporter may regard a particular interjection as worth
recording, while another, on a different day or in a different debate,
may let it pass without comment. These difficulties are compounded by
the apparent absence of publicly available editorial policies, which
makes it difficult to track how such judgements have been made,
standardised, or revised over time \autocite{edwards2016}. This temporal
variability is an inevitable feature of any human-mediated transcript
produced over more than a century of continuous operation and introduces
a further layer of editorial filtering beyond the formal procedural
rules themselves.

\subsubsection{What can never be
captured}\label{what-can-never-be-captured}

Beyond editorial choices, there are fundamental limitations inherent to
the transformation from speech to text that no amount of editing can
overcome. Elements such as tone, gesture, and emphasis are inevitably
lost. The absence of vocal inflection, facial expression, and physical
movements alters how statements are interpreted, often flattening
emotion or ambiguities that would be apparent in person or in broadcast
video \autocite{bucholtz2000}.

To give one example: when Tim Wilson, member for Goldstein, sung a verse
of Billy Joel's ``We Didn't Start the Fire'' adapted to mock the
Treasurer, Hansard recorded the lyrics but not the melody, producing a
textual artefact that bears no trace of the performance's tone:

\begin{quote}
You know, there's a Billy Joel song that sounds kind of relevant: `The
Treasurer did start the inflation fire. The inflation is burning while
the Treasurer is squirming. The Treasurer did start inflation fire. Yes,
he poured debt petrol on it, and he cashed organised crime to fuel
it.'\footnote{House of Representatives Hansard, 4 March 2026, p.~45}:
\end{quote}

Such examples illustrate the fundamental limitations of treating
parliamentary transcripts as transparent records of communication --
missing not just context, but entire modalities of expression.

The use of props and visual stunts, which frequently attract media
attention \autocite{mclellan2019}, is rarely documented in official
records, further limiting the full context of the communication. A
particularly vivid illustration occurred in 2017, when Senator Pauline
Hanson entered the Senate wearing a burqa (an Islamic face veil), a
deliberately provocative act that generated significant media coverage.
Yet the Hansard record captures only the procedural aftermath:

\begin{quote}
\emph{Senator Hanson having entered the chamber--}

Senator DUNIAM: What on earth?

\emph{Honourable senators interjecting--}

The PRESIDENT: Senators, order! Senators, I've been advised by the clerk
via the attendant that the identity of Senator Hanson was established
before she entered the chamber. I'm just going to reflect on the mode of
dress that Senator Hanson is using. We'll continue with question
time.\footnote{Senate Hansard, 17 August 2017, p.~5980}
\end{quote}

The Hansard transcript records the chaos but cannot convey the visual
spectacle that dominated news coverage -- the burqa itself, the
reactions of other senators, or the theatrical dimension of the moment.

As a result, Hansard offers only a partial reflection of parliamentary
communication: it provides transparency and accountability to the
public, but omits much of the immediacy, spontaneity, and theatricality
that characterise live debate.

Hansard is therefore not a transparent or complete record of
parliamentary communication. In transforming speech into text, it
necessarily strips away tone, gesture, visual performance, and other
expressive elements that shape how speech is understood in the chamber
and beyond. Yet as the continuous official record of what is formally
said, it remains indispensable for analysing longer-term patterns in
parliamentary discourse, including framing, agenda-setting, and the
quality of debate. The value of a properly structured Hansard database
lies not in overcoming the inherent limits of transcription, but in
enabling this kind of careful longitudinal analysis at a scale that
existing fragmented resources do not allow.

\section{Method}\label{method}

\begin{figure}

\centering{

\pandocbounded{\includegraphics[keepaspectratio]{./pipeline.png}}

}

\caption{\label{fig-pipeline}Overview of the multi-stage processing
pipeline used to transform raw Hansard XML and Parliamentary Handbook
metadata into a structured relational database. Arrows indicate data
flow from acquisition through document-, chamber-, and speech-level
parsing to final database storage, with automated validation and
human-written fixes applied at the database stage.}

\end{figure}%

The transformation of raw parliamentary transcripts into a structured,
queryable relational database proceeds through a multi-stage pipeline.
We begin by using custom scrapers, which automatically retrieve files
from online sources, to collect raw XML transcripts from the official
Parliament Hansard archive and from a pre-existing historical
collection, which are then stored in the database. In parallel, we
retrieve parliamentarian metadata, including names, party affiliations,
electorates, and service histories, from the Parliamentary Handbook API,
through which these records are made available in machine-readable form.

These two data sources form the inputs to the processing workflow. The
raw XML documents are then processed in three stages by parsers, which
extract and reorganise information from structured files. First,
document-level parsing identifies high-level information such as the
date, parliament number, session, and chamber, and separates each
document into major structural blocks such as the main chamber or the
Federation Chamber. Second, chamber-level parsing divides these blocks
into individual contributions such as speeches, questions, and answers.
Third, speech-level parsing converts the XML-formatted contributions
into clean, structured text objects ready for database storage, while
extracting the substantive content, speaker attribution, and associated
metadata for each contribution.

Once these records have been stored in the database, two further
automated processes are applied. First, internal joining logic links
each speech to the relevant parliamentarian record by matching speaker
identifiers to member records. Second, fixes logic applies manually
specified corrections to resolve known problems in either the joining
stage or the parser output, including date errors, alternative
parliamentarian identifiers, and inconsistencies in service periode
errors, reconciling alternative parliamentarian IDs, or fixing service
period discrepancies.

\subsection{Data sourcing}\label{data-sourcing}

The foundation of this project is the comprehensive acquisition of
Australian parliamentary transcripts in machine-readable format, drawn
from two principal sources: Tim Sherratt's hansard-xml repository
\footnote{https://github.com/wragge/hansard-xml} and documents scraped
directly from the Parliament of Australia Hansard page \footnote{https://www.aph.gov.au/Parliamentary\_Business/Hansard}
. Both the official parliamentary archive and the hansard-xml repository
are available under Creative Commons licences \footnote{https://www.aph.gov.au/Help/Disclaimer\_Privacy\_Copyright\#c}.

Hansard-xml encompasses proceedings from 1901 to 2005, offering scraped
XML documents alongside detailed documentation of missing sessions and
record anomalies. Although hansard-xml represents a vital historical
dataset, it is important to acknowledge that the official Hansard
archive may be retroactively updated to incorporate corrections or
additional material \autocite{sherratt2024}. Consequently, hansard-xml
may occasionally lag behind the most current official version if
amendments occur subsequent to the repository's latest update.
Nonetheless, it was utilised due to the considerable challenges
associated with alternative sources.

For debates from 2000 to the present, this project uses a scraper
targeting the Parliament's Hansard ParlInfo interface. OpenAustralia was
reviewed but not used as a primary source as it stores proofs, rather
than the finalised documents.

By combining the extensive historical coverage of hansard-xml with
up-to-date and authoritative extractions from the official parliamentary
archive, this project assembles a unified Hansard corpus -- from
federation to the present day.

\subsection{Parsing}\label{parsing}

\subsubsection{Document Level}\label{document-level}

The Hansard XML documents generally follow a standard structure, with a
single \texttt{\textless{}hansard\textgreater{}} root containing a
\texttt{\textless{}session.header\textgreater{}} and multiple section
transcripts, as described in Figure~\ref{fig-hansard}.

\begin{figure}

\centering{

\begin{Shaded}
\begin{Highlighting}[numbers=left,,]
\NormalTok{\textless{}}\KeywordTok{hansard} \ErrorTok{...}\NormalTok{ \textgreater{}}
\NormalTok{    \textless{}}\KeywordTok{session.header}\NormalTok{\textgreater{}}
\NormalTok{    \textless{}/}\KeywordTok{session.header}\NormalTok{\textgreater{}}
\NormalTok{    \textless{}}\KeywordTok{section1.xscript}\NormalTok{\textgreater{}}
\NormalTok{    \textless{}/}\KeywordTok{section1.xscript}\NormalTok{\textgreater{}}
\NormalTok{    ...}
\NormalTok{\textless{}/}\KeywordTok{hansard}\NormalTok{\textgreater{}}
\end{Highlighting}
\end{Shaded}

}

\caption{\label{fig-hansard}Canonical root structure of a Hansard XML
document. The \texttt{\textless{}hansard\textgreater{}} element contains
a single \texttt{\textless{}session.header\textgreater{}} with
sitting-day metadata and one or more
\texttt{\textless{}section.xscript\textgreater{}} elements, each
capturing a distinct set of proceedings (e.g.~main chamber, Federation
Chamber, or answers to questions on notice).}

\end{figure}%

Each section captures a distinct set of proceedings -- such as the main
chamber, Federation Chamber, or answers to questions on notice -- and
was parsed separately. The
\texttt{\textless{}session.header\textgreater{}} element contains
metadata about each document, extracted from the following child tags:
\texttt{\textless{}date\textgreater{}} (sitting date),
\texttt{\textless{}parliament.no\textgreater{}} (parliament number),
\texttt{\textless{}session.no\textgreater{}} (session number),
\texttt{\textless{}period.no\textgreater{}} (period number), and
\texttt{\textless{}chamber\textgreater{}} (House of Representatives or
Senate).

Hanging debates -- debate elements situated directly under the
\texttt{\textless{}hansard\textgreater{}} root rather than within a
designated section -- required specialised handling. These elements were
reclassified based on the occurrence of the term ``notice'' in their
metadata: if ``notice'' and ``answer'' appeared in the title (excluding
the plural form ``notices''), the element was categorised as an answer
to a question on notice; otherwise, it was assigned to the main chamber.
Manual review was conducted to verify that this keyword-based approach
produced valid results.

\subsubsection{Chamber Level}\label{chamber-level}

Each \texttt{\textless{}section.xscript\textgreater{}} element was
parsed independently, as these sections do not follow a strict format.
Instead, they use a flexible hierarchy built from
\texttt{\textless{}debate\textgreater{}} elements, typically featuring
an embedded \texttt{\textless{}debateinfo\textgreater{}}. Debates may
also contain nested \texttt{\textless{}subdebate.1\textgreater{}}
elements, which in turn can contain further
\texttt{\textless{}subdebate.2\textgreater{}} elements, with each
subdebate level including its own metadata
(\texttt{\textless{}subdebateinfo\textgreater{}}). At every hierarchical
level -- debate or subdebate -- the proceedings are ultimately expressed
through \texttt{\textless{}speech\textgreater{}},
\texttt{\textless{}question\textgreater{}}, or
\texttt{\textless{}answer\textgreater{}} elements, which are the primary
elements of interest for this dataset. This structure is demonstrated in
Figure~\ref{fig-session}.

\begin{figure}

\centering{

\begin{Shaded}
\begin{Highlighting}[numbers=left,,]
\NormalTok{\textless{}}\KeywordTok{section.xscript}\NormalTok{\textgreater{}}
\NormalTok{    \textless{}}\KeywordTok{debate}\NormalTok{\textgreater{}}
\NormalTok{        \textless{}}\KeywordTok{debateinfo}\NormalTok{\textgreater{}}
\NormalTok{            \textless{}}\KeywordTok{title}\NormalTok{\textgreater{}BILLS\textless{}/}\KeywordTok{title}\NormalTok{\textgreater{}}
\NormalTok{        \textless{}/}\KeywordTok{debateinfo}\NormalTok{\textgreater{}}
\NormalTok{        \textless{}}\KeywordTok{speech}\NormalTok{\textgreater{}...\textless{}/}\KeywordTok{speech}\NormalTok{\textgreater{}}
\NormalTok{        \textless{}}\KeywordTok{question}\NormalTok{\textgreater{}...\textless{}/}\KeywordTok{question}\NormalTok{\textgreater{}}
\NormalTok{        \textless{}}\KeywordTok{subdebate.1}\NormalTok{\textgreater{}}
\NormalTok{            \textless{}}\KeywordTok{subdebateinfo}\NormalTok{\textgreater{}}
\NormalTok{                \textless{}}\KeywordTok{title}\NormalTok{\textgreater{}Specific Bill\textless{}/}\KeywordTok{title}\NormalTok{\textgreater{}}
\NormalTok{            \textless{}/}\KeywordTok{subdebateinfo}\NormalTok{\textgreater{}}
\NormalTok{            \textless{}}\KeywordTok{speech}\NormalTok{\textgreater{}...\textless{}/}\KeywordTok{speech}\NormalTok{\textgreater{}}
\NormalTok{            \textless{}}\KeywordTok{subdebate.2}\NormalTok{\textgreater{}}
\NormalTok{                \textless{}}\KeywordTok{subdebateinfo}\NormalTok{\textgreater{}}
\NormalTok{                    \textless{}}\KeywordTok{title}\NormalTok{\textgreater{}Amendment Discussion\textless{}/}\KeywordTok{title}\NormalTok{\textgreater{}}
\NormalTok{                \textless{}/}\KeywordTok{subdebateinfo}\NormalTok{\textgreater{}}
\NormalTok{                \textless{}}\KeywordTok{speech}\NormalTok{\textgreater{}...\textless{}/}\KeywordTok{speech}\NormalTok{\textgreater{}}
\NormalTok{            \textless{}/}\KeywordTok{subdebate.2}\NormalTok{\textgreater{}}
\NormalTok{        \textless{}/}\KeywordTok{subdebate.1}\NormalTok{\textgreater{}}
\NormalTok{    \textless{}/}\KeywordTok{debate}\NormalTok{\textgreater{}}
\NormalTok{\textless{}/}\KeywordTok{section.xscript}\NormalTok{\textgreater{}}
\end{Highlighting}
\end{Shaded}

}

\caption{\label{fig-session}Representative
\texttt{\textless{}section.xscript\textgreater{}} element illustrating
the flexible, nested hierarchy used to organise chamber proceedings.
\texttt{\textless{}debate\textgreater{}} elements may contain
\texttt{\textless{}subdebate.1\textgreater{}} and
\texttt{\textless{}subdebate.2\textgreater{}} children, each with its
own \texttt{\textless{}debateinfo\textgreater{}} or
\texttt{\textless{}subdebateinfo\textgreater{}} metadata block.
Speeches, questions, and answers appear at any hierarchical level and
are extracted in document order to preserve the flow of debate.}

\end{figure}%

To extract these core elements, each
\texttt{\textless{}section.xscript\textgreater{}} was systematically
searched for any \texttt{\textless{}speech\textgreater{}},
\texttt{\textless{}question\textgreater{}}, or
\texttt{\textless{}answer\textgreater{}} tags, preserving their
sequential order as it appears in the document. This ensures that the
parsed records faithfully represent the original chamber proceedings,
capturing both the structure and flow of debate.

\paragraph{Question and Answer
Pairings}\label{question-and-answer-pairings}

One of the unique features of the Australian parliamentary process is
the formal questioning of government, which is recorded in Hansard using
\texttt{\textless{}question\textgreater{}} and
\texttt{\textless{}answer\textgreater{}} elements. However, the XML
structure does not explicitly link individual questions to their
corresponding answers, presenting a challenge for data extraction.

To address this, a pairing strategy was implemented: for each
\texttt{\textless{}question\textgreater{}} element, the parser searches
forward through its siblings within the same parent element to find the
first \texttt{\textless{}answer\textgreater{}} element. If such an
answer exists, it is paired with the question. This approach leverages
the typical ordering and nesting of questions and their responses,
allowing the dataset to reconstruct the logical connections between
questions and answers, even in the absence of explicit identifiers.
Questions without answers and answers without questions are both handled
gracefully and stored as unpaired elements, ensuring no data is lost
during processing.

\paragraph{Debate Information
Extraction}\label{debate-information-extraction}

To provide richer context for each speech, question, or answer, it is
important to capture the titles and topics of the debates and subdebates
in which they occur. Hansard embeds this contextual data within the
elements: \texttt{\textless{}debateinfo\textgreater{}} and
\texttt{\textless{}subdebateinfo\textgreater{}}. However, these
informational elements may appear at different hierarchical levels
within the chamber transcript.

To systematically extract hierarchical debate context, a recursive
method was used. For each target element (such as a speech), the parser
traverses up through the XML tree, moving from the current element to
its parent. At each level, it searches for a directly nested metadata
element -- either \texttt{\textless{}debateinfo\textgreater{}},
\texttt{\textless{}subdebateinfo\textgreater{}}, or
\texttt{\textless{}title\textgreater{}}. If a
\texttt{\textless{}title\textgreater{}} tag is found, its text is
cleaned to remove excessive whitespace and appended to a list of titles.
If a \texttt{\textless{}debateinfo\textgreater{}} or
\texttt{\textless{}subdebateinfo\textgreater{}} is found, the parser
extracts the embedded \texttt{\textless{}title\textgreater{}} from
within. The search proceeds upward through each ancestor until the root
is reached or no further parents are found.

Once all titles from the current element up through its ancestral
debates and subdebates have been collected, their order is reversed.
This reversal ensures the final title string reflects the natural
top-down progression (from broader debate context to narrower
subdebate). The resulting string, with each level separated by commas,
is then attached to each speech, question, or answer as a descriptive
context label.

\subsubsection{Speech Level}\label{speech-level}

At the speech level, Hansard records are structured around
\texttt{\textless{}speech\textgreater{}} elements (which also serve as
the base for \texttt{\textless{}question\textgreater{}} and
\texttt{\textless{}answer\textgreater{}} elements). Each speech element
contains a speaker identifier (the talker), substantive content (text),
and may contain any number of interjections (interruptions from other
members).

The talker identifies who is speaking and is typically provided through
a \texttt{\textless{}talker\textgreater{}} element containing a
\texttt{\textless{}name.id\textgreater{}} unique identifier. The speech
content is distributed across one or more
\texttt{\textless{}para\textgreater{}} or
\texttt{\textless{}p\textgreater{}} elements, which can appear as direct
children of the speech element, within a
\texttt{\textless{}talk.start\textgreater{}} block, or interspersed with
interjections.

Interjections represent interruptions to a speech by another member.
They may appear in different forms depending on the era: attributed
interjections where the speaker is explicitly identified through nested
\texttt{\textless{}talker\textgreater{}} elements within an
\texttt{\textless{}interjection\textgreater{}} block, or inline
interjections where the interruption is marked within the flow of the
main speech text.

The goal of the speech level parsers is to extract from each XML
element: the talker (speaker identifier), the substantive text of the
speech, and any interjections along with their attributed speakers where
applicable. Interjections were sorted into three types: - Office:
Interjections made by an officer of the house, most often procedural
interjections - General: Interjections where either the speaker or the
words spoken were not recorded. - Speaker: Interjections where a
specific part is attributed to a member or senator who is not an officer
of the house. To deal with the varied format of the XML structure across
the history of the digitised Hansard, nine distinct parser classes were
created. These can be grouped into three major eras that represent major
shifts in the XML structure: Early Digital (1981-1997), Mass
Digitisation (1901-1980 + 1998-2011), and Modern (May 2011-Present).

\paragraph{Early Digital (1981-1997)}\label{early-digital-1981-1997}

The Early Digital era contains three sub-parsers (hansard1981,
hansard1992, hansard1997) which handle the transition from paper-based
records to early digital formats.

\begin{figure}

\centering{

\begin{Shaded}
\begin{Highlighting}[numbers=left,,]
\NormalTok{\textless{}}\KeywordTok{SPEECH} \ErrorTok{...}\NormalTok{ NAMEID="XXX" ... \textgreater{}}
\NormalTok{  \textless{}}\KeywordTok{TALK.START}\NormalTok{\textgreater{}}
\NormalTok{    \textless{}}\KeywordTok{TALKER}\NormalTok{\textgreater{}}
\NormalTok{      \textless{}}\KeywordTok{NAME.ID}\NormalTok{\textgreater{}XXX\textless{}/}\KeywordTok{NAME.ID}\NormalTok{\textgreater{}}
\NormalTok{    \textless{}/}\KeywordTok{TALKER}\NormalTok{\textgreater{}}
\NormalTok{    \textless{}}\KeywordTok{PARA} \OtherTok{IN{-}LINE=}\StringTok{"1"}\NormalTok{\textgreater{}—Opening text...\textless{}/}\KeywordTok{PARA}\NormalTok{\textgreater{}}
\NormalTok{  \textless{}/}\KeywordTok{TALK.START}\NormalTok{\textgreater{}}
\NormalTok{  \textless{}}\KeywordTok{PARA}\NormalTok{\textgreater{}Main speech content continues here...\textless{}/}\KeywordTok{PARA}\NormalTok{\textgreater{}}
  
\NormalTok{  \textless{}}\KeywordTok{INTERJECT} \OtherTok{CHAIR=}\StringTok{"0"} \ErrorTok{...}\NormalTok{ NAMEID="YYY"\textgreater{}}
\NormalTok{    \textless{}}\KeywordTok{TALK.START}\NormalTok{\textgreater{}}
\NormalTok{      \textless{}}\KeywordTok{TALKER}\NormalTok{\textgreater{}...\textless{}/}\KeywordTok{TALKER}\NormalTok{\textgreater{}}
\NormalTok{      \textless{}}\KeywordTok{PARA} \OtherTok{IN{-}LINE=}\StringTok{"1"}\NormalTok{\textgreater{}—Interjection text...\textless{}/}\KeywordTok{PARA}\NormalTok{\textgreater{}}
\NormalTok{    \textless{}/}\KeywordTok{TALK.START}\NormalTok{\textgreater{}}
\NormalTok{  \textless{}/}\KeywordTok{INTERJECT}\NormalTok{\textgreater{}}
  
\NormalTok{  \textless{}}\KeywordTok{PARA}\NormalTok{\textgreater{}—Members interjecting \textless{}/}\KeywordTok{PARA}\NormalTok{\textgreater{}}

\NormalTok{  \textless{}}\KeywordTok{PARA}\NormalTok{\textgreater{}}
\NormalTok{    \textless{}}\KeywordTok{EMPHASIS} \OtherTok{FONT{-}WEIGHT=}\StringTok{"BOLD"}\NormalTok{\textgreater{}The SPEAKER}\ErrorTok{\textless{}}\NormalTok{\textbackslash{}EMPHASIS\textgreater{}Order!}
\NormalTok{  \textless{}}\KeywordTok{PARA}\NormalTok{\textgreater{}}

  
\NormalTok{  \textless{}}\KeywordTok{PARA}\NormalTok{\textgreater{}Speech continues after interjection...\textless{}/}\KeywordTok{PARA}\NormalTok{\textgreater{}}
\NormalTok{\textless{}/}\KeywordTok{SPEECH}\NormalTok{\textgreater{}}
\end{Highlighting}
\end{Shaded}

}

\caption{\label{fig-early-dig}Representative
\texttt{\textless{}SPEECH\textgreater{}} element from the Early Digital
era (1981--1997). Speaker identification relies on
\texttt{\textless{}NAME.ID\textgreater{}} within a
\texttt{\textless{}TALK.START\textgreater{}} block (1981 sub-parser) or
on a \texttt{NAMEID} attribute on the speech element itself (1992 and
1997 sub-parsers). Block-level interjections appear in dedicated
\texttt{\textless{}INTERJECT\textgreater{}} elements with nested
\texttt{\textless{}TALKER\textgreater{}} attribution; inline
interjections are identified heuristically from short paragraphs
containing ``interjecting'' or from bolded name spans at the start of a
\texttt{\textless{}PARA\textgreater{}}.}

\end{figure}%

Speaker identification differs across the sub-parsers. The 1981 parser
extracts the speaker identifier from
\texttt{\textless{}talker\textgreater{}/\textless{}name.id\textgreater{}}
elements within a \texttt{\textless{}talk.start\textgreater{}} block
(See Figure~\ref{fig-early-dig}, line 4). The 1992 and 1997 parsers
instead use a \texttt{nameid} attribute directly on the speech element
itself, which considerably simplified the parsing (See
Figure~\ref{fig-early-dig}, line 1). Inline interjections had no usable
speaker information.

Interjections in this era appear in two distinct forms. Block-level
interjections are contained within dedicated
\texttt{\textless{}interject\textgreater{}} or
\texttt{\textless{}interjection\textgreater{}} elements, which include
their own \texttt{\textless{}talker\textgreater{}} sub-elements for
speaker attribution (See Figure~\ref{fig-early-dig}, line 10-15). Inline
interjections in this format are poorly identified, hence a set of
heuristics are required to parse them. Short paragraph elements with the
word ``interjecting'' are used to identify general interjections (See
Figure~\ref{fig-early-dig}, line 17). Similarly, short, fully italicised
elements are also used to signify a general interjection. For speaker
and office interjections, it was found that a bolded name at the start
of the \texttt{para} element indicated an interjection (See
Figure~\ref{fig-early-dig} line 19-21).

For Block interjections, they were found to always be speaker or office
interjections. To differentiate, the presence of \texttt{chair="1"} or
\texttt{nameid=10000} (the placeholder for office speakers) was used to
identify office interjections, with all the rest assumed to be speaker.
For inline cases, the parser identifies
\texttt{\textless{}emphasis\textgreater{}} elements with
\texttt{font-weight="BOLD"} for office roles or
\texttt{font-slant="ITAL"} for general interjections. There were no
found examples where an inline interjection was a speaker interjection.

\paragraph{Mass Digitisation
(1901-2011)}\label{mass-digitisation-1901-2011}

The Mass Digitisation era spans contains three sub-parsers (hansard1901,
hansard1998, hansard2000). This era introduces a more structured
approach to XML formatting, with detailed
\texttt{\textless{}talker\textgreater{}} metadata, but lacks the
\texttt{\textless{}talk.text\textgreater{}} container found in the
Modern era (See Figure~\ref{fig-mass-dig}, line 23).

\begin{figure}

\centering{

\begin{Shaded}
\begin{Highlighting}[numbers=left,,]
\NormalTok{\textless{}}\KeywordTok{speech}\NormalTok{\textgreater{}}
\NormalTok{  \textless{}}\KeywordTok{talk.start}\NormalTok{\textgreater{}}
\NormalTok{    \textless{}}\KeywordTok{talker}\NormalTok{\textgreater{}}
\NormalTok{      \textless{}}\KeywordTok{name.id}\NormalTok{\textgreater{}XX4\textless{}/}\KeywordTok{name.id}\NormalTok{\textgreater{}}
\NormalTok{    \textless{}/}\KeywordTok{talker}\NormalTok{\textgreater{}}
\NormalTok{    \textless{}}\KeywordTok{para}\NormalTok{\textgreater{}—Opening speech text...\textless{}/}\KeywordTok{para}\NormalTok{\textgreater{}}
\NormalTok{  \textless{}/}\KeywordTok{talk.start}\NormalTok{\textgreater{}}
\NormalTok{  \textless{}}\KeywordTok{para}\NormalTok{\textgreater{}Main speech content continues...\textless{}/}\KeywordTok{para}\NormalTok{\textgreater{}}
  
\NormalTok{  \textless{}}\KeywordTok{para}\NormalTok{\textgreater{}}
\NormalTok{    \textless{}}\KeywordTok{inline} \OtherTok{font{-}weight=}\StringTok{"bold"}\NormalTok{\textgreater{}OTHER MP\textless{}/}\KeywordTok{inline}\NormalTok{\textgreater{}}
\NormalTok{    interjects from across the chamber...}
\NormalTok{  \textless{}/}\KeywordTok{para}\NormalTok{\textgreater{}}
  
\NormalTok{  \textless{}}\KeywordTok{para}\NormalTok{\textgreater{}}
\NormalTok{    \textless{}}\KeywordTok{inline} \OtherTok{font{-}style=}\StringTok{"italic"}\NormalTok{\textgreater{}}
\NormalTok{      interjection description}
\NormalTok{    \textless{}/}\KeywordTok{inline}\NormalTok{\textgreater{}}
\NormalTok{  \textless{}/}\KeywordTok{para}\NormalTok{\textgreater{}}
  
\NormalTok{  \textless{}}\KeywordTok{interjection}\NormalTok{\textgreater{}}
\NormalTok{    \textless{}}\KeywordTok{talk.start}\NormalTok{\textgreater{}}
\NormalTok{      \textless{}}\KeywordTok{talker}\NormalTok{\textgreater{}}
\NormalTok{        \textless{}}\KeywordTok{name.id}\NormalTok{\textgreater{}10000\textless{}/}\KeywordTok{name.id}\NormalTok{\textgreater{}}
\NormalTok{      \textless{}/}\KeywordTok{talker}\NormalTok{\textgreater{}}
\NormalTok{      \textless{}}\KeywordTok{para}\NormalTok{\textgreater{}—Office interjection text...\textless{}/}\KeywordTok{para}\NormalTok{\textgreater{}}
\NormalTok{    \textless{}/}\KeywordTok{talk.start}\NormalTok{\textgreater{}}
\NormalTok{  \textless{}/}\KeywordTok{interjection}\NormalTok{\textgreater{}}
  
\NormalTok{  \textless{}}\KeywordTok{continue}\NormalTok{\textgreater{}}
\NormalTok{    \textless{}}\KeywordTok{talk.start}\NormalTok{\textgreater{}}
\NormalTok{      \textless{}}\KeywordTok{talker}\NormalTok{\textgreater{}\textless{}}\KeywordTok{name.id}\NormalTok{\textgreater{}XX4\textless{}/}\KeywordTok{name.id}\NormalTok{\textgreater{}\textless{}/}\KeywordTok{talker}\NormalTok{\textgreater{}}
\NormalTok{      \textless{}}\KeywordTok{para}\NormalTok{\textgreater{}—Speech continues...\textless{}/}\KeywordTok{para}\NormalTok{\textgreater{}}
\NormalTok{    \textless{}/}\KeywordTok{talk.start}\NormalTok{\textgreater{}}
\NormalTok{  \textless{}/}\KeywordTok{continue}\NormalTok{\textgreater{}}
\NormalTok{\textless{}/}\KeywordTok{speech}\NormalTok{\textgreater{}}
\end{Highlighting}
\end{Shaded}

}

\caption{\label{fig-mass-dig}Representative
\texttt{\textless{}speech\textgreater{}} element from the Mass
Digitisation era (1901--1980 and 1998--2011). Speaker identification
uses
\texttt{\textless{}talk.start\textgreater{}/\textless{}talker\textgreater{}/\textless{}name.id\textgreater{}},
with fallback to \texttt{\textless{}continue\textgreater{}} elements for
speeches begun by an office holder. Block interjections appear in
\texttt{\textless{}interjection\textgreater{}} elements; inline
interjections are identified from bold or italic
\texttt{\textless{}inline\textgreater{}} elements within
\texttt{\textless{}para\textgreater{}} nodes. Unlike the Modern era,
this format lacks a \texttt{\textless{}talk.text\textgreater{}}
container to bound speech content.}

\end{figure}%

Speaker identification in the parser first checks
\texttt{\textless{}talk.start\textgreater{}/\textless{}talker\textgreater{}/\textless{}name.id\textgreater{}}
(See Figure~\ref{fig-mass-dig}, line 3), falling back to
\texttt{\textless{}talker\textgreater{}/\textless{}name.id\textgreater{}}
if not found. It also examines
\texttt{\textless{}continue/talk.start/talker/name.id\textgreater{}} for
alternate speakers for cases where the speech is started by an office
holder, but then continued by the speaker (See
Figure~\ref{fig-mass-dig}, line 32). A special case handles scenarios
where an office holder (\texttt{nameid="10000"}) starts the speech with
an interjection, which is often not recorded within an interjection
element.

Interjection identification in this era employs multiple strategies:
explicit \texttt{\textless{}interject\textgreater{}} or
\texttt{\textless{}interjection\textgreater{}} elements (See
Figure~\ref{fig-mass-dig}, line 14);
\texttt{\textless{}talk.start\textgreater{}} or
\texttt{\textless{}continue\textgreater{}} elements where the speaker
has the id \texttt{10000} (office holder); and inline interjections
identified through bold or italic
\texttt{\textless{}inline\textgreater{}} elements within
\texttt{\textless{}para\textgreater{}} elements (See
Figure~\ref{fig-mass-dig}, lines 10-19). Various heuristics were designs
to \texttt{\textless{}inline\textgreater{}} elements that signify
interjections, rather than names of places, bills or other descriptive
commentary.

Block interjects were always identified as either office or speaker
interjections, relying on the \texttt{name.id} to determine the type.
Starting from 2000, it was possible for a block interjection to not
include any text, indicating a general interjection made by the
identified speaker. Inline interjections could be any type of
interjection. Bolded inline elements at the start of a para indicated a
change of speaker, and were then checked for the presence of office
keywords (SPEAKER, CLERK, PRESIDENT, CHAIR, DEPUTY) to see if they were
office interjections, if they were not, they were seen as speaker
interjections (See Figure~\ref{fig-mass-dig}, lines 10-13). Italicise
inline elements were found to be general interjections (See
Figure~\ref{fig-mass-dig}, lines 15-19).

Block interjections consistently had successful talker attribution
through the \texttt{talker.name.id} elements. For inline interjections,
talker attribution was not possible.

\paragraph{Modern (May 2011-Present)}\label{modern-may-2011-present}

The Modern era uses a completely restructured XML format resembling
HTML, with three sub-parsers (hansard2011, hansard2012, hansard2021)
that share the same base class with limited differences between them.
This era represents the most structured approach to parliamentary
record-keeping, introducing the
\texttt{\textless{}talk.text\textgreater{}} container to bound speech
content (See Figure~\ref{fig-modern}, line 23).

\begin{figure}

\centering{

\begin{Shaded}
\begin{Highlighting}[numbers=left,,]
\NormalTok{\textless{}}\KeywordTok{speech}\NormalTok{\textgreater{}}
\NormalTok{  \textless{}}\KeywordTok{talk.start}\NormalTok{\textgreater{}}
\NormalTok{    \textless{}}\KeywordTok{talker}\NormalTok{\textgreater{}}
\NormalTok{      \textless{}}\KeywordTok{name.id}\NormalTok{\textgreater{}XXX\textless{}/}\KeywordTok{name.id}\NormalTok{\textgreater{}}
\NormalTok{    \textless{}/}\KeywordTok{talker}\NormalTok{\textgreater{}}
\NormalTok{  \textless{}/}\KeywordTok{talk.start}\NormalTok{\textgreater{}}
\NormalTok{  \textless{}}\KeywordTok{talk.text}\NormalTok{\textgreater{}}
\NormalTok{    \textless{}}\KeywordTok{body}\NormalTok{\textgreater{}}
\NormalTok{      \textless{}}\KeywordTok{p} \OtherTok{class=}\StringTok{"HPS{-}Normal"}\NormalTok{\textgreater{}}
\NormalTok{        \textless{}}\KeywordTok{span} \OtherTok{class=}\StringTok{"HPS{-}Normal"}\NormalTok{\textgreater{}}
\NormalTok{          \textless{}}\KeywordTok{a} \OtherTok{href=}\StringTok{"XXX"} \OtherTok{type=}\StringTok{"MemberSpeech"}\NormalTok{\textgreater{}}
\NormalTok{            \textless{}}\KeywordTok{span} \OtherTok{class=}\StringTok{"HPS{-}MemberSpeech"}\NormalTok{\textgreater{}Mrs Jones\textless{}/}\KeywordTok{span}\NormalTok{\textgreater{}}
\NormalTok{          \textless{}/}\KeywordTok{a}\NormalTok{\textgreater{} (Grayndler):  Opening speech...}
\NormalTok{        \textless{}/}\KeywordTok{span}\NormalTok{\textgreater{}}
\NormalTok{      \textless{}/}\KeywordTok{p}\NormalTok{\textgreater{}}
\NormalTok{      \textless{}}\KeywordTok{a} \OtherTok{href=}\StringTok{"YYY"} \OtherTok{type=}\StringTok{"MemberSpeech"}\NormalTok{\textgreater{}}
\NormalTok{          \textless{}}\KeywordTok{p} \OtherTok{class=}\StringTok{"HPS{-}Normal"}\NormalTok{\textgreater{}}
\NormalTok{            \textless{}}\KeywordTok{span} \OtherTok{class=}\StringTok{"HPS{-}Normal"}\NormalTok{\textgreater{}}
\NormalTok{              \textless{}}\KeywordTok{span} \OtherTok{class=}\StringTok{"HPS{-}MemberIInterjecting"}\NormalTok{\textgreater{}}
\NormalTok{                 Ms Smith interjecting}
\NormalTok{              \textless{}/}\KeywordTok{span}\NormalTok{\textgreater{}—}
\NormalTok{            \textless{}/}\KeywordTok{span}\NormalTok{\textgreater{}}
\NormalTok{          \textless{}/}\KeywordTok{p}\NormalTok{\textgreater{}}
\NormalTok{      \textless{}/}\KeywordTok{a}\NormalTok{\textgreater{}}
\NormalTok{      \textless{}}\KeywordTok{p} \OtherTok{class=}\StringTok{"HPS{-}Normal"}\NormalTok{\textgreater{}}
\NormalTok{        \textless{}}\KeywordTok{span} \OtherTok{class=}\StringTok{"HPS{-}Normal"}\NormalTok{\textgreater{}}
\NormalTok{          \textless{}}\KeywordTok{span} \OtherTok{class=}\StringTok{"HPS{-}GeneralIInterjecting"}\NormalTok{\textgreater{}Members interjecting\textless{}/}\KeywordTok{span}\NormalTok{\textgreater{}}
\NormalTok{        \textless{}/}\KeywordTok{span}\NormalTok{\textgreater{}}
\NormalTok{      \textless{}/}\KeywordTok{p}\NormalTok{\textgreater{}}
\NormalTok{      \textless{}}\KeywordTok{p} \OtherTok{class=}\StringTok{"HPS{-}Normal"}\NormalTok{\textgreater{}}
\NormalTok{        \textless{}}\KeywordTok{span} \OtherTok{class=}\StringTok{"HPS{-}Normal"}\NormalTok{\textgreater{}}
\NormalTok{          \textless{}}\KeywordTok{span} \OtherTok{class=}\StringTok{"HPS{-}OfficeInterjecting"}\NormalTok{\textgreater{}The SPEAKER:\textless{}/}\KeywordTok{span}\NormalTok{\textgreater{}  Order!}
\NormalTok{        \textless{}/}\KeywordTok{span}\NormalTok{\textgreater{}}
\NormalTok{      \textless{}/}\KeywordTok{p}\NormalTok{\textgreater{}}
\NormalTok{    \textless{}/}\KeywordTok{body}\NormalTok{\textgreater{}}
\NormalTok{  \textless{}/}\KeywordTok{talk.text}\NormalTok{\textgreater{}}
\NormalTok{\textless{}/}\KeywordTok{speech}\NormalTok{\textgreater{}}
\end{Highlighting}
\end{Shaded}

}

\caption{\label{fig-modern}Representative
\texttt{\textless{}speech\textgreater{}} element from the Modern era
(May 2011--present). Speech content is bounded within a
\texttt{\textless{}talk.text\textgreater{}/\textless{}body\textgreater{}}
container. All interjections are inline, distinguished by
\texttt{\textless{}span\textgreater{}} class attributes:
\texttt{HPS-MemberIInterjecting} (attributed member, words unrecorded),
\texttt{HPS-GeneralIInterjecting} (unattributed),
\texttt{HPS-GeneralInterjecting} (words recorded, speaker unattributed),
and
\texttt{HPS-OfficeInterjecting}/\texttt{HPS-OfficeContinuation}/\texttt{HPS-OfficeSpeech}
(presiding officers). Speaker identifiers are extracted from
\texttt{href} attributes on \texttt{\textless{}a\textgreater{}}
elements, with a lookup table used when the link is absent after the
first occurrence.}

\end{figure}%

Speaker identification follows a consistent pattern across all
sub-parsers:
\texttt{\textless{}talk.start\textgreater{}/\textless{}talker\textgreater{}/\textless{}name.id\textgreater{}}
(See Figure~\ref{fig-modern}, line 3). The structure is uniform and
well-defined.

All interjections in this era are inline, identified through
\texttt{\textless{}span\textgreater{}} elements with specific class
attributes (See Figure~\ref{fig-modern}, line 14-20):

\begin{itemize}
\tightlist
\item
  \texttt{HPS-OfficeInterjecting} (Office Interjection)
\item
  \texttt{HPS-OfficeContinuation} (Office Interjection)
\item
  \texttt{HPS-OfficeSpeech} (Office Interjection)
\item
  \texttt{HPS-MemberIInterjecting} (General, known speaker, unknown
  words)
\item
  \texttt{HPS-GeneralIInterjecting} (General)
\item
  \texttt{HPS-MemberInterjecting} (Speaker)
\item
  \texttt{HPS-GeneralInterjecting}. (General, known words, unknown
  speaker)
\end{itemize}

The interjection type is determined directly by the span class --
office, member, or general -- with additional logic checking for office
role keywords (SPEAKER, DEPUTY, CLERK, PRESIDENT, CHAIR) within
\texttt{HPS-MemberSpeech} spans.

Text extraction for normal speeches only pulls content from
\texttt{\textless{}span\textgreater{}} elements with class
\texttt{HPS-Normal} or \texttt{HPS-Small} (See Figure~\ref{fig-modern},
lines 9-11). For inline interjections, the extraction logic varies by
class: \texttt{HPS-MemberIInterjecting} and
\texttt{HPS-GeneralIInterjecting} extract only the description text,
while \texttt{HPS-GeneralInterjecting} extracts the text plus any tail
content.

A key distinction from earlier eras is that inline authors are
attributed. The parser extracts speaker identifiers from
\texttt{\textless{}a\textgreater{}} elements with \texttt{href}
attributes linking to the parliamentary database (See
Figure~\ref{fig-modern}, line 16). For cases where no \texttt{href} is
present, a lookup table maps name text to \texttt{href} IDs, maintaining
attribution even when the link is not directly embedded. This is
required as the \texttt{href} will only appear for the first instance of
a speaker in a speech.

\subsection{Parliamentary handbook
integration}\label{parliamentary-handbook-integration}

While Hansard transcripts include basic speaker metadata, the way this
information is recorded is often inconsistent. Across decades of
parliamentary debate, members may appear under abbreviated names, formal
or honorific titles, or variant spellings, and seat information is
subject to change or ambiguity. These inconsistencies pose significant
challenges for reliable author identification, especially in large-scale
or longitudinal research.

The value of the Parliamentary Handbook API for overcoming these
obstacles was demonstrated by \textcite{leslie2024}, who showed how the
Handbook can be programmatically scraped to obtain comprehensive,
structured metadata about all members of parliament. Following this
approach, we ensure accuracy and consistency in our dataset by anchoring
each Hansard record to the unique identifier encoded in the
\texttt{\textless{}name.id\textgreater{}} field of the XML transcript.
This persistent identifier serves as a stable key for joining Hansard
entries directly to authoritative records from the Parliamentary
Handbook API \footnote{https://handbookapi.aph.gov.au/api}.

For each parliamentarian, we extract and store rich biographical and
service information, including:

\begin{itemize}
\tightlist
\item
  A unique member ID
\item
  Preferred, family, and middle names, as well as any known display
  variations
\item
  Gender, First Nations status, date of birth, and image links
\item
  Complete histories of party affiliation and representation by seat or
  state, including service periods in the House or Senate
\item
  Chronological records of ministerial and shadow ministerial
  appointments
\end{itemize}

With this process, almost every speech, question, answer, or
interjection in the Hansard database is not only attributed to its
textual author, but can be unambiguously linked to a detailed,
structured record of the speaker's career. This integration ensures
that, even across periods of name changes, shifting party allegiances,
or repeated names, each parliamentary contribution is reliably connected
to its correct author -- enabling more precise, meaningful, and
comprehensive research.

\subsection{Database Format}\label{database-format}

While calls for a public-facing Hansard API \autocite{angus2026}
emphasise the value of flexible, large-scale querying, we argue that a
local relational database offers many of the same advantages. Modern
relational databases provide complex querying capabilities, rapid
access, and seamless integration with analytical tools -- paralleling
much of the functionality of dedicated APIs, but without the need for
centralised hosting or reliance on external infrastructure. By
maintaining the parsed Hansard data in a standardised relational
database, users can efficiently search, filter, and retrieve records,
unconstrained by web-based interfaces.

Below, and illustrated in Figure~\ref{fig-er}, we outline the structure
of the Hansard database, which is designed to maximise accessibility and
analytical flexibility.

\begin{figure}

\centering{

\pandocbounded{\includegraphics[keepaspectratio]{./er.png}}

}

\caption{\label{fig-er}Entity--relationship diagram of the Hansard
relational database. Core parliamentary contributions (\emph{Document},
\emph{Interjection}) are linked to sitting-day provenance
(\emph{SittingDay}, \emph{Source}, \emph{RawDocument}) and to speaker
metadata (\emph{Parliamentarian}, \emph{Service}, \emph{Party},
\emph{Minister}, \emph{Ministry}) via persistent Parliamentary Handbook
identifiers. Self-referential \emph{Document} relationships capture
question--answer pairings.}

\end{figure}%

\subsubsection{Parsed Documents}\label{parsed-documents}

The scraping and parsing process is controlled by rows within the
\emph{Source} table, which links to multiple \emph{RawDocument} records
-- each storing the original XML (or text), metadata about the
extraction process, and a flag indicating whether the document is a
proof. After parsing, each \emph{RawDocument} is divided into multiple
\emph{SittingDay} entries, each representing a unique combination of
house, date, and section (with section referring to Chamber, Federation
Chamber, or Answers to Questions).

The core parliamentary contributions -- speeches, questions, and answers
-- are structured as \emph{Document} records. Each \emph{Document}
stores the text, title, type, and a reference to the author. Documents
are self-referential: relationships such as \emph{citedBy} and
\emph{references} enable questions to be linked to their answers, and
vice versa. \emph{Interjection} records are directly associated with
their parent \emph{Document}, storing their text, author, and sequence
indicator for precise mapping to \texttt{{[}INTERJECTIONXX{]}}
placeholders within the speech text.

\subsubsection{Metadata}\label{metadata}

The core table of the metadata component is \emph{Parliamentarian},
which contains a record for each unique member of parliament and is
anchored by authoritative parliamentary handbook IDs.
\emph{Parliamentarian} entries include names, gender, date of birth,
First Nations status, and alternative author IDs that occasionally
appear in Hansard but are not canonical.

\emph{Parliamentarian} records link to sets of \emph{Service} records,
which capture distinct periods of service as unique combinations of
parliament, seat, and party affiliations. By merging service and party
data from multiple official sources, this table simplifies downstream
analysis.

In addition, \emph{Parliamentarian} entries may be linked to
\emph{Minister} records, which detail any ministerial or shadow
ministerial appointments. Each \emph{Minister} is associated with a
\emph{Ministry}, encompassing information about both ministries and
shadow ministries, their leaders, and their timeframes.

\subsection{Validation and
corrections}\label{validation-and-corrections}

Because Hansard XML varies substantially over time and contains known
inconsistencies, we treated validation as a distinct pipeline stage. Our
goal was not only to produce plausible parsed output, but also to ensure
that the database remained internally consistent, corpus-complete, and
faithful to the source XML. We therefore conducted two forms of
validation: corpus-level validation across the full database to assess
completeness, internal consistency, and recurrent structural errors, and
manual validation on a stratified document subset to estimate the
residual error rate after these checks and fixes.

\subsubsection{Corpus-level validation and
correction}\label{corpus-level-validation-and-correction}

The first validation stage assessed the database as a whole. Rather than
evaluating individual parsed documents in isolation, we examined whether
the relational database formed a coherent and internally consistent
corpus. We applied rule-based checks to identify records that violated
expectations about dates, authorship, service histories, question-answer
linkages, and document structure. These checks flagged suspicious
records for manual review, and we corrected them when the evidence was
clear. All corpus-wide summaries, figures, and tables in this section
refer to the database after these corrections. The corrections remained
conservative and limited to cases in which the original record was
clearly erroneous and the correct resolution could be established with
confidence.

One class of corrections involved document dates. Each Hansard document
should map to a unique sitting day and chamber, enforced by a unique key
on the \texttt{SittingDay} table. During validation, duplicate key
conflicts identified two cases in which the XML recorded an incorrect
date. In both cases, we confirmed the correct date against the official
PDF record and manually updated the database.

A second class of corrections reconciled speaker identifiers. In some
cases, the Hansard XML identifier did not match a canonical
Parliamentary Handbook record, which prevented linking Hansard records
to parliamentarian metadata. We identified 132 alternative speaker
identifiers across 125 parliamentarians, and these were mapped to
canonical handbook records by checking the original PDF forms of the
document. The process also added 23 legitimate exceptions to an ignore
list for identifiers not expected to match a parliamentary member
record, such as the Speaker in an institutional role or non-member
dignitaries in ceremonial contexts. These exclusions prevented spurious
validation failures.

A third class of corrections addressed mismatches between attributed
speeches and parliamentary service histories. We identified these cases
when a speech was linked to a parliamentarian who, according to the
Parliamentary Handbook, was not serving on the speech date. Manual
verification against the source PDFs showed that some speeches had been
assigned to the wrong parliamentarian, resulting in 31 reassignments. In
other cases, the attribution was correct, but the Parliamentary Handbook
service metadata conflicted with the parliamentary record. Where
corroborating historical evidence, such as parliamentary biographies or
the official PDF, supported a correction, we made conservative
adjustments, resulting in 6 seat corrections and 15 party corrections.

After applying these corrections, we examined the full database for
remaining systematic irregularities. We first assessed corpus
completeness by comparing the sitting days in Hansard DB with an
external calendar of federal parliamentary sittings to verify that the
database closely matches the known record. Figure~\ref{fig-days} shows
near-complete coverage, with more than 99.99\% of sitting days for both
chambers represented. The few missing days are scattered across the
period and reflect rare gaps in the official archive.

\begin{figure}

\centering{

\includegraphics[width=1\linewidth,height=\textheight,keepaspectratio]{dataset_files/figure-pdf/fig-days-1.pdf}

}

\caption{\label{fig-days}Coverage of sitting days in Hansard DB,
1901--present. Stacked bars show the number of sitting days included in
the database (blue) and missing from the database (red) for each year,
faceted by chamber. Missing days result from gaps in the official
archive, inaccessible or malformed archival records, or historical
anomalies. Overall coverage exceeds 99.99\% for both chambers across the
full temporal extent of the corpus.}

\end{figure}%

A second post-correction check assessed speaker attribution. After
loading parsed records into the database, we linked each speech and
interjection, where possible, to a parliamentarian record from the
Parliamentary Handbook. This process identified contributions that could
not be linked to any speaker and those linked to speakers whose service
histories did not cover the relevant date. Figure~\ref{fig-auth} shows
the proportion of unresolved attributions over time for both documents
and speaker-attributed interjections. The remaining unresolved cases
cluster in earlier, mass-digitised material, especially where short
inline interjections often lack usable speaker identifiers in the source
XML.

\begin{figure}

\centering{

\includegraphics[width=1\linewidth,height=\textheight,keepaspectratio]{dataset_files/figure-pdf/fig-auth-1.pdf}

}

\caption{\label{fig-auth}Proportion of parliamentary contributions with
unresolved speaker attribution, by year. Left panel shows the annual
proportion of speeches, questions, and answers for which the author
field is blank or unknown; right panel shows the equivalent proportion
for speaker-attributed interjections (type = 1). Elevated rates in
earlier decades reflect sparse or inconsistent name identifiers in Mass
Digitisation era XML documents (approximately 1901--2011), where inline
interjections frequently lack usable talker metadata.}

\end{figure}%

A third corpus-level check examined the reconstruction of
question-answer relationships. Because the Hansard XML does not
explicitly link questions to their answers, the parser had to infer
these pairings. We therefore measured the frequency of unmatched
questions and unmatched answers in the corrected database.
Figure~\ref{fig-qastats} shows how unmatched rates change over time.
These mismatches remain relatively rare and generally decline across the
corpus. Manual inspection of 20 instances indicate that they usually
result from source-record irregularities, such as missing answers,
answers recorded outside the expected structure, or inconsistent
question-answer block usage, rather than systematic parser failure.

\begin{figure}

\centering{

\includegraphics[width=1\linewidth,height=\textheight,keepaspectratio]{dataset_files/figure-pdf/fig-qastats-1.pdf}

}

\caption{\label{fig-qastats}Annual rates of unmatched questions and
answers, 1901--present. Lines show the proportion of questions with no
matched answer (unanswered questions) and the proportion of answers with
no matched preceding question (questionless answers) for each year;
smoothed trends (LOESS) are overlaid. Both rates remain low and
generally decline over time, indicating that unmatched pairs reflect
source-record irregularities rather than systematic parser failure.}

\end{figure}%

In sum, corpus-level validation showed that Hansard DB is both highly
complete and internally consistent after targeted, conservative
corrections. The small number of confirmed date, speaker, and
service-history errors indicates that most records were already
reliable, while the correction process further strengthened the
integrity of the corpus for downstream analysis.

\subsubsection{Parser-level validation on a stratified
subset}\label{parser-level-validation-on-a-stratified-subset}

In addition to corpus-level checks, we manually validated 127 XML files
(0.53\% of the corpus), selecting one file per year across the full
temporal range and two files each for 1901 and 2025 to capture the main
parser eras and structural formats in the Hansard archive. We parsed
each file with the date-appropriate parser version and converted the
output to a normalised JSON representation for consistent inspection. We
compared these documents with the source XML used for parsing, so this
validation assessed parsing and joining fidelity rather than the
substantive accuracy of Hansard itself.

Within this validation corpus, we first applied a set of rule-based
checks designed to identify obvious structural failures in the parsed
output. These checks focused on issues that should not occur if the
parser had handled the XML correctly, such as speeches missing text
altogether or interjection markers within the text indicating a
misparsed interjection. Every flagged case was then manually checked
against the source XML. Across the 127 sampled documents, these checks
identified 31 obvious errors in total: 19 instances of interjection text
being left in the main text, 10 instances of interjections remaining
embedded within other interjections, and 2 instances of strings not
being properly cleaned of times or titles. These counts should be
understood as the number of clear parsing errors identified across the
sampled files, and thus as an estimate of the rate of more egregious
errors in the parser output.

To complement these checks, we manually read one debate from each
sampled document to identify subtler parser errors that rule-based
diagnostics might miss, including misplaced interjections, breaks in
debate continuity, and incorrectly segmented or merged text. This review
identified only one additional non-obvious error across the 127 sampled
debates: one interjection appeared outside the interjection element and
thus read as ordinary speech. We also observed an inline interjection
that did not begin on a new line and was therefore misparsed as speech,
although the rule-based checks had already detected this issue. Both
cases occurred in the 1974 test file material, and we found no further
problems in the remaining sampled debates.

Taken together, the manual validation suggests that the remaining parser
errors are both rare and largely unsystematic. Most of the obvious
problems observed in the sample were concentrated in a small number of
recurrent structural types that could be identified through explicit
rule-based checks, while close reading uncovered only one additional
subtle error across the 127 debates examined. This does not imply that
the corpus is error-free. Rather, it suggests that after the development
of the validation logic and the application of targeted fixes, the
remaining errors in Hansard DB are infrequent and unlikely to reflect a
systematic distortion of the corpus.

\section{Examples of Hansard DB in
use}\label{examples-of-hansard-db-in-use}

The core product of this work is the reconstruction of Hansard into a
database format -- Hansard DB. In this section we demonstrate how the
relational structure opens new possibilities for studying Australian
parliamentary discourse -- questions that were previously impossible to
answer with longitudinal data at this scale. By integrating detailed
biographical metadata -- including gender, party affiliation, and
parliamentary service periods -- with every parliamentary contribution,
Hansard DB enables systematic analysis of how speaking patterns vary
across the composition of parliament. Three example queries illustrate
this capability: tracking how speech length has changed over time,
measuring the concentration of speaking time across political parties,
and investigating whether female parliamentarians receive more
interjections than their male colleagues.

\subsection{Are Speeches Getting
Longer?}\label{are-speeches-getting-longer}

Speech length is more than a procedural detail: changes in its
distribution can indicate shifting parliamentary norms, reforms to
debate rules, or tighter regulation of speaking time
\autocite{proksch2014,back2016}. Figure~\ref{fig-speech-length-q}
calculates annual 50th, 75th, and 95th percentiles of speech length by
chamber, allowing us to distinguish broad change from change
concentrated among especially long speeches.
Figure~\ref{fig-speech-length-img} visualises the results.

\begin{figure}

\centering{

\begin{Shaded}
\begin{Highlighting}[numbers=left,,]
\KeywordTok{SELECT} 
    \FunctionTok{EXTRACT}\NormalTok{(}\DataTypeTok{YEAR} \KeywordTok{FROM}\NormalTok{ sd.}\DataTypeTok{date}\NormalTok{):}\CharTok{:integer} \KeywordTok{AS} \DataTypeTok{year}\NormalTok{,}
\NormalTok{    sd.house,}
    \FunctionTok{PERCENTILE\_CONT}\NormalTok{(}\FloatTok{0.50}\NormalTok{) }
\NormalTok{        WITHIN }\KeywordTok{GROUP}\NormalTok{ (}\KeywordTok{ORDER} \KeywordTok{BY} \FunctionTok{LENGTH}\NormalTok{(d.text)):}\CharTok{:integer} \KeywordTok{AS}\NormalTok{ p50,}
    \FunctionTok{PERCENTILE\_CONT}\NormalTok{(}\FloatTok{0.75}\NormalTok{)}
\NormalTok{        WITHIN }\KeywordTok{GROUP}\NormalTok{ (}\KeywordTok{ORDER} \KeywordTok{BY} \FunctionTok{LENGTH}\NormalTok{(d.text)):}\CharTok{:integer} \KeywordTok{AS}\NormalTok{ p75,}
    \FunctionTok{PERCENTILE\_CONT}\NormalTok{(}\FloatTok{0.95}\NormalTok{)}
\NormalTok{        WITHIN }\KeywordTok{GROUP}\NormalTok{ (}\KeywordTok{ORDER} \KeywordTok{BY} \FunctionTok{LENGTH}\NormalTok{(d.text)):}\CharTok{:integer} \KeywordTok{AS}\NormalTok{ p95,}
    \FunctionTok{COUNT}\NormalTok{(}\OperatorTok{*}\NormalTok{):}\CharTok{:integer} \KeywordTok{AS}\NormalTok{ n\_speeches}
\KeywordTok{FROM} \OtherTok{"Document"}\NormalTok{ d}
\KeywordTok{JOIN} \OtherTok{"SittingDay"}\NormalTok{ sd }\KeywordTok{ON}\NormalTok{ sd.}\KeywordTok{id} \OperatorTok{=}\NormalTok{ d.}\OtherTok{"sittingDayId"}
\KeywordTok{WHERE}\NormalTok{ d.}\KeywordTok{type} \OperatorTok{=} \StringTok{\textquotesingle{}speech\textquotesingle{}}
  \KeywordTok{AND}\NormalTok{ d.text }\KeywordTok{IS} \KeywordTok{NOT} \KeywordTok{NULL}
  \KeywordTok{AND}\NormalTok{ d.text }\OperatorTok{!=} \StringTok{\textquotesingle{}\textquotesingle{}}
\KeywordTok{GROUP} \KeywordTok{BY} \DataTypeTok{year}\NormalTok{, sd.house}
\KeywordTok{ORDER} \KeywordTok{BY} \DataTypeTok{year}\NormalTok{, sd.house}
\end{Highlighting}
\end{Shaded}

}

\caption{\label{fig-speech-length-q}SQL query computing the 50th, 75th,
and 95th percentiles of speech length (in characters) for each year and
chamber. Only non-empty speeches
(\texttt{type\ =\ \textquotesingle{}speech\textquotesingle{}}) are
included. Results are used to produce
Figure~\ref{fig-speech-length-img}.}

\end{figure}%

\begin{figure}

\centering{

\includegraphics[width=1\linewidth,height=\textheight,keepaspectratio]{dataset_files/figure-pdf/fig-speech-length-img-1.pdf}

}

\caption{\label{fig-speech-length-img}Distribution of speech length in
the Australian Parliament, 1901--present. Lines show annual 50th, 75th,
and 95th percentiles of speech length (characters) for the House of
Representatives and Senate. Smoothed trends (LOESS) are overlaid on raw
annual values. Panels are faceted by chamber.}

\end{figure}%

The results suggest that change is concentrated in the upper tail of the
distribution. The 50th and 75th percentiles remain fairly stable over
time, while the 95th percentile declines substantially. This shows how
the database can be used to test claims that would be obscured by
averages alone, and to move from anecdotal impressions about ``shorter
speeches'' to a more precise distributional account
\autocite{tucker2020}.

This also opens up clear next steps. The same approach could be used
comparatively across legislatures, or linked to questions about
participation, agenda-setting, and deliberative quality. In that sense,
speech-length distributions are not just descriptive outputs, but a way
of evaluating broader theories about how parliamentary debate changes
over time, including the effects of interventions and rule changes.

\subsection{Is Parliamentary Speech Becoming More (or Less)
Concentrated?}\label{is-parliamentary-speech-becoming-more-or-less-concentrated}

Who speaks is as important as how much is said. Democratic theory and
empirical work on parliamentary representation both suggest that
parliamentary voice should be broadly distributed rather than
concentrated among a small number of parties
\autocite{urbinati2006,back2019}. Measuring concentration over time
therefore provides a way to test such claims directly.

To do this, Figure~\ref{fig-hhi-q} calculates the Herfindahl--Hirschman
Index (HHI) of party concentration in annual speech output for each
chamber. As shown in Figure~\ref{fig-hhi}, higher values indicate that
speaking time is dominated by fewer parties, while lower values indicate
a broader distribution of parliamentary voice.

\begin{figure}

\centering{

\begin{Shaded}
\begin{Highlighting}[numbers=left,,]
\KeywordTok{WITH}\NormalTok{ party\_time }\KeywordTok{AS}\NormalTok{ (}
    \KeywordTok{SELECT} 
        \FunctionTok{EXTRACT}\NormalTok{(}\DataTypeTok{YEAR} \KeywordTok{FROM}\NormalTok{ sd.}\DataTypeTok{date}\NormalTok{):}\CharTok{:int} \KeywordTok{AS} \DataTypeTok{year}\NormalTok{,}
\NormalTok{        sd.house,}
\NormalTok{        py.name }\KeywordTok{AS}\NormalTok{ party,}
        \FunctionTok{SUM}\NormalTok{(}\FunctionTok{LENGTH}\NormalTok{(d.text)) }\KeywordTok{AS}\NormalTok{ total\_chars}
    \KeywordTok{FROM} \OtherTok{"Document"}\NormalTok{ d}
    \KeywordTok{JOIN} \OtherTok{"SittingDay"}\NormalTok{ sd }\KeywordTok{ON}\NormalTok{ sd.}\KeywordTok{id} \OperatorTok{=}\NormalTok{ d.}\OtherTok{"sittingDayId"}
    \KeywordTok{JOIN} \OtherTok{"rawAuthor"}\NormalTok{ ra }\KeywordTok{ON}\NormalTok{ ra.}\KeywordTok{id} \OperatorTok{=}\NormalTok{ d.}\OtherTok{"rawAuthorId"}
    \KeywordTok{JOIN} \OtherTok{"Parliamentarian"}\NormalTok{ p }\KeywordTok{ON}\NormalTok{ p.}\KeywordTok{id} \OperatorTok{=}\NormalTok{ ra.}\OtherTok{"parliamentarianId"}
    \KeywordTok{JOIN} \OtherTok{"Service"}\NormalTok{ sv }
        \KeywordTok{ON}\NormalTok{ sv.}\OtherTok{"parliamentarianId"} \OperatorTok{=}\NormalTok{ p.}\KeywordTok{id}
       \KeywordTok{AND}\NormalTok{ sd.}\DataTypeTok{date} \OperatorTok{\textgreater{}=}\NormalTok{ sv.}\OtherTok{"startDate"}
       \KeywordTok{AND}\NormalTok{ (sd.}\DataTypeTok{date} \OperatorTok{\textless{}=}\NormalTok{ sv.}\OtherTok{"endDate"} \KeywordTok{OR}\NormalTok{ sv.}\OtherTok{"endDate"} \KeywordTok{IS} \KeywordTok{NULL}\NormalTok{)}
    \KeywordTok{JOIN} \OtherTok{"Party"}\NormalTok{ py }\KeywordTok{ON}\NormalTok{ py.}\KeywordTok{id} \OperatorTok{=}\NormalTok{ sv.}\OtherTok{"partyId"}
    \KeywordTok{WHERE}\NormalTok{ d.}\KeywordTok{type} \OperatorTok{=} \StringTok{\textquotesingle{}speech\textquotesingle{}}
      \KeywordTok{AND}\NormalTok{ d.text }\KeywordTok{IS} \KeywordTok{NOT} \KeywordTok{NULL}
      \KeywordTok{AND}\NormalTok{ d.text }\OperatorTok{\textless{}\textgreater{}} \StringTok{\textquotesingle{}\textquotesingle{}}
    \KeywordTok{GROUP} \KeywordTok{BY} \DecValTok{1}\NormalTok{, }\DecValTok{2}\NormalTok{, }\DecValTok{3}
\NormalTok{),}
\NormalTok{shares }\KeywordTok{AS}\NormalTok{ (}
    \KeywordTok{SELECT} 
        \DataTypeTok{year}\NormalTok{,}
\NormalTok{        house,}
\NormalTok{        total\_chars:}\CharTok{:float} 
        \OperatorTok{/} \FunctionTok{SUM}\NormalTok{(total\_chars) }\KeywordTok{OVER}\NormalTok{ (}\KeywordTok{PARTITION} \KeywordTok{BY} \DataTypeTok{year}\NormalTok{, house) }\KeywordTok{AS} \KeywordTok{share}
    \KeywordTok{FROM}\NormalTok{ party\_time}
\NormalTok{)}

\KeywordTok{SELECT} 
    \DataTypeTok{year}\NormalTok{,}
\NormalTok{    house,}
    \FunctionTok{SUM}\NormalTok{(}\KeywordTok{share}\NormalTok{\^{}}\DecValTok{2}\NormalTok{) }\KeywordTok{AS}\NormalTok{ hhi}
\KeywordTok{FROM}\NormalTok{ shares}
\KeywordTok{GROUP} \KeywordTok{BY} \DataTypeTok{year}\NormalTok{, house}
\KeywordTok{ORDER} \KeywordTok{BY} \DataTypeTok{year}\NormalTok{, house}
\end{Highlighting}
\end{Shaded}

}

\caption{\label{fig-hhi-q}SQL query computing the Herfindahl--Hirschman
Index (HHI) of speaking-time concentration by party for each year and
chamber. Party shares are calculated as each party's total character
count divided by the annual chamber total; HHI is the sum of squared
shares. Only speeches with a matched service record are included.
Results are used to produce Figure~\ref{fig-hhi}.}

\end{figure}%

\begin{figure}

\centering{

\includegraphics[width=1\linewidth,height=\textheight,keepaspectratio]{dataset_files/figure-pdf/fig-hhi-1.pdf}

}

\caption{\label{fig-hhi}Party concentration of parliamentary speaking
time, 1901--present. The Herfindahl--Hirschman Index (HHI) measures the
degree to which speech is dominated by a small number of parties; higher
values indicate greater concentration. Lines show annual HHI for the
House of Representatives and Senate; smoothed trends (LOESS) are
overlaid.}

\end{figure}%

The results in Figure~\ref{fig-hhi} show different trajectories across
the two chambers. Senate HHI declines over time, indicating that
speaking time has become less concentrated and more broadly shared
across parties. House HHI remains comparatively stable, suggesting
continued concentration among the major parties. In this way, the
database makes it possible to evaluate claims about representation and
party dominance longitudinally, rather than relying on anecdote or
isolated cases.

These patterns also point to clear next steps. The same approach could
be extended comparatively across legislatures, or linked to questions
about legislative effectiveness, deliberative quality, and political
trust.

\subsection{Are interjection rates impacted by
gender?}\label{sec-int-count-sec}

Whether women receive equal voice in deliberative institutions is a
longstanding concern in democratic theory and gender-and-politics
research. Role congruity theory suggests that women may face penalties
for assertive participation, while deliberative scholarship emphasises
that institutions shape whose contributions are treated as worth
engaging \autocite{eagly2002,karpowitz2014}. Comparative research on
parliamentary interruptions has produced mixed findings, but
increasingly suggests that patterns of interjection can be used to test
broader claims about gendered inclusion and exclusion in debate
\autocite{miller2023}.

To examine this, Figure~\ref{fig-int-q} calculates the mean number of
interjections received per speech by year, chamber, and speaker gender.
The results, shown in Figure~\ref{fig-interject}, should be interpreted
cautiously for women in the early decades of the series, as female
representation before roughly 1943 is extremely sparse.

\begin{figure}

\centering{

\begin{Shaded}
\begin{Highlighting}[numbers=left,,]
\KeywordTok{SELECT} 
    \FunctionTok{EXTRACT}\NormalTok{(}\DataTypeTok{YEAR} \KeywordTok{FROM}\NormalTok{ sd.}\DataTypeTok{date}\NormalTok{):}\CharTok{:int} \KeywordTok{AS} \DataTypeTok{year}\NormalTok{,}
\NormalTok{    sd.house,}
\NormalTok{    p.gender }\KeywordTok{AS}\NormalTok{ gender,}

    \FunctionTok{COUNT}\NormalTok{(}\OperatorTok{*}\NormalTok{) }\KeywordTok{AS}\NormalTok{ n\_speeches,}
    \FunctionTok{COUNT}\NormalTok{(i.}\OperatorTok{*}\NormalTok{) }\KeywordTok{AS}\NormalTok{ n\_interjections,}

    \FunctionTok{ROUND}\NormalTok{(}
\NormalTok{        (}\FunctionTok{COUNT}\NormalTok{(i.}\OperatorTok{*}\NormalTok{):}\CharTok{:float} 
        \OperatorTok{/} \FunctionTok{NULLIF}\NormalTok{(}\FunctionTok{COUNT}\NormalTok{(}\OperatorTok{*}\NormalTok{), }\DecValTok{0}\NormalTok{)}
\NormalTok{        ):}\CharTok{:numeric}\NormalTok{,}
        \DecValTok{3}
\NormalTok{    ) }\KeywordTok{AS}\NormalTok{ interjections\_per\_speech}

\KeywordTok{FROM} \OtherTok{"SittingDay"}\NormalTok{ sd}
\KeywordTok{JOIN} \OtherTok{"Document"}\NormalTok{ d }\KeywordTok{ON}\NormalTok{ d.}\OtherTok{"sittingDayId"} \OperatorTok{=}\NormalTok{ sd.}\KeywordTok{id}
\KeywordTok{LEFT} \KeywordTok{JOIN} \OtherTok{"Interjection"}\NormalTok{ i }\KeywordTok{ON}\NormalTok{ i.}\OtherTok{"documentId"} \OperatorTok{=}\NormalTok{ d.}\KeywordTok{id}
\KeywordTok{JOIN} \OtherTok{"rawAuthor"}\NormalTok{ ra }\KeywordTok{on}\NormalTok{ ra.}\KeywordTok{id} \OperatorTok{=}\NormalTok{ d.}\OtherTok{"rawAuthorId"}
\KeywordTok{JOIN} \OtherTok{"Parliamentarian"}\NormalTok{ p }\KeywordTok{on}\NormalTok{ p.}\KeywordTok{id} \OperatorTok{=}\NormalTok{ ra.}\OtherTok{"parliamentarianId"}
\KeywordTok{WHERE}\NormalTok{ d.}\OtherTok{"type"} \OperatorTok{=} \StringTok{\textquotesingle{}speech\textquotesingle{}}
    \KeywordTok{AND}\NormalTok{ sd.}\OtherTok{"chamber"} \OperatorTok{=} \StringTok{\textquotesingle{}Primary Chamber\textquotesingle{}}


\KeywordTok{GROUP} \KeywordTok{BY} \DecValTok{1}\NormalTok{, }\DecValTok{2}\NormalTok{, }\DecValTok{3}
\KeywordTok{ORDER} \KeywordTok{BY} \DecValTok{1}\NormalTok{, }\DecValTok{2}\NormalTok{, }\DecValTok{3}
\end{Highlighting}
\end{Shaded}

}

\caption{\label{fig-int-q}SQL query computing the mean number of
interjections received per speech for each year, chamber, and speaker
gender. Only primary-chamber speeches
(\texttt{chamber\ =\ \textquotesingle{}Primary\ Chamber\textquotesingle{}})
are included; interjections are joined via a left join to preserve
speeches with zero interjections. Results are used to produce
Figure~\ref{fig-interject}.}

\end{figure}%

\begin{figure}

\centering{

\includegraphics[width=1\linewidth,height=\textheight,keepaspectratio]{dataset_files/figure-pdf/fig-interject-1.pdf}

}

\caption{\label{fig-interject}Interjections received per speech by
gender, 1901--present. Lines show annual mean interjections per speech
for male and female parliamentarians in the House of Representatives and
Senate; smoothed trends (LOESS) are overlaid. Female representation in
the federal Parliament began in 1943 and early conunts are based on very
small speaker counts and exhibit high year-to-year variability. Panels
are faceted by chamber.}

\end{figure}%

Across the full temporal extent of the corpus, female MPs consistently
receive fewer interjections per speech than their male counterparts,
aligning with the findings of \textcite{katz2026}. This pattern is more
plausibly read as a form of disengagement than as respectful restraint:
male colleagues appear less likely to contest or engage with women's
contributions on the floor, meaning that fewer interjections may signal
a less contested -- and therefore potentially less influential --
parliamentary voice rather than a safer one.

Future questions are numerous. One would be to move beyond counts and
analyse the content or tone of interjections; another would be to
compare these dynamics across legislatures. More broadly, Hansard DB
provides a way to connect parliamentary speech data to wider debates
about gender, representation, and deliberative inclusion.

\section{Discussion}\label{discussion}

The preceding results illustrate only a fraction of what Hansard DB
makes possible. With over a century of parliamentary speech linked to
biographical metadata, researchers can trace how speaking patterns,
interjection rates, and the distribution of voice evolve across
governments, parties, and historical periods. Recent advances in natural
language processing -- and in particular, large language models --
expand these possibilities further: tasks like argument mining, stance
detection, and rhetorical framing that were once intractable at scale
are now increasingly feasible with this dataset \autocite{angus2026}.

Yet the capacity to ask new questions does not guarantee the capacity to
answer them well. This section examines the epistemic boundaries of the
Hansard DB: what it can reliably tell us, what remains uncertain, and
where automated analysis risks producing confident but misleading
conclusions.

\subsection{Technical Limitations}\label{technical-limitations}

Several epistemic limitations stem from the technical choices made in
constructing Hansard DB, as well as exiting issues in the transcribed
record.

First, a small number of sitting days are missing from the corpus. These
gaps result from rare archival failures, inaccessible records, or
historical anomalies. While the number is small -- less than 0.01\% of
sitting days -- it introduces uncertainty into any longitudinal pattern,
particularly for periods where gaps are concentrated (see
Figure~\ref{fig-days}).

Second, speaker attribution is not always complete. Some speeches lack
sufficient information to unambiguously identify the author, and remain
unmatched to a parliamentarian. These unmatched speeches are
concentrated in the early (pre-1980) digitised records, where name
formats were inconsistent and metadata was sparse. The effect is
epistemic: analyses of individual speaking patterns, party distribution,
or gender differences are based on a systematically incomplete subset
for earlier decades.

Third, interjection parsing is imperfect. Heuristics were required to
identify inline interjections placed within paragraph elements rather
than in their own structural nodes. Without understanding the semantic
content of the text, it is impossible to reliably distinguish these from
other speaker references. The result is epistemic: interjection counts
for earlier decades may systematically undercount certain types of
interruptions, affecting any analysis of interactivity over time.

A deliberate design decision compounds these issues: Hansard DB was
constructed to reflect Hansard as published, not to reconstruct what
actually occurred in Parliament. Errors in the original record --
misattributed speeches, incorrect dates, or garbled transcriptions --
are preserved unless they were obvious enough to detect through
rule-based validation. For speaker attribution specifically, while
clearly erroneous matches were corrected (such as speeches attributed to
members not yet elected), there will almost certainly be incorrect
attributions that remain undetected because they do not violate any
validation rules. Hansard DB inherits Hansard's errors alongside its
content.

An important qualification, however, is that many of these limitations
need not be fatal for downstream quantitative analysis if they are
broadly systematic. Stable under-attribution, consistent editorial
selection, or persistently imperfect interjection parsing may still
permit valid comparative inference, particularly where the goal is to
track relative rather than absolute differences. The greater technical
risk arises when such imperfections vary over time in ways that are not
observed in the data. Changes in transcription conventions, editorial
workflows, annotation rules, or staffing can introduce structural breaks
that appear analytically as shifts in parliamentary behaviour when they
instead reflect changes in corpus production. This points to an
important avenue for future research: treating Hansard not only as a
record of Parliament, but also as the output of an evolving technical
pipeline. Archival study of transcription procedures, editorial
guidelines, and staffing transitions could help identify when
discontinuities in the corpus reflect changes in speech and when they
reflect changes in recording and annotation practice.

\subsection{Interpretive Risks}\label{interpretive-risks}

Beyond technical limitations, Hansard DB inherits constraints from the
source material that cannot be resolved through data cleaning or parsing
improvements.

Most fundamentally, Hansard is not a verbatim record of chamber
proceedings but an official textual rendering of them. It should
therefore not be treated as identical to what happened in Parliament. As
discussed in the Background, the transcript is shaped by editorial
judgement and by the inherent limits of transcription itself. Features
that may shape both meaning and political effect -- including tone,
pace, timing, hesitation, overlap, gesture, and audience response -- are
largely absent from the record. For analysis, this means Hansard DB is
well suited to studying patterns in recorded language, but less able to
capture the full interactional and performative character of
parliamentary speech.

This also limits what can be inferred about political significance. In
the textual record, consequential interventions may appear little
different from routine contributions. Hansard DB can show what was said,
but not reliably which remarks landed, which fell flat, or which altered
the course of debate. Analyses concerned with decisive moments,
political impact, or the atmosphere of debate therefore require
corroboration from sources beyond Hansard itself, such as broadcast
footage, news reporting, memoir, or archival material.

\subsection{Risks of Automated
Analysis}\label{risks-of-automated-analysis}

A distinct set of risks emerges when computational tools -- particularly
natural language processing models and large language models -- are
applied to this historical corpus.

The most subtle is lexical semantic change: the gradual evolution of
word meanings over time. Political language is especially susceptible to
such shifts. Terms that carried specific connotations in the early
twentieth century may have acquired different meanings in contemporary
usage, while entirely new concepts have entered the political lexicon. A
word like ``liberal'' meant something quite different in 1901 than it
does today, particularly in Australia where it is now closely associated
with the centre-right Liberal Party; ``welfare'' has shifted from a
general term for wellbeing to a specific policy domain. When NLP models
trained on modern corpora are applied to historical texts, they risk
misinterpreting these shifting meanings in ways that are difficult to
detect and even harder to correct. At the same time, these semantic
shifts are not only a methodological hazard but also a substantive
object of analysis in their own right: changes in the relational
structure of political language can reveal how concepts are redefined,
contested, and repositioned over time \autocite{kozlowski2019}.

Beyond vocabulary, there is the risk of misinterpreting the positions
expressed in parliamentary speech. As the Background section
established, parliamentary debate is rarely spontaneous deliberation --
it is a choreographed performance shaped by party discipline, strategic
communication, and awareness of the recorded audience. A speech may not
represent the speaker's personal views, but rather the party line, a
tactical intervention, or a performance designed for media consumption.
Automated sentiment analysis or stance detection applied naively to
Hansard risks treating these strategic utterances as sincere expressions
of belief.

These risks are compounded when large language models are used to
summarise, classify, or interpret historical parliamentary text. Such
models encode the linguistic patterns of their training data --
predominantly contemporary text -- and may impose modern framings on
historical debates. They lack the contextual knowledge to recognise when
a term has shifted meaning, when a speech is tactical rather than
sincere, or when an apparent consensus masks deep disagreement conducted
through other channels. The fluency of their outputs can mask these
interpretive failures, producing confident summaries that are subtly but
systematically wrong.

\section{Conclusion}\label{conclusion}

Hansard DB transforms over a century of Australian parliamentary
proceedings into a structured, queryable resource that enables new forms
of longitudinal analysis. By integrating biographical metadata with each
parliamentary contribution, Hansard DB supports sophisticated
longitudinal analyses of participation, representation, and rhetorical
change across individuals, parties, and historical periods.

Yet the capacity to ask these questions does not guarantee the capacity
to answer them well. The documented limitations here -- missing days,
incomplete attribution, and imperfect interjection parsing -- represent
known unknowns that can be quantified and accounted for. The
interpretive risks are more insidious: the mediated nature of Hansard,
the strategic character of parliamentary speech, and the dangers of
applying modern computational tools to historical text.

Findings derived from Hansard DB must be interpreted with disciplined
humility: confidence in the patterns the data reveals, paired with
caution about the claims it can sustain. Hansard DB is a tool for
inquiry, not a source of ground truth. Used carefully, it offers
unprecedented access to the textual record of Australian democracy; used
carelessly, it risks producing confident but misleading conclusions
about what parliamentarians said, meant, and believed.

\section{Data Availability}\label{data-availability}

The full database, along with schema, metadata, usage instructions, and
supporting code, is openly available at
\url{https://github.com/Fonzzy1/federal-hansard-db}.

The version referenced in this paper is v4.1.0; however, it is expected
that there will be frequent updates to include new parliamentary
records.

\section{Credit Statement}\label{credit-statement}

CRediT: Conceptualization: AC, SDA; Data curation: AC; Formal Analysis:
AC; Funding acquisition: AC; Investigation: AC; Methodology: AC; Project
administration: AC; Resources: AC; Software: AC; Supervision: SDA, LL;
Validation: AC; Visualization: AC, SDA; Writing -- original draft: AC;
Writing -- review \& editing: AC, SDA, LL

\section{References}\label{references}

\printbibliography[heading=none]




\end{document}
