Word Frequency Analyzer
Rank how often each word appears — case-folding, stopword and top-N filters, CSV export — entirely on this device.
0 tokens · 0 unique words
The ranked word table appears here as you type.
21 B as CSV
Press ? for shortcuts
Do it offline:$ tr -cs '[:alpha:]' '\n' < file.txt | tr '[:upper:]' '[:lower:]' | sort | uniq -c | sort -rn
How to use it
- Paste or type, or drop a .txt or .md file to rank.
- Set the options: ignore case, hide common English words, a minimum count, the row cap, and the boundary language.
- Read the ranked table — rank, word, count and share — under a summary line.
- Copy or download the ranking as CSV, or share a reopening link.
Paste any text and get a ranked table of every distinct word — its rank, raw count and share of the total — ordered from most to least frequent. The browser's Unicode segmenter finds the words, so contractions, numerals and space-free scripts tokenize correctly. Fold case, hide common English words, set a minimum count or cap the list, then export the whole ranking as CSV. Nothing you paste leaves this tab.
How it works
Words come from Intl.Segmenter at word granularity — the Unicode UAX #29 boundaries behind a double-click — keeping only word-like segments, so punctuation drops out. Space-free scripts lean on the segmenter's dictionary, so language matters for Chinese, Japanese and Thai; without it a regex fallback runs and posts a notice.
Each token is lowercased with String.prototype.toLowerCase and grouped by that folded key, so Cat and cat merge; off, each capitalization stands alone. The optional stopword filter removes a closed list of common English words — the, of, and, to — and is off by default, since raw counts are the honest start.
Rows sort by count, high to low; ties break by Unicode code point, not a locale's alphabet, so a text ranks the same everywhere and a permalink or CSV diff stays stable. Share is each word's percent of the analyzed pool — the tokens surviving the stopword filter — so hiding common words raises the rest; a minimum count or top-N cap only hides rows.
Examples
The cat sat on the mat. The cat ran.the ×3 (33.33%) · cat ×2 (22.22%) · mat ×1 (11.11%) · on ×1 (11.11%) · ran ×1 (11.11%) · sat ×1 (11.11%)the takes 3 of 9 tokens (33.33%), cat 2 (22.22%); the four single-use words tie into code-point order: mat, on, ran, sat.
Data data DATA analysis.data ×3 (75%) · analysis ×1 (25%)Ignore case merges Data, data and DATA into one key, data — 3 of 4 tokens (75%) — leaving analysis 25%; off, it splits into four rows.
The quick brown fox and the lazy dog.brown ×1 (20%) · dog ×1 (20%) · fox ×1 (20%) · lazy ×1 (20%) · quick ×1 (20%)Hide common words drops the, and and a second the (3 removed), so five unique words each take 20% of the 5 that remain.
apple apple apple banana banana cherry dateapple ×3 (42.86%) · banana ×2 (28.57%)A minimum count of 2 hides cherry and date, so apple shows at 3 (42.86%) and banana at 2 (28.57%) — shares still drawn from all 7 tokens.
Every example on this page is executed against the same engine that powers the tool, on every build.
Gotchas worth knowing
Numbers count, contractions join, hyphens split
A digit run is a word, so 2026 gets its own row; an apostrophe keeps don't whole, while a hyphen splits re-run into re and run. Analyzing don't re-run 2026 yields four words.
Ignore case merges variants; off keeps acronyms apart
With Ignore case off, each surface form is separate: in US us US the acronym US counts twice at 66.67% and the pronoun us at 33.33%. Keep case when capitalization matters.
The stopword list is English-only
It removes English function words only, so elsewhere it is a no-op: analyzing 猫は猫です in Japanese with the filter on removes zero tokens.
Space-free scripts need the right locale
Chinese, Japanese and Thai omit spaces, so the segmenter uses a dictionary. Analyzing 机器学习很有趣 as Chinese gives four words — 机器, 学习, 很, 有趣 — splitting the compound 机器学习.
Share is a slice of the surviving pool
Each share divides a word's count by the tokens surviving the stopword filter — in the cat cat dog, cat is 50% of four, but hide common words and it climbs to 66.67% of three.
Equal counts fall into code-point order
When words tie, the sort compares Unicode code points, not a locale's alphabet. banana apple cherry apple banana cherry ranks apple, banana, cherry, each 33.33%, on every device.
Common errors
This looks like a binary file, not text — a word ranking would be meaningless.- A dropped file is checked first: a NUL byte in the first 8,192 bytes flags it as binary and the ranking is skipped, while the box keeps whatever text was there.
Long link — some chats truncate it. Consider Download instead- The share link carries the whole document and its settings in the URL itself. A warning appears past 2,000 characters, where some chats clip long links; past 16,000 sharing is declined and Download state (.json) takes over.
Input is larger than the 32 MB limit for this tool. For bigger files use the CLI: tr -cs '[:alpha:]' '\n' < file.txt | tr '[:upper:]' '[:lower:]' | sort | uniq -c | sort -rn- The limit is a memory guard, not a cap on how many words rank; the input is refused whole, never partly. The pipeline handles any file size, tallying each lowercased word locally.
FAQ
Why do these counts differ from another word-frequency tool?
They tokenize differently: one keeps a hyphenated compound whole, another splits it. This page uses the browser's Unicode segmenter and breaks ties by code point, so identical text ranks identically anywhere.
What is a stopword, and why is that filter off by default?
A stopword is a high-frequency function word — the, of, and, to — that carries grammar, not subject; removing it surfaces what a document is about. It stays off by default: the raw ranking is the honest truth.
Does the text I paste get uploaded to build the ranking?
No. Tokenizing, ranking and CSV export run in this browser tab, and a large input goes to a local worker, not a server. No request carries what you typed or dropped.
Keyboard shortcuts
- ⌘/Ctrl + Enter
- Rank again now, skipping the typing pause.
- ⌘/Ctrl + S
- Save the ranked table as a .csv file.
- ⌘/Ctrl + C
- Copy the CSV when no text is selected.
- ⌘/Ctrl + Shift + C
- Copy the CSV even during a selection.
- t
- Switch the theme (ignored while typing).
- ? or ⌘/Ctrl + /
- Show the keyboard-shortcut list.
- Esc
- Dismiss the dialog and return focus to its trigger.