aesopR provides a tidy, public-domain corpus of Aesop’s Fables sourced from the Library of Congress.
It is designed for teaching, exploration, and reproducible text analysis workflows—without relying on copyrighted text.
The package ships with:
aesops_fables: one row per fable (text + metadata)
aesops_tokens: one row per word token (analysis-ready)
aesops_bing: tokens joined with Bing sentiment labels
aesops_afinn: tokens joined with AFINN sentiment scores
In this vignette, we’ll use one fable as a running example: “The Fox and the Grapes.”
library(aesopR)
aesops_fables contains the fables as complete narratives, along with a moral and a source URL.
aesops_fables
aesops_tokens is derived from the fable texts and is ready for word frequency, n-grams, and sentiment workflows.
aesops_tokens
fox_text <- aesops_fables |> filter(fable_id == "005")
fox_text
Once you have a fable_id, you can pull its word tokens.
fox_tokens <- aesops_tokens |> filter(fable_id == "005")
head(fox_tokens)
fox_tokens |> count(word, sort = TRUE)
This is intentionally simple. In a methods class, this is a great moment to discuss:
stop words
lemmatization/stemming
how preprocessing choices influence results
To avoid interactive prompts and downloads during checks, aesopR ships with two sentiment-joined datasets:
aesops_bing (positive/negative labels)
aesops_afinn (numeric sentiment scores)
fox_bing <- aesops_bing |> filter(fable_id == "005")
table(fox_bing$sentiment)
fox_afinn <- aesops_afinn |> filter(fable_id == "005")
summary(fox_afinn$value)
A nice discussion prompt:
Do the sentiment signals match the moral of the story?
What words are driving the sentiment?
How might results change with a different lexicon?
If you’re teaching or learning research methods, aesopR works well for:
operational definitions (what counts as a “theme”?)
measurement decisions (lexicon choice, preprocessing choices)
replication and transparency (same corpus, different pipelines)
quick classroom activities (frequency, sentiment, moral inference)