English

Word Frequency Counter & Keyword Density

See which words you repeat most and how dense your keywords are

Runs in your browser · nothing is uploaded

Count

Removes one common particle (은, 는, 이, 가, 을, 를, 에서, 으로 and so on) from the end of Hangul words. It compares against a short list rather than analysing grammar, so it can be wrong. It only strips when at least two syllables remain, so 사과 stays whole but 고양이 becomes 고양.

1–50 characters. Shorter words are not counted.

Separate with new lines or commas. There is no built-in stopword list; only the words you type are removed.

Show

42 words, 29 different

Showing top 20 of 29

RankWordCountShare (%)
1the716.67
2coffee49.52
3beans49.52
4in24.76
5is12.38
6first12.38
7thing12.38
8many12.38
9people12.38
10reach12.38
11for12.38
12morning12.38
13good12.38
14starts12.38
15with12.38
16fresh12.38
17store12.38
18your12.38
19an12.38
20airtight12.38

Share = count of the item ÷ total items counted × 100. Items removed by your exclude list, the number option or the minimum length are left out of the total too.

What it is

A word frequency counter that turns any block of text into a ranked table. Paste an article, an essay or a product description and you immediately see each word, how many times it appears and what share of the text it represents. Repeated words float to the top, which makes it easy to catch a pet phrase you lean on too often or to confirm that your main topic actually dominates the page.

There are three modes. Words counts whole words, Characters counts individual characters, and Keyword density takes target keywords you supply and reports how often each one appears and how much of the text it covers. Any table can be copied as tab-separated values and pasted straight into a spreadsheet. It handles Korean, Chinese and other languages as well as English, because word boundaries come from your browser’s built-in Unicode segmentation.

How to use

  1. Paste your text into the box. A sample paragraph is already there so you can see results straight away.
  2. Pick a mode: Words, Characters or Keyword density.
  3. Adjust the options: letter case, numbers, minimum length, and for Korean text the optional particle stripping.
  4. Add any words you want to exclude, one per line or separated by commas.
  5. Choose how many rows to show (10, 20, 50 or all) and copy the table if you need it elsewhere.

How it works

  • Words are the word-like segments returned by Intl.Segmenter with word granularity, so letters and digits count while emoji and punctuation do not. Contractions like “don’t” stay one word. Input is normalised to NFC first.
  • Letter case is ignored by default; everything is lowercased before counting.
  • Numbers: with “Include numbers” off, words made only of digits, dots and commas (2026, 3.14) are dropped.
  • Minimum length is a whole number from 1 to 50, measured in visible characters.
  • Exclude list entries must match a word exactly (after the same case handling). With particle stripping on, a word is excluded if either its original or stripped form matches.
  • Korean particle stripping is off by default on this page. When on, a word written only in Hangul that ends with a listed particle (에서, 에게, 으로, 까지, 부터, 처럼, 보다, 하고, 이나, 이랑, 은, 는, 이, 가, 을, 를, 의, 에, 로, 와, 과, 도, 만, 나, 랑) loses the longest matching one, but only if at least two syllables remain. It is a list comparison, not grammar analysis, so it can be wrong.
  • Characters mode counts visible characters (grapheme clusters), so 👍🏽 is one. Spaces and line breaks are always skipped; punctuation is skipped unless you untick that option. Emoji and symbols are counted.
  • Share = count ÷ total items counted × 100, displayed with up to two decimals. Ties keep the order in which the items first appear.
  • Keyword density = occurrences × words in the keyword ÷ total words × 100. The total here is every word in the text; the exclude list, minimum length and number options do not apply to it.
  • Limits: 200,000 characters of text, 20,000 characters of exclude words and 50 target keywords.

Examples

Results for the sample paragraph about coffee (42 words):

Word Count Share
the 7 16.67%
coffee 4 9.52%
beans 4 9.52%

Add “the” to the exclude list and the total drops to 35, so coffee and beans each rise to 11.43%. In Keyword density mode, “coffee” is found 4 times (9.52%) and “coffee beans” once, giving 1 × 2 ÷ 42 × 100 = 4.76%.

FAQ

Is there a built-in stopword list?

No. Common words such as "the" and "and" are counted like any other word. Type the words you want to drop into the exclude box, separated by new lines or commas. Only those words are removed, and they are left out of the percentage total as well.

What keyword density should I aim for?

There is no correct number, and this tool does not suggest one. It simply measures how much of your text a keyword takes up. Use it to spot a phrase you have repeated far more than you meant to, and judge the text by how it reads.

How are multi-word keywords counted?

A phrase such as "coffee beans" counts only when its words appear next to each other in the same order. Matches do not overlap, so "very very" is found once in "very very very". Its density multiplies the matches by the number of words in the phrase.

Why does "Coffee" show up as "coffee"?

By default letter case is ignored, so Coffee, COFFEE and coffee are merged and shown in lowercase. Untick "Ignore letter case" to count them separately.

Is my text uploaded?

No. Splitting and counting both happen in your browser. Nothing you paste is stored or sent anywhere.

Missing a tool?