A few weeks ago, a family member asked me to make them a Spotify playlist with recent rap hits. To avoid including anything excessively profane, I’d pull up the song lyrics on genius.com and manually search for potentially offensive words or phrases. Looking to streamline this process (and have a bit of fun with Shiny Apps), I built a simple tool that quickly measures profanity in any song, based on lyrics from genius.com.
The app is embedded below, but you can find a full-screen version here. Here are some sample songs to try out:
- “Rap God”: https://genius.com/Eminem-rap-god-lyrics
- “The London”: https://genius.com/Young-thug-the-london-lyrics
- “Money in the Grave”: https://genius.com/Drake-money-in-the-grave-lyrics
Building the App
The first step was to create a list of offensive words to check song lyrics against. The list I used was by developed by Luis von Ahn. As he notes on his resource page, “the list contains some words that many people won’t find offensive, but it’s a good start for anybody wanting to block offensive or profane terms on their site.”
Next, I needed to develop a function to scrape the lyrics from genius.com, tidy the text into a data frame format, and summarize the profanity by count in descending order.
Finally, I needed an interface for users to interact with. Luckily, the
shiny package makes this easy. After importing the profanity list, writing the genius.com scrape function, and building the Shiny app interface locally, I was ready to deploy it to shinyapps.io.
Voila! Now I have a basic tool to quickly summarize profanity in any song found on genius.com.
Hopefully this will come in handy next time I need to put together a “family friendly” mix for events, parties, or road trips. You can find the GitHub repo for this project here, and can access the Shiny app directly here.Feature photo by Matthew Henry from Burst.