Spache Readability Formula
George Spache developed this formula in 1953 specifically for primary-grade reading materials, filling a gap in readability research: no existing formula was calibrated for texts intended for beginning readers in grades 1–3.
At a Glance
Section titled “At a Glance”| Output | US grade level (grades 1–3 only) |
| Best for | Children’s books, early reader texts, primary-grade instructional materials |
| Method | r.spache() |
| What it counts | Unique unfamiliar words (not on the word list), words per sentence |
| Minimum text | 100 words (default) |
When to Use This Metric
Section titled “When to Use This Metric”- You are assessing children’s books, leveled readers, or early literacy materials for grades 1–3. Spache is purpose-built for this range and more accurate here than any formula calibrated on older readers.
- You are evaluating classroom reading materials for kindergarten through grade 3, where matching text complexity to developing reader ability is a deliberate instructional goal.
- You want to check whether a children’s health or safety document is appropriate for early readers.
- You are using Spache alongside Dale-Chall to assess text at the grade 4 boundary. At that level, running both gives you a fuller picture.
How It Works
Section titled “How It Works”Spache checks each word against a list of words familiar to primary-grade readers. Words not on the list count as “difficult” — but with one key difference from Dale-Chall: Spache counts each unique unfamiliar word once, regardless of how many times it appears in the text. The formula then combines the percentage of unique difficult words with average sentence length.
grade_level = 0.141 × (words / sentences) + 0.086 × (unique_difficult_words / total_words × 100) + 0.839These are the coefficients from Spache’s 1953 original formula, which this library implements.
Unique-word counting
Section titled “Unique-word counting”This counting method differs meaningfully from Dale-Chall. If a text uses the word “photosynthesis” twenty times, Spache counts it as one difficult word. Dale-Chall would count all twenty occurrences. Spache’s approach is more forgiving of texts that use a small set of unfamiliar words repeatedly — which is common in primary-grade instructional materials where controlled vocabulary repetition is a deliberate teaching strategy.
The word list
Section titled “The word list”The Spache word list contains approximately 925 words familiar to primary-grade readers —
basic action verbs, common nouns for everyday objects, family members, animals, and
function words. Words on the list in their base form are also familiar in regular inflected
forms: -ing, -ed, -es, -ly, -er, -est. Irregular forms are treated as difficult
unless they independently appear on the list. First names are treated as familiar.
Score Interpretation
Section titled “Score Interpretation”Spache returns a grade level directly as a rounded number. The formula’s reliable range is grades 1 through 3. Scores above 3 are outside that range.
| Spache Score | Grade Level | What This Means |
|---|---|---|
| ~1.0–1.9 | Grade 1 | Early first-grade readers |
| ~2.0–2.9 | Grade 2 | Second-grade readers |
| ~3.0–3.9 | Grade 3 | Third-grade readers |
| 4.0 and above | Outside valid range | Use Dale-Chall for this text |
If you receive a score of 4 or above, treat it as a signal that the text is too complex for the formula’s intended population — not as a meaningful grade estimate. Run Dale-Chall instead.
Return Values
Section titled “Return Values”r.spache() returns a SpacheResult object:
| Field | Type | Description |
|---|---|---|
score | float | Raw Spache score (grade level as a float) |
grade_levels | list[str] | Grade level rounded to nearest integer, e.g. ["2"] |
grade_level | str | First item in grade_levels |
Minimum Requirements
Section titled “Minimum Requirements”The library defaults to a 100-word minimum. Passing fewer words raises a ValueError.
You can lower this threshold with Readability(text, min_words=50), but scores from
short texts are less reliable — and this is especially true for Spache, where the
word list is small (~925 words) and a single unfamiliar word has more impact on
the score.
Limitations
Section titled “Limitations”-
Only valid for grades 1–3. This is the most important thing to understand about Spache. The formula will compute a number for any text, but that number is not a meaningful grade estimate outside the calibrated range. Applying Spache to adult text or middle-grade literature produces a technically computed result that is practically meaningless.
-
The word list reflects 1950s–1970s American children’s vocabulary. The list was constructed from primary-grade reading materials of that era. Contemporary words that children now recognize — “tablet,” “video,” “app,” “emoji” — are absent. Words that were common then but are less familiar today — “harness,” “sled,” “rye” — remain on the list. Scores on texts that use contemporary children’s vocabulary may be higher than the actual difficulty warrants.
-
Unique-word counting can underestimate density. A text could use one specialized term dozens of times and Spache would count it as a single difficult word. This is appropriate for controlled-vocabulary instructional materials, but can mislead when applied to other text types.
-
Syntactic complexity is not captured. The formula measures sentence length and word familiarity, not grammatical structure. A short sentence with a subordinate clause or pronoun reference may be harder to parse than its length suggests, and Spache will not detect this.
Example
Section titled “Example”from readscore import Readability
text = """Ben has a dog named Spot. Spot is brown and white. Ben and Spot play in the yardevery day after school. Ben throws a ball and Spot runs to get it. Spot brings theball back and drops it at Ben's feet. Then Ben throws it again. They play this gamefor a long time. When they are tired, they sit under the big tree in the yard. Spotputs his head on Ben's lap. Ben pets Spot softly. They are best friends. Ben's momcalls them in for dinner. Spot wags his tail and runs to the door."""
r = Readability(text)result = r.spache()
print(f"Score: {result.score:.2f}") # Score: ~1.84print(f"Grades: {result.grade_levels}") # ['2']print(f"Primary grade: {result.grade_level}") # '2'This text is within Spache’s valid range. A score of ~1.84 rounds to grade 2, consistent with a text for second-grade readers.
See Also
Section titled “See Also”- Dale-Chall Readability Formula — same word-list approach, designed for grade 4 and above
- Choosing a Metric — decision guide for all nine metrics, including the Spache/Dale-Chall handoff at grade 4