# libraries
library(here) # https://here.r-lib.org/
library(fs) # https://fs.r-lib.org/
library(stringr) # https://stringr.tidyverse.org/
library(curl) # https://jeroen.r-universe.dev/curl
# settings
include_source <- TRUE
include_txt <- FALSE
include_xml <- FALSE
# function to download sermon
sermon_download <- function(x, ext){
url_input <- path_ext_set(path(path_dir(data$url),x),ext)
path_output <- path("gen",ext)
sapply(path_output, function(y) {if(!dir_exists(y)) dir_create(y)})
destx <- path(path_output,path_file(url_input))
multi_download(url_input, destx)
}
# read csv
data <- read.csv(path("data","NDPP.csv"))
# create list with urls to download
sermon_names <- str_extract(path_dir(data$url_export),"\\d{4}_.*")
# download sermons to the appropriate folders
if(include_source) sermon_download(sermon_names, data$source)
if(include_txt) sermon_download(sermon_names,"txt")
if(include_xml) sermon_download_sermon(sermon_names,"xml")Using the NDPP Sermon Database for Research
Introduction
Sermons are studied by a variety of disciplines, such as religious studies, church history, homiletics, and communication science. These disciplines have their own specific methods for sermon analysis.1 The Netherlands Database for Protestant Preaching (NDPP) provides a portal to a large dataset with sermons. Researchers can select the dataset that is appropriate for their research purposes, they are enabled to download the metadata of the dataset and the source-files of the sermons in the dataset. The database is an open (‘monitor’) corpus and follows Open Science principles, including FAIR data.
1 See for a current overview of methods for sermon analysis, Samuel Lacher, Hans-Ulrich Probst and Manual Stetter, Predigtanalysen. Perspektiven der Untersuchung religiöser Rede, Vandenhoek & Ruprecht 2025.
This page introduces a qualitative and a computational scenerio to obtain the material that is included in the database for the study of sermons. To simplify methodologically: the difference between qualitative and computational approaches in the study of sermons consists of the amount of material included in the analysis. Hence, computational research often involves ‘big data’. In sermon analysis computation methods are increasingly used.
Qualitative research
Often qualitative studies use a rather small datasets for analysis and reporting. Small is understood as less than 25 sermons for a study.
For a relatively small dataset it suffices to download the data manually from the separate sermon-pages. Follow the next few steps for a reliable and replicable workflow:
Step 1. Create a sample
Use the portal to make a selection of the sermons that should be included in the sample.
Two search strategies are availbe to create a sample from the database. These strategies can be combined.
- Use the filters at the top of each column. These filters can be combined. Find all sermons in a certain period of the liturgical year, by preacher A, in a certain period and based upon a particular text. It is possible to select multiple periods, preachers or biblical texts.
- The general search-box (top right) can be used for very simple searches (all columns simultaneously) or very sophisticated searches based upon regular expressions. Suppose you would like to study all sermons that are based upon all chapters three of all biblical books.2 Since all chapters are preced by a space that separates the name of the book from the number of the chapter, you need to find all phrases that start with a space, followed by a three and a colon. The following regular expression fits that search:
\s3:. Another example: if you wish to select all sermons from Genesis and Exodus, use(Exo|Gen).
2 Information scientist Donald Kuth once wrote a book with short meditations on all 3:16 texts in the Bible.
After you have created a sample, use the download button to export your selection. It is recommended to either use csv or excel for the download. Store the file on your local computer.
Step 2. Open the file in a spreadsheet program
Use a spreadsheet program to open the file with selection of sermons. Find the column with url to navigate to the webpages for the individual sermons. Visit the webpages and download the required material. Obviously, you can navigate to the individual sermons using the hyperlink in the portal. However, the spreadsheet helps you to keep track of your selected sample. Once you need more than 25 sermons, it becomes cumbersome to do this manually. Hence, the next scenario may fit your purposes better.
Computational research
If you need a large amount of files, it is often more efficient to rely on scripts to download the material. The proposed workflows require some (basic) programming skills.
Step 3. Set up a projectfolder.
It is advised to keep files separated, based upon their function in the workflow. A basic model for a projectfolder3 is as follows:
3 This model is well documented at the Tilburg Science Hub, supported by Tilburg University.
sermon_analysis
├── data
├── gen
├── readme.txt
└── src
The projectfolder (sermon_analysis) contains three subfolders. Store data-files in the folder data. Scripts are stored in src. The folder gen is used for output by the scripts. These automatically generated can be easily removed. Write a few lines about your project and store this in readme.txt.
Select and download the data (step 1) in csv format and store the file in the data folder. Use an informative name. In the example scripts, we’ll work with the name NDPP.csv.
Step 4. Fetch the data
To fetch the data automatically, you need to run scripts from a program environment. The tabs below provide scripts in two flavors, R and Python. To run the scripts you need to install the software and open the scripts in an integrated developer environment (IDE). Manuals to use the software can be found on the internet.4
4 A good starting point might be the book Computational Analysis of Communication by Van Atteveldt, Trilling & Arcilla. There is an online version.
Download (copy and paste) the script into the src folder of your project. Run the script from your IDE and language of choice. Depending upon the availability in the corpus, the script enables you to download three types of files: source files (audio, video or text), transcriptions and xml versions of the transcriptions. The downloads are stored in the gen folder of your projectdirectory.
Before running the scripts, create an R-project.
import os
import re
import pandas as pd
import requests
from pathlib import Path
# Settings
include_source = True
include_txt = False
include_xml = False
# Function to download sermon
def sermon_download(names, ext):
for name in names:
# Build input URL by replacing the filename and setting extension
base_dir = str(Path(data["url"].iloc[0]).parent)
url_input = str(Path(base_dir) / name) + f".{ext}"
# Build output path
path_output = Path("gen") / ext
path_output.mkdir(parents=True, exist_ok=True)
# Destination file
dest = path_output / (name + f".{ext}")
# Download file
response = requests.get(url_input)
if response.status_code == 200:
with open(dest, "wb") as f:
f.write(response.content)
print(f"Downloaded: {dest}")
else:
print(f"Failed to download: {url_input} (status {response.status_code})")
# Read CSV
data = pd.read_csv(Path("data") / "NDPP.csv")
# Create list with URLs to download
sermon_names = data["url_export"].apply(
lambda x: re.search(r"\d{4}_.*", str(Path(x).parent)).group(0)
if re.search(r"\d{4}_.*", str(Path(x).parent)) else None
)
# Download sermons to the appropriate folders
if include_source:
sermon_download(sermon_names, data["source"].iloc[0])
if include_txt:
sermon_download(sermon_names, "txt")
if include_xml:
sermon_download(sermon_names, "xml")Python code has been converted from R by Claude.ai.
Citation
Cite the database in your publications as follows:
@website{pleizier2026,
author = {Theo Pleizier},
title = {Using the Dutch Database of Protestant Preaching for the Study of Sermons},
year = {2026},
url = {prekendatabank.nl}}This database has been cited in…
If you used our database in a publication, we would be happy to include it in the list of our publications.