Op-Ed Insight

Methodology and tests

Every number on this site comes from three small JavaScript files that run in your browser. The build runs the same files through a test suite each week; this page shows the results of the latest run (2026-11-01).

Summary

Syllable counter, hand-checked list346/354 (97.7%)Rules alone: 93.2%
Readability references7/7 passPublished worked examples and a published score
Counter edge cases33/33 passEmoji, CJK, hyphens, numbers, abbreviations
X and SMS counts21/21 passtwitter-text v3 weights, GSM-7 and UCS-2
Passive-voice finderprecision 96.6%, recall 90.3%61 labelled sentences
Words-per-page model1.75% mean errorAgainst LibreOffice Writer, 30 layouts

Words, characters, sentences, paragraphs

Edge cases

TextExpectedGotNote
Hello, world.words 2, chars 13, sentences 1words 2, chars 13, sentences 1pass
Don't stop.words 2, chars 11words 2, chars 11passcontraction = 1 word
A well-known e-mail.words 3words 3passhyphenated words = 1 word
self‐awarewords 1words 1passUnicode hyphen U+2010
pre- and post-warwords 3words 3pass
It costs $3.50, or 1,000 yen.words 6words 6pass3.50 and 1,000 are one word each
Meet at 10:30 today.words 4words 4pass
The U.S. Army arrived. Dr. Smith left.words 7, sentences 2words 7, sentences 2passinitialisms and Dr. do not end sentences
J. R. R. Tolkien wrote books.words 6, sentences 1words 6, sentences 1passinitials
Use a pen, e.g. a quill, i.e. a feather.words 9, sentences 1words 9, sentences 1pass
Wait... what? Yes!words 3, sentences 2words 3, sentences 2passellipsis before lowercase continues
She said, "Stop." Then she left.words 6, sentences 2words 6, sentences 2passclosing quote after the full stop
It's 5 p.m. now.words 4, sentences 1words 4, sentences 1pass
and/orwords 2words 2passslash separates
plan—ifwords 2words 2passem dash separates
rock 'n' rollwords 3words 3pass
’90s musicwords 2words 2pass
I ❤️ 🍕words 1, chars 5words 1, chars 5passemoji are characters, not words
👨‍👩‍👧 familywords 1, chars 8words 1, chars 8passa family emoji (5 code points) is 1 character
🇫🇷 Francewords 1, chars 8words 1, chars 8passa flag (2 regional indicators) is 1 character
Press 1️⃣ nowwords 2words 2passkeycap emoji are not numbers
café naïve résuméwords 3, chars 17words 3, chars 17pass
caféwords 1, chars 4words 1, chars 4passdecomposed accent: e + combining acute = 1 character
私は学生です。words 6, chars 7, sentences 1words 6, chars 7, sentences 1passeach CJK character = 1 word
我爱北京。你好!words 6, sentences 2words 6, sentences 2pass
안녕하세요 세계words 2, chars 8words 2, chars 8passKorean uses spaces between words
Visit https://example.com/a-b?c=1 now.words 3words 3passa URL is 1 word
Email me@example.org todaywords 3words 3passan email address is 1 word
1. First item↵2. Second itemwords 6, sentences 2words 6, sentences 2passlist numbers do not end sentences
Introduction↵This is the text.sentences 2, paragraphs 2sentences 2, paragraphs 2passa heading line is its own sentence
One.↵↵Two.↵↵Three.sentences 3, paragraphs 3sentences 3, paragraphs 3pass
a line that wraps↵onto the next line.sentences 1sentences 1passa lowercase line start continues the sentence
The end.The start.words 4, sentences 1words 4, sentences 1passno space after the full stop: read as one sentence

Syllables

Three of the six readability formulas need syllable counts, and no spelling rule gets English syllables right every time. Op-Ed Insight counts vowel groups, then applies about thirty spelling rules: silent final e (make, hope), sounded -le (table), silent and sounded -ed and -es (jumped, wanted; makes, boxes), vowel pairs that are usually two syllables (radio, actual, diet, idea), silent e before suffixes (lovely, statement), compounds (someone, therefore), and so on. A short exception list then fixes 462 frequent words where the rules disagree with the CMU Pronouncing Dictionary (words that appear at least 3 times among the 20,000 most frequent in 15 public-domain Project Gutenberg books).

Test. We wrote a list of 354 words with syllable counts checked by hand against standard American dictionary pronunciations, chosen to include the hard cases: silent letters, vowel pairs, -ed and -es endings, compounds, and words with two accepted pronunciations (for those, either count passes). This list is never used to build the exception list.

Words we still miss: Wednesday (3, should be 2), patio (2, should be 3), karate (2, should be 3), cafe (1, should be 2), acne (1, should be 2), simile (2, should be 3), hyperbole (3, should be 4), epitome (3, should be 4).

Readability formulas

W = words, S = sentences, Sy = syllables. Web addresses, email addresses and Chinese or Japanese characters count as words but are left out of the formulas, which were built for English. Numbers stay in, with syllables counted as spoken ("2026" as "twenty twenty-six").

Reference values

For each published example we check the formula against the source's own counts ("formula"), then run the whole pipeline on the text ("end to end") to see how much our counting changes the result.

ExampleCheckPublishedOp-Ed Insight
Wikipedia, Flesch–Kincaid readability tests (example sentence)Reading Ease, formula116116.15pass
Reading Ease, end to end116116.15pass
Wikipedia, Flesch–Kincaid readability tests
The source counts 24 syllables. Dictionaries give Aus-tra-lian (3) and rep-til-i-an (4), 25 in all; our counter finds 26. In a 13-word sentence each syllable moves Reading Ease by 6.5 points, so we report our end-to-end score but do not test it.
Reading Ease, formula37.537.46pass
Flesch–Kincaid, formula11.311.26pass
Reading Ease, end to end (not tested)37.524.44info
Flesch–Kincaid, end to end (not tested)11.313.08info
Wikipedia, Flesch–Kincaid readability tests
The source gives no counts. 16 words and 23 syllables reproduce 69.
Reading Ease, formula6968.98pass
Reading Ease, end to end6968.98pass
Wikipedia, Flesch–Kincaid readability tests (lowest possible grade; highest possible Reading Ease)Flesch–Kincaid, formula-3.4-3.4pass
Reading Ease, formula121.22121.22pass
Flesch–Kincaid, end to end-3.4-3.4pass
Reading Ease, end to end121.22121.22pass
Wikipedia, Coleman–Liau index (abstract of Coleman and Liau, 1975)
The source counts letters and digits (639) and 119 words.
Coleman–Liau, formula14.514.53pass
Coleman–Liau, end to end14.514.23pass
McLaughlin (1969), SMOG Grading, Journal of Reading 12(8), Table 1 equation (d)
g = 1.0430 × √95 + 3.1291 = 13.29; the paper's quick method (nearest perfect square, 100) gives 13.
SMOG, formula13.2913.3pass
Lit2Go (University of South Florida), The Gettysburg Address: Flesch–Kincaid 10.9
Lit2Go does not state its counter or counts; treated as a ballpark check (±0.6 grade).
Flesch–Kincaid, end to end10.910.96pass

No published worked example with counts was found for the Gunning Fog index or ARI; we check their arithmetic against the published coefficients only. Tolerances: formula checks to the published rounding; end-to-end checks ±0.6 grade or the stated tolerance.

Style highlights

Passive-voice test

61 sentences we labelled by hand: 28 passives found, 3 missed, 1 false alarm, 29 correctly left alone. Precision 96.6%, recall 90.3%.

SentencePassive?Flagged?Note
The vase was quickly and carefully wrapped.yesnomore words between the verb and the participle than the heuristic allows
The house, built in 1900, is still standing.yesnoreduced passive with no form of be
She had her bag stolen.yesnohave-passive
The door was closed when we arrived.nonoa state, not an action; the heuristic flags it
The lake was frozen solid.noyesadjectival participle: the heuristic flags it

Only the cases we get wrong are listed; the other 57 are right.

X (Twitter) and SMS counts

The X count follows the open-source twitter-text v3 configuration: weight 1 for code points in four ranges (U+0000–10FF, U+2000–200D, U+2010–201F, U+2032–2037), weight 2 for everything else, 2 for each emoji (including multi-part emoji), and 23 for each link. SMS uses the GSM 03.38 basic alphabet (1 unit each) and extension table (2 units: form feed, ^ { } \ [ ~ ] | €); any other character switches the message to UCS-2, counted in UTF-16 units. Single messages hold 160 GSM-7 or 70 UCS-2 units; split messages 153 or 67 per part.

InputExpectedGot
280 × “a” X 280280pass
281 × “a” X 281281pass
日本語 CJK characters weigh 2X 66pass
😀 X 22pass
👨‍👩‍👧 a ZWJ sequence counts as one emojiX 22pass
see https://example.com/very/long/path?with=query links count 23X 2727pass
café X 44pass
a—b em dash U+2014 is in a weight-1 rangeX 33pass
a… ellipsis U+2026 is outside the weight-1 rangesX 33pass
160 × “a” enc GSM-7 parts 1 enc GSM-7 parts 1 pass
161 × “a” enc GSM-7 parts 2 enc GSM-7 parts 2 pass
306 × “a” enc GSM-7 parts 2 enc GSM-7 parts 2 pass
307 × “a” enc GSM-7 parts 3 enc GSM-7 parts 3 pass
80 × “€” € is in the extension table: 2 septetsenc GSM-7 units 160 parts 1 enc GSM-7 units 160 parts 1 pass
Price: 5€ [ok] enc GSM-7 units 17 enc GSM-7 units 17 pass
Café à la carte enc GSM-7 enc GSM-7 pass
It’s here a curly apostrophe forces UCS-2enc UCS-2 enc UCS-2 pass
Hello 😀 enc UCS-2 units 8 parts 1 enc UCS-2 units 8 parts 1 pass
70 × “é” enc GSM-7 parts 1 enc GSM-7 parts 1 pass
70 × “ó” enc UCS-2 parts 1 enc UCS-2 parts 1 pass
71 × “ó” enc UCS-2 parts 2 enc UCS-2 parts 2 pass

Words per page

The words-per-page calculator lays text out line by line. It uses the advance width of every character in fonts that are metric-compatible with the common office fonts (Liberation Serif for Times New Roman, Liberation Sans for Arial, Carlito for Calibri, Caladea for Cambria, Liberation Mono for Courier New), breaks lines at spaces without hyphenation, and keeps at least two lines of a paragraph together at page breaks (widow and orphan control, on by default in Word and LibreOffice). Line height is the font's own single-spacing height, fitted to LibreOffice.

We generated 30 test documents (five fonts; 12 pt single, 12 pt double, 11 pt at 1.15 with 8 pt after; Letter and A4; 3,000 words of The Federalist No. 10) and laid them out in LibreOffice Writer. Our words per full page differ from Writer's by 1.75% on average and 5.1% at most (Courier New); the page count differed by one page in 3 of 30 documents. Microsoft Word's own layout can differ slightly from Writer's.

WordsTimes New Roman 12 pt
single
Times New Roman 12 pt
double
Arial 12 pt
single
Arial 12 pt
double
Calibri 11 pt
Word default (1.08, 8 pt after)
Calibri 12 pt
double
Courier New 12 pt
double
2500.30.70.40.70.40.71.1
5000.71.40.81.60.71.52.2
7501.12.21.22.41.12.33.3
1,0001.42.81.63.21.53.14.5
1,5002.14.32.44.72.24.66.6
2,0002.85.73.16.32.96.18.7
2,5003.47.23.97.93.77.610.9
3,0004.18.64.79.54.49.113.1
5,0006.914.47.815.97.315.221.7
Words per full page≈ 729≈ 350≈ 645≈ 318≈ 683≈ 330≈ 229

Pages of continuous essay prose (The Federalist No. 10, about 4.8 letters per word, 130-word paragraphs) on US Letter with 1-inch margins; double-spaced rows use a 0.5-inch first-line indent. Computed by our layout model, which matches LibreOffice Writer within 1.75% on average. Headings, lists and short paragraphs mean fewer words per page. A4 pages hold slightly more: try the words-per-page calculator.