Skip to the tool

Word counter

MDV Tools

Type or paste text. The counts follow every keystroke: words, characters, bytes, sentences, paragraphs, and how long the text takes to read or to say aloud.

Runs on this device Works offline
0 characters
words per minute
238 wpm is the adult average for silent reading. Speaking time is fixed at 150 wpm.
Counts
type or paste text above
How this works

A word is a run of Unicode letters, digits or combining marks, with apostrophes allowed inside the run: the regex [\p{L}\p{N}\p{M}]+(?:['’][\p{L}\p{N}\p{M}]+)* with the u flag. So don't and l'aria are one word each, well-known is two, and 1492 counts. Scripts written without spaces (Chinese, Japanese, Thai) come out as one word per unbroken run, which undercounts them; this tool does not segment those. Characters are graphemes from Intl.Segmenter, so a flag or a family emoji counts once; if the browser lacks it the row is relabelled "Code points" and counts those instead. "Without spaces" first removes every \s character. Bytes are the length of the TextEncoder output, which is UTF-8.

A sentence ends at ., ! or ?, optionally followed by a closing quote or bracket, when whitespace or the end of the text comes next; a final run of words with no terminator counts as one more. Abbreviations such as Dr. or e.g. therefore overcount, and ... counts once. A paragraph is a run of text between blank lines. Lines are split at \n after \r\n is normalised, and a trailing newline does not add one. Reading time is words divided by the speed you set — 238 wpm is the adult mean for silent reading in Brysbaert's 2019 meta-analysis — and speaking time uses 150 wpm, an ordinary presenter's pace. Both are rounded to the second and both are estimates for an average reader, not a measurement of you.

The frequency table lowercases each word with toLowerCase, drops words shorter than two characters, and lists the ten most common, ties broken alphabetically. There is no stopword list, so articles and prepositions rank first. Input above 2,000,000 characters is refused rather than attempted, so the tab never hangs. Nothing is uploaded: there is no server in this file.

The Dark button remembers its setting in this browser's local storage. Nothing you type or drop into the page is stored.