Word Frequency Explorer

Your Name Here
julio 16, 2026

A tiny Shiny app that turns any text into instant insight

Live app: https://your-account.shinyapps.io/wordfreq/  |  Code: https://github.com/your-username/your-repo

The Problem

  • You paste text into a search bar or a doc and think: “What is this actually about, at a glance?”
  • Manually counting words, or eyeballing repeated terms, is slow and error-prone
  • Most tools that do this live behind logins, ads, or require you to install software

Word Frequency Explorer solves this with one text box and zero setup — paste, adjust two or three simple controls, and see results update instantly.

How It Works

The app has three ingredients, wired together with Shiny's reactive model:

  1. Input — a text box, a slider for how many top words to show, and checkboxes to remove stopwords / ignore capitalization
  2. Server computation — the pasted text is cleaned, tokenized into words, optionally filtered, and tallied into a frequency table
  3. Reactive output — a bar chart, a table, and summary counts, all of which redraw instantly whenever you change anything

Here's the core counting logic actually running, live, right now:

sample_text <- "the quick brown fox jumps over the lazy dog the fox is quick"
words <- unlist(strsplit(sample_text, "\\s+"))
freq  <- sort(table(words), decreasing = TRUE)
head(freq, 5)
words
  the   fox quick brown   dog 
    3     2     2     1     1 

See It In Action

Feeding the app a longer passage and looking at the top 5 words after removing common stopwords:

stopwords <- c("the","and","is","a","of","in","but","at","to","too","over")
text <- "The quick brown fox jumps over the lazy dog. The dog barks at the
         fox, but the fox is too quick. In the end, the quick fox and the
         lazy dog become friends."

tokens <- tolower(unlist(strsplit(gsub("[^A-Za-z]", " ", text), "\\s+")))
tokens <- tokens[nchar(tokens) > 0 & !(tokens %in% stopwords)]
top5   <- sort(table(tokens), decreasing = TRUE)[1:5]

barplot(top5, col = colorRampPalette(c("#a6d8f0", "#2c7fb8"))(5),
        main = "Top 5 words", ylab = "Count")

plot of chunk unnamed-chunk-2

This is exactly what the deployed app renders reactively as you type.

Try It Yourself


Thanks for watching!

Paste some text of your own into the app and see what floats to the top.