Skip to content
How-to Guides

How to Check a Word-Count Claim Yourself

Kleoniq Kosova
Kleoniq Kosova 12 min read

Every word count is a count of one particular list, so checking a claim takes three steps: get the list the claim is about (or a stated substitute), run a single search over it, and say which list you used. Below, five claims that circulate online are checked live against the public-domain ENABLE word list, with the commands, their real output, and the moments where the answer changed as soon as the list did. There is a Python version for anyone who prefers it to a terminal, and the checksum we publish so that anyone can confirm they are counting the same file we are.

Get a list you can count

Most word-count claims never name a list, which is the first thing to fix. A dictionary has headwords (walk), a spell-checker has roots plus rules for making walks, walked and walking, and a word-game list spells out every inflected form as its own line. The same question gives three different numbers on those three kinds of list, and none of them is wrong.

For checking, the ENABLE list is the easiest to work with: it is public domain, it is one plain text file with one lowercase word per line, and it is the base of many word games. Our own figures come from a 172,446-word list built from ENABLE with offensive words removed, which how we check words describes in full; it has no capitalised words, nothing under three letters, and both British and American spellings where ENABLE has them. Two public copies of ENABLE were fetched for this article: the file enable1.txt in the dolph/dictionary repository on GitHub (download link: raw enable1.txt) and the copy on Peter Norvig’s site. If either link stops working, search for the file name enable1.txt; a genuine copy has aa as its first line, zyzzyvas as its last, and about 172,800 lines.

Save the file, open a terminal in the same folder (Terminal on a Mac, any Linux shell, or Git Bash or WSL on Windows, all free) and count the lines. This is the output we got, unedited:

$ wc -l enable1.txt
172823 enable1.txt
$ head -3 enable1.txt
aa
aah
aahed
$ tail -3 enable1.txt
zymurgy
zyzzyva
zyzzyvas

The first surprise arrived before any claim had been checked. The README of that same repository says the file has 172,819 lines, and Norvig’s copy has 172,820 words. The difference is three words, knickknack, razzmatazz and razzmatazzes, present in the GitHub copy and missing from the other, plus a final line break (the diff command showed all four differences in one screen). Neither copy is wrong; they are different versions of the same list. The lesson applies to every claim on this page: quote the count from the file in front of you, and say which file it was.

Claim: “Only 40 words have no vowels”

Versions of this claim give anything from a dozen to a few hundred words, and all of them can be right, because “no vowels” hides two decisions. Does Y count as a vowel? Do two-letter words count? The command below finds every line with none of A, E, I, O or U (grep -v means “lines that do not match”, and -c counts them):

$ grep -vc "[aeiou]" enable1.txt
121
$ grep -v "[aeiou]" enable1.txt | awk 'length >= 3' | wc -l
116
$ grep -v "[aeiouy]" enable1.txt
brr brrr crwth crwths cwm cwms hm hmm mm nth pfft phpht pht psst sh shh tsk tsks tsktsk tsktsks

So the honest statement is: in ENABLE, 121 entries contain none of A, E, I, O or U; 116 of them have three or more letters; and only 20 (17 of three letters or more) avoid Y as well. The 17 longer ones are the sounds and borrowings people usually have in mind:

brr brrr crwth crwths cwm cwms hmm nth pfft phpht pht psst shh tsk tsks tsktsk tsktsks

On our own list the first figure is 114 rather than 116, because two of the no-vowel entries are on the offensive-word blocklist. The complete list, sorted by length, is in words with no vowels. When you see “40 words with no vowels”, the number is probably a count of the everyday ones (gym, myth, rhythm, lynx) from a smaller list, with Y allowed. It is not a fact about English; it is a fact about a list and a definition.

Claim: “The longest word without an E is…”

This one is a good demonstration of how much the list matters, because the answer changed three times in ten minutes. On ENABLE, listing the E-free words by length gives a three-way tie at 22 letters:

$ grep -v "e" enable1.txt | awk '{ print length, $0 }' | sort -rn | head -5
22 otorhinolaryngologists
22 otorhinolaryngological
22 constitutionalizations
21 psychophysiologically
21 psychopharmacologists

Then the same question was put to two other lists that happen to be installed on most computers. The root list of the hunspell spell-checker (the engine inside LibreOffice and Firefox) contains floccinaucinihilipilification, 29 letters and not an E in sight; ENABLE does not have it at all, because ENABLE stops at 28 letters. The aspell spell-checker’s list tops out at institutionalization, 20 letters. Three lists, three “longest words without an E”. Any article that names one without naming its list has told you nothing you can check.

Claim: “There are three words ending in -gry”

An old riddle asks for a third English word ending in -gry besides angry and hungry. The search takes one line, with $ meaning “at the end of the line”:

$ grep "gry$" enable1.txt
angry
hungry
puggry

ENABLE’s third word is puggry, which Wiktionary defines as a strip of cloth wound round a hat or pith helmet to shade the neck, borrowed from Hindi. The spell-checker lists know only angry and hungry. Candidates that circulate as answers to the riddle, such as aggry, meagry and iggry, are in none of the three lists we checked, which does not make them fake, only unverifiable here. A claim of “exactly three” is therefore true of ENABLE and false of the spell-checkers, and the riddle’s usual answer (“there is no third common word”) survives either way.

Claim: “English has 171,476 words”

This figure is repeated on thousands of pages, almost always attributed to a printed edition of the Oxford English Dictionary. We could not confirm it: the OED’s own dictionary facts page, fetched for this article, describes coverage of “over 500,000 words and phrases” and does not give the smaller number. Whatever its origin, a figure like it is a count of headwords in one dictionary edition, so it cannot be compared with a game list that counts every inflection. ENABLE holds aah, aahed, aahing and aahs as four lines; a dictionary would file them under one.

The table shows the three lists used on this page answering the same questions. All figures were produced by the scripts named at the end, and the aspell and hunspell lists were reduced to lowercase a-to-z entries first (aspell’s full list has 123,693 lines, of which 21,521 contain a capital letter and 34,140 an apostrophe).

Question ENABLE (GitHub copy) aspell en_US hunspell en_US roots
Entries counted 172,823 77,978 61,961
No A, E, I, O or U, three or more letters 116 142 (mostly abbreviations such as blvd and tbsp) 168 (same reason)
Words ending in -gry 3 2 2
A, E, I, O, U once each, in order 6 4 3
Longest word without an E 22 letters (three words) institutionalization (20) floccinaucinihilipilification (29)
Contains “colour” present absent absent
The same five questions on three lists. The spell-checker lists count abbreviations as words, which inflates the no-vowel figure; ENABLE counts inflections, which inflates the total.

Notice the “no vowels” row. The spell-checker lists appear to have more vowel-free words than ENABLE, but their extras are blvd, tbsp, mph and the like, which a spell-checker must accept and a word game must not. A count is only as meaningful as the list’s rules for what gets in.

The count we published wrongly

We have made this mistake ourselves, which is why the rest of this page exists. Our page on no-vowel words originally said that four words contain A, E, I, O and U exactly once each and in alphabetical order. The check is one search: a pattern that allows consonants anywhere but forces the five vowels to appear once, in order.

$ grep "^[^aeiou]*a[^aeiou]*e[^aeiou]*i[^aeiou]*o[^aeiou]*u[^aeiou]*$" enable1.txt
abstemious
abstemiously
abstentious
arsenious
facetious
facetiously

Six, not four: the adverbs abstemiously and facetiously had been overlooked. Earlier still, several of our figures had been counted on the full source list rather than on the words the game actually accepts, so they included entries the blocklist refuses. Both errors are recorded on our corrections page, and both had the same cause: a number typed from memory or from an earlier draft instead of from a fresh run. The fix was procedural rather than clever. Every figure now comes from a script run on the exact file the game loads, and the file is identified by a fingerprint so that a reader can tell whether their copy matches ours. Related counts, such as the words containing all five vowels (2,462 in ENABLE, 2,460 on our list) and our count of which letters start the most words, were recomputed the same way.

Publishing a count someone else can check

A checksum is a short code computed from every byte of a file. Change one letter, add a blank line, or save the file with different line endings, and the code changes completely. Two people who get the same checksum have the same file, so a count quoted with a checksum can be reproduced exactly. The command exists on every Mac and Linux machine (sha256sum, or shasum -a 256 on macOS), and Windows has certutil -hashfile enable1.txt SHA256 according to Microsoft’s documentation, which we could not run here.

$ sha256sum enable1.txt
3f16130220645692ed49c7134e24a18504c2ca55b3c012f7290e3e77c63b1a89  enable1.txt
$ sha256sum enable1_norvig.txt
61ba1392a5b6199dd161fae7b483cd262fb8a88c0d49bd2c9ecb6753e755697f  enable1_norvig.txt

Those two codes differ because the files differ by three words and a line break, which is exactly what a checksum is for. For our own list we publish the code of the playable words sorted alphabetically and joined with single line breaks, with no line break after the last word:

Our fingerprint. 172,446 playable words; SHA-256 203ad9dc0c236003d9176f037e9922719b3e445673b4c714d4142a24232f2254. Any count on this site can be reproduced on a file with that code. The same words with one trailing line break give 63eaf1cb3f1a680fbc6263c8089c5d3726962479b6112c70e044ef40127418ab, so if your code differs, check the end of the file before anything else.

When you publish a figure of your own, the form that survives scrutiny is: “In list X (N entries, SHA-256 …), M words …”. For the claim at the top of this page that would read: “In ENABLE as published in the dolph/dictionary repository (172,823 entries, SHA-256 3f1613…), 116 words of three or more letters contain none of A, E, I, O or U, and 17 of those contain no Y either.” Long, but every part of it can be checked by a stranger in under a minute.

The same checks in Python or a spreadsheet

If you have Python installed (free from python.org), save this as check.py in the folder with the word list and run python3 check.py. It reproduces every figure above; the output shown is what it printed here.

import re, hashlib

words = [w.strip() for w in open("enable1.txt") if w.strip()]
print("lines:", len(words))
no_vowel = [w for w in words if not re.search("[aeiou]", w) and len(w) >= 3]
print("no A/E/I/O/U, 3+ letters:", len(no_vowel))
print("longest without E:", max((w for w in words if "e" not in w), key=len))
print("ending in -gry:", [w for w in words if w.endswith("gry")])
print("A E I O U once each, in order:",
      [w for w in words if re.sub("[^aeiou]", "", w) == "aeiou"])
print("sha256 of the file:", hashlib.sha256(open("enable1.txt", "rb").read()).hexdigest())
lines: 172823
no A/E/I/O/U, 3+ letters: 116
longest without E: constitutionalizations
ending in -gry: ['angry', 'hungry', 'puggry']
A E I O U once each, in order: ['abstemious', 'abstemiously', 'abstentious', 'arsenious', 'facetious', 'facetiously']
sha256 of the file: 3f16130220645692ed49c7134e24a18504c2ca55b3c012f7290e3e77c63b1a89

Note that max returns only the first of the three 22-letter words; the terminal version above lists all three, and a claim of “the longest” should always be checked for ties. In a spreadsheet, open the text file so that each word sits in its own row of column A, then count with a pattern in a second column. Google Sheets provides REGEXMATCH, documented on its help page: =REGEXMATCH(A1, "^[^aeiou]+$") gives TRUE for a no-vowel word, and =COUNTIF(B:B, TRUE) totals the column. We did not run the spreadsheet route ourselves, so treat the formulas as taken from the documentation and check one known word (rhythm should be TRUE, angry FALSE) before trusting the total.

Questions that come up

Is Y a vowel or not?

Both answers are defensible, so give both counts. In ENABLE the no-vowel count is 116 with Y allowed and 17 without it (three letters or more). A claim that gives one number without saying which rule it used cannot be checked, and a claim that gives a number between the two has probably mixed definitions.

Do plurals and verb forms count as separate words?

On a game list, yes; in a dictionary, usually no. That single difference accounts for most of the gap between a 172,000-entry list and a 60,000-root spell-checker, and it is why “how many words are there” has no single answer. Say “entries” when you mean lines in a list and “headwords” when you mean dictionary entries, and the confusion goes away.

Why does the count on this site differ slightly from ENABLE?

Three reasons, each small. Our list starts at three letters, so ENABLE’s 96 two-letter words are absent. It removes 281 offensive spellings through a blocklist. And it is built from a particular copy of ENABLE (the 172,727 entries of three letters or more), so it will not match a copy that has since gained or lost a word. The playable list behind every figure here, including the ones a player types into the game, is identified by the fingerprint above.

Two lists disagree; which is right?

Neither, until you know what each list is for. A spell-checker wants to accept abbreviations and proper nouns; a game list wants to refuse them; a dictionary wants one entry per word family. The productive question is not “which count is true” but “which list was this claim about”, and the answer is often that the claim was about no list at all.

Where are the scripts?

Every figure on this page came from four short scripts run on 14 September 2026: a Python script that computed the counts on both ENABLE copies and on our playable list, a shell script containing exactly the grep lines shown, a comparison script for the aspell and hunspell lists, and the ten-line check.py above. Their raw output was pasted here without editing, which is the only kind of first-hand check worth publishing.

New to The Verbarium? Follow the reading path, with tools and printables

Leave a Reply

Your email address will not be published. Required fields are marked *