CoolFace
Datasetpublic

brjoey/ecb-press-conferences

ECB Monetary Policy Press Conference Transcripts Full transcripts of every ECB Governing Council monetary policy press conference from June 1998 to the present, structured paragraph-by-paragraph with an introductory statement / Q&A split and journalist-vs-ECB-official speaker labels. Source: European Central Bank (ecb.europa.eu) — original text © European Central Bank, Frankfurt am Main, Germany. Reproduction permitted provided the ECB is cited as the source. See ECB copyright… See the full description on the dataset page: https://huggingface.co/datasets/brjoey/ecb-press-conferences.

sourceHugging Faceotherupdated 12d agoView on Hugging Face
0likes36downloads
Dataset Card

ECB Monetary Policy Press Conference Transcripts

Full transcripts of every ECB Governing Council monetary policy press conference from June 1998 to the present, structured paragraph-by-paragraph with an introductory statement / Q&A split and journalist-vs-ECB-official speaker labels.

Source: European Central Bank (ecb.europa.eu) — original text © European Central Bank, Frankfurt am Main, Germany. Reproduction permitted provided the ECB is cited as the source. See ECB copyright notice. Coverage: June 1998 – present (294 conferences as of June 2026) Update frequency: Automatically updated after each Governing Council meeting (8 times/year) Version: v1.1 — see CHANGELOG.md

Dataset structure

ColumnTypeDescription
urlstringSource URL on ecb.europa.eu
datestringISO date YYYY-MM-DD
locationstringCity where the conference was held
participantsstringECB President and Vice-President (full names and titles)
presidentstringECB President name, e.g. "Christine Lagarde". Empty for the handful of non-standard briefings chaired by a board member.
vice_presidentstringECB Vice-President name, e.g. "Luis de Guindos". Also filled when a Vice-President chaired in the President's absence.
is_monetary_policyboolFalse for 6 historical entries that sit on the monetary-policy-statement URL path but are not rate-decision press conferences (see Non-standard entries); True otherwise.
has_qaboolWhether a Q&A session is present (9 early/non-standard conferences have no Q&A)
intro_paragraphslist[str]Body paragraphs of the introductory statement (headings excluded)
intro_headingslist[dict]Section headings: {text, after_paragraph_index} — after_paragraph_index is the index of the last body paragraph before this heading (−1 if the heading precedes all body paragraphs). Present from 2021 onwards.
intro_full_textstringFull introductory statement as plain text (body paragraphs only)
n_is_paragraphsintNumber of IS body paragraphs
ceremonial_paragraphslist[str]Host welcome address / farewell tribute delivered before the president's statement, split out so it does not pollute the IS. Non-empty only for away meetings with a ceremonial preamble (see Ceremonial preambles).
n_ceremonial_paragraphsintNumber of ceremonial preamble paragraphs
has_ceremonial_preambleboolWhether a ceremonial preamble is present
qa_turnslist[dict]All Q&A turns: {text, role, lang} where role is question, answer, or unknown, and lang is "en" or "fr" (see Language)
qa_questionslist[str]Journalist questions only
qa_answerslist[str]ECB official answers only
qa_full_textstringFull Q&A session as plain text
n_qa_turnsintTotal number of Q&A turns
has_non_englishboolWhether any Q&A turn is non-English (French)
n_non_english_paragraphsintNumber of non-English (French) Q&A turns

Speaker classification

Each Q&A paragraph carries a role label — "question" (journalist or reporter) or "answer" (ECB President or Vice-President).

Pipeline

PeriodMethod
Pre-2013 (approx. 140 conferences)Regex on explicit "Question:" / speaker-name prefixes present in original HTML
2013–presentKimi K2 LLM via HF Inference API (zero-shot, full-transcript context, two-pass verify)

Validation status

PeriodChecked
Pre-2013Labels taken directly from explicit HTML speaker markers
2013–2023Validated against 100 hand-annotated conferences; errors corrected
2024–June 2026All 20 conferences inspected after classification
Beyond June 2026Automatic, not manually inspected

Residual errors may exist — please flag any mislabelled paragraph on the community tab.

Usage

Load a clean dataset and build the subsets

Load, keep only standard monetary-policy conferences and English Q&A, then split into the IS / Q&A / questions / answers subsets. intro_paragraphs and intro_full_text already exclude section headings and ceremonial preambles.

python
from datasets import load_dataset

ds = load_dataset("brjoey/ecb-press-conferences", split="train")

# Keep only standard monetary-policy conferences (drops the 6 non-MP events)
ds = ds.filter(lambda r: r["is_monetary_policy"])

# Introductory statement (no headings, no ceremonial preamble)
is_full  = ds["intro_full_text"]     # list[str]        one IS string per conference
is_paras = ds["intro_paragraphs"]    # list[list[str]]  IS body paragraphs

# Q&A — English turns only (drops the few French tribute/question turns)
def en_turns(row):
    return [t for t in row["qa_turns"] if t["lang"] == "en"]

qa_paras  = [[t["text"] for t in en_turns(row)] for row in ds]   # list[list[str]]
qa_full   = ["\n\n".join(turns) for turns in qa_paras]         # list[str] per conference
questions = [[t["text"] for t in en_turns(row) if t["role"] == "question"] for row in ds]
answers   = [[t["text"] for t in en_turns(row) if t["role"] == "answer"]   for row in ds]

# Flatten across the whole corpus if you don't need per-conference grouping
all_questions = [q for conf in questions for q in conf]
all_answers   = [a for conf in answers   for a in conf]

From 2021 the introductory statement is split under named sections (Economic activity, Inflation, Monetary policy stance), stored in intro_headings as {text, after_paragraph_index}. Work with intro_paragraphs alone to ignore them, or use after_paragraph_index to reinsert each heading after that body paragraph.

Data-quality flags

Almost every entry is a standard English press conference: an introductory statement followed by a Q&A. A few are exceptions — some entries aren't monetary-policy conferences at all, a few Q&A turns are in French, and away meetings open with a host's welcome address. These fields let you find and drop those exceptions:

FlagMeaningDrop it to remove
is_monetary_policyFalse for 6 non-rate-decision events (see below)non-MP events
qa_turns[].lang"en" or "fr"French turns
has_ceremonial_preamble / ceremonial_paragraphshost welcome address split out of the ISceremonial preamble
has_non_english / n_non_english_paragraphsrow-level French summary—

The load example above shows how to apply these to get a clean English monetary-policy dataset.

Language

The corpus is English. Six Q&A turns across three conferences are in French — always a farewell tribute or a French-language question+answer at an away meeting — and are tagged lang="fr" on the relevant qa_turns (has_non_english / n_non_english_paragraphs summarise this at row level):

DateFrench turns
2000-10-19 (Paris)2 — Trichet's tribute to outgoing President Duisenberg
2011-10-06 (Berlin)3 — a French farewell question + Trichet's French reply
2020-09-101 — Lagarde's tribute to Antoine Rufenacht

The introductory statements are English throughout, so intro_paragraphs is not language-tagged.

Ceremonial preambles

Twice a year the Governing Council meets outside Frankfurt, hosted by a national central bank whose governor might give a welcome address before the president's statement. On such pages the ECB separates the welcome address from the IS with an extra ***. Where that preamble would otherwise be merged into the IS it is split into ceremonial_paragraphs instead, keeping intro_paragraphs clean. Currently non-empty for 2011-10-06 (Berlin) — Bundesbank President Weidmann's welcome address at Trichet's final press conference.

Non-standard entries

Every conference contains an introductory statement (the minimum is 5 body paragraphs), so there are no IS-less rows. What differs from the standard layout:

Not monetary-policy press conferences (is_monetary_policy == False) — six historical entries the ECB filed on the monetary-policy-statement URL path that are actually other events:

DateEvent
2001-12-13Signing of an ECB–Europol co-operation agreement
2003-09-17Banknote-design competition award ceremony
2003-10-13 (Moscow)Address on ECB relations with foreign central banks
2005-01-20New ECB premises — architectural design presentation
2005-01-20New ECB premises — architectural design presentation (second page)
2005-01-21Launch of new euro-area statistics

No Q&A (has_qa == False) — nine conferences: the six non-MP events listed above, plus three genuine early monetary-policy conferences from 1998 (1998-06-09, 1998-07-08, 1998-09-11), when the ECB reported Governing Council decisions without a press Q&A.

Note: the 2014-10-26 comprehensive-assessment briefing and the abbreviated 2007-08-02 statement (issued during the onset of the financial crisis) are monetary-policy conferences and remain flagged is_monetary_policy == True.

Issues and contributions

Found a labeling error or a missing conference? Please open a discussion on the dataset community tab.

License

The transcript texts are © European Central Bank, Frankfurt am Main, Germany. Reproduction is permitted provided the ECB is cited as the source. See the ECB copyright notice.