Restrict ECB_press_conferences and
ECB_press_conferences_tokens to monetary policy statements
and related policy briefings. The packaged sample now contains 290
communications and 4,942 original paragraphs, from June 1998 through 29
October 2026. Exclude unrelated institutional communications, slide-only
entries, podcast links and separate decision releases accompanying
conference statements. Preserve original item and paragraph identifiers,
including the policy statement sharing the date of the cash-changeover
event. Record the exclusions and their reasons in the GitHub
repository’s data-preparation sources. This changes the data used by
existing analyses.
Fix get_ECB_press_conferences() to extract
paragraphs with arbitrary HTML attributes, including id,
while continuing to exclude the Q&A transcript. Separate host
welcome addresses from the President’s statement, and remove website
navigation and transcript correction notices. The parser continues to
return every indexed HTML item; dataset curation takes place in the
GitHub repository’s data-raw sources.
Extend both ECB corpora through the statement of 29 October 2026, and update the parser’s default year range to 1998–2026.
Rebuild both ECB corpora with the updated parser, restoring omitted substantive paragraphs in 2021 and correcting speaker sections. Apply sample selection before tokenization and frequency-based cleaning. Use spaCy 3.8.7 and en_core_web_sm 3.8.0, and record the Python dependencies.
Skip the expensive Picault-Renault regression tests and
stochastic JST/rJST convergence tests on CRAN. They continue to run with
devtools::test().
Reduce time-series test fixtures and use deterministic external sentiment values in time-series and merging tests, avoiding repeated full-corpus Picault-Renault scoring while retaining the dedicated scoring regression.
Use smaller datasets and shorter source-model fits in conversion tests while retaining their posterior, count, integrity and output comparisons.
Document the topic-oriented preprocessing of
ECB_press_conferences_tokens, the absence of lexicon
negators, and the token requirements for valence shifters to affect
sentiment.
Explain why merge_topics() recomputes rJST sentiment
from pooled counts and priors, and how to aggregate original sentiment
contributions instead. Add regression coverage for the pooled posterior
calculation.
Reject rJST(fitted_lda, lexicon = ...) when lexicon
preprocessing changes the fitted tokens or vocabulary, with guidance to
initialize a new model.
Reject unsupported sentiment-layer conversions in
as.LDA() with a clear error and document its structural
conversion contract.
Report missing raw sentiment stored through
docvars() with an actionable error, and clarify that
na.rm does not permit incomplete document
sentiment.
Validate finite positive active priors and integer iteration, layer and cycle counts before sampling, preserving the inactive LDA prior and lexicon zeros.
Document the intentional in-place caching of raw and scaled sentiment, including how time-series functions reuse the stored scaling parameters.
Isolate each chain’s raw and scaled sentiment cache while keeping
tokens, ordinary document variables and fixed priors in a shared core.
Accessing chains with [[, $, or
as.list(copy = FALSE) assembles temporary views;
as.list() produces independent models. Sentiment caches
survive extraction and zero-iteration fitting and are invalidated by
further sampling.
Invalidate model-derived raw and scaled sentiment after continued fitting or reset, while retaining externally assigned sentiment and the input model.
Corrected tied FREX ranks in top_words() to use
empirical CDFs, and fixed the documented FREX formula.
Compute top_words(method = "term-score") in log
space to avoid underflow with many topic and sentiment
combinations.
Use metric-specific default coherence windows in
chains_scores() when window is not
supplied.
Clarified that sentiment_topics(period = "identity")
returns topic-weighted sentiment contributions for each document, before
aggregation.
Corrected integer count reconstruction when converting
stm, topicmodels (variational LDA),
and keyATM models. The default
count_method = "heuristic" retains the original fast
strategy with corrected residual selection and unit-count removal. Set
count_method = "optimized" to minimize squared error in
reconstructed source probabilities using a slower, deterministic
optimizer. Both methods preserve required document, word and topic
totals.
Remove the five documented stop words (a,
the, an, of, to)
before n-gram matching in compute_PicaultRenault_scores().
The original full stop list remains unavailable. The new
stopwords argument accepts a custom list;
character(0) disables removal.
method = "proportional".Renamed base class sentopicmodel to
sentopicsmodel for consistency with the package
name.
Renamed various functions and classes to snake_case style.
mergeTopics() to
merge_topics()topWords() to
top_words()plot_topWords() to
plot_top_words()chainsScores() to
chains_scores()chainsDistances() to
chains_distances()topWords to
top_wordsmultiChains to
multi_chainsCorrected naming of Reverse Joint Sentiment/Topic model (rJST).
To align with this change, internal attributes of
sentopicsmodel objects have been renamed from
reversed to reverse.
Modified names of columns in the PicaultRenault_data
dataset to syntactically valid names.
Removed .sentiment docvars in
ECB_press_conferences dataset.
Fixed a bias in JST and rJST models caused by cached probabilities.
Fixed a labeling error when extracting sentiment time series for rJST models.
PicaultRenault_data dataset not present in the original
paper.sentiment_series(), melt()
dispatch with current data.table versions, and JST
coherence dimension labels.NA when
computeLikelihood = FALSE.grow() to fit() as a more
intuitive name. grow() remains in the package for
compatibility with older version.topWords(..., method="FREX") to the original paper.get_ECB_conferences() to
accommodates changes from the ECB website.seededlda
versions (1.2.0 and subsequent)as.LDA() method for outputs from the
keyATM package.data.table::melt() when
data.table was loaded prior to
sentopicsnCores
argument from grow())LDAvis() that prepare a dynamic
visualization of LDA models using the LDAvis
packageas.tokens.dfm()