Extracting Basic Plots from Novels: Dracula is a Man in a Hole

In 1965 the University of Chicago rejected Kurt Vonnegut’s college thesis, which claimed that all stories shared common structures, or “shapes”, including “Man in a Hole”, “Boy gets Girl” and “Cinderella”. Many years later the then already legendary Vonnegut gave a hilarious lecture on this idea – before continuing to read on please watch it here (about 4 minutes):

When you think about it the shape “Man in a Hole” (characters plunge into trouble and crawl out again) really is one of the most popular – even the Bible follows this simple script (see below)!

A colleague of mine, Professor Matthew Jockers at Washington State University, has analyzed 50,000 novels and found out that Vonnegut was really up to something: there are indeed only half a dozen possible plots most novels follow:

  • Rags to riches – a steady rise from bad to good fortune
  • Riches to rags – a fall from good to bad, a tragedy
  • Icarus – a rise then a fall in fortune
  • Oedipus – a fall, a rise then a fall again
  • Cinderella – rise, fall, rise
  • Man in a hole – fall, rise

You can read more about this project here: Every story in the world has one of these six basic plots.

Professor Jockers has written a whole book about this topic: “The Bestseller Code”. But what is even more mind-blowing than this unifying pattern of all stories is that you can do these analyses yourself – with any text of your choice! Professor Jockers made the syuzhet package publicly available on CRAN (“Syuzhet” is the Russian term for narrative construction).

A while ago I finished Dracula, the (grand-)father of all vampire and zombie stories. What a great novel that is! Admittedly it is a little slow-moving but the atmosphere is better than in any of the now popular TV series. Of course, I wanted to do an analysis of the publicly available Dracula text.

The following code should be mostly self-explanatory. First the original text (downloaded from Project Gutenberg: Bram Stoker: Dracula) is broken down into separate sentences. After that the sentiment for each sentence is being evaluated (to understand the basics of sentiment analysis see this post: Learning Data Science: Sentiment Analysis with Naive Bayes) and all the values smoothed out (by using some kind of specialized low pass filter). Finally the transformed values are plotted:

dracula <- get_text_as_string("data/pg345.txt")
Dracula <- get_sentences(dracula)
Dracula_sent <- get_sentiment(Dracula, method = "bing")
ft_values <- get_dct_transform(Dracula_sent, low_pass_size = 3, scale_range = TRUE)
plot(ft_values, type = "l", main = "Dracula using Transformed Values", xlab = "Narrative Time", ylab = "Emotional Valence", col = "red")
abline(h = 0)

In a way R has “read” the novel in no time and extracted the basic plot – pretty impressive, isn’t it! As you can see the story follows the “Man in a Hole”-script rather exemplary, which makes sense because at the beginning everything seems to be fine and well, then Dracula appears and, of course, bites several protagonists, but in the end they catch and kill him – everything is fine again.


…as a bonus, here is the plot that shows that the Bible also follows a simple “Man in a Hole” narrative (paradise, paradise lost, paradise regained). Fortunately, you can conveniently install the King James Bible as a package: https://github.com/JohnCoene/sacred

# devtools::install_github("JohnCoene/sacred")
KJV_sent <- get_sentiment(king_james_version$text, method = "bing")
ft_values <- get_dct_transform(KJV_sent, low_pass_size = 3, scale_range = TRUE)
plot(ft_values, type = "l", main = "King James Bible using Transformed Values", xlab = "Narrative Time", ylab = "Emotional Valence", col = "red")
abline(h = 0)

Simple stories often work best!

When you think about it: Trump’s slogan “Make America Great Again (MAGA)” is also a condensed story about the past, the present, and the future. Basically, it follows the same pattern of “Man in a Hole”! That made it so powerful and alluring to many.

Leave a Reply

Your email address will not be published. Required fields are marked *

I accept that my given data and my IP address is sent to a server in the USA only for the purpose of spam prevention through the Akismet program.More information on Akismet and GDPR.

This site uses Akismet to reduce spam. Learn how your comment data is processed.