retext plugin to check readability.
This package is a unified (retext) plugin to check readability: whether your presumed target audience can read your prose. It applies Dale—Chall, Automated Readability, Coleman-Liau, Flesch, Gunning-Fog, SMOG, and Spache.
You can use this plugin when you’re dealing with content that might be difficult to read to some folks, and have authors that can fix that content.
💡 Tip: I also made an online, editable, demo, similar to this project:
wooorm.com/readability
.
This package is ESM only. In Node.js (version 16+), install with npm:
npm install retext-readability
In Deno with esm.sh
:
import retextReadability from 'https://esm.sh/retext-readability@8'
In browsers with esm.sh
:
<script type="module">
import retextReadability from 'https://esm.sh/retext-readability@8?bundle'
</script>
Say our document example.txt
contains:
The cat sat on the mat
The constellation also contains an isolated neutron
star—Calvera—and H1504+65, the hottest white dwarf yet
discovered, with a surface temperature of 200,000 kelvin
…and our module example.js
contains:
import retextEnglish from 'retext-english'
import retextReadability from 'retext-readability'
import retextStringify from 'retext-stringify'
import {read} from 'to-vfile'
import {unified} from 'unified'
import {reporter} from 'vfile-reporter'
const file = await unified()
.use(retextEnglish)
.use(retextReadability)
.use(retextStringify)
.process(await read('example.txt'))
console.error(reporter(file))
…then running node example.js
yields:
example.txt
3:1-5:57 warning Unexpected hard to read sentence, according to 4 out of 7 algorithms readability retext-readability
⚠ 1 warning
The default target age is 16
.
You can pass something else, such as 6
:
.use(retextEnglish)
- .use(retextReadability)
+ .use(retextReadability, {age: 6})
.use(retextStringify)
…then running node example.js
again yields:
example.txt
1:1-1:23 warning Unexpected hard to read sentence, according to 4 out of 7 algorithms readability retext-readability
3:1-5:57 warning Unexpected hard to read sentence, according to all 7 algorithms readability retext-readability
⚠ 2 warnings
This package exports no identifiers.
The default export is retextReadability
.
unified().use(retextReadability[, options])
Check hard to read sentences.
options
(Options
, optional)
— configurationTransform (Transformer
).
Options
Configuration (TypeScript type).
age
(number
, default: 16
)
— target age groupminWords
(number
, default: 5
)
— check sentences with at least this number of words;
most algos are made to detect the reading level on an entire text;
this plugin checks each sentence on its own;
for short sentences, one long or complex word can strongly skew the
resultsthreshold
(number
, default: 4 / 7
)
— number of algos (out of 7) that need to agree something is hard to readEach message is emitted as a VFileMessage
, with source
set
to 'retext-readability'
, ruleId
to 'readability'
, actual
to the
difficult sentence, and expected
to an empty array.
This package is fully typed with TypeScript.
It exports the additional type Options
.
Projects maintained by the unified collective are compatible with maintained versions of Node.js.
When we cut a new major release, we drop support for unmaintained versions of
Node.
This means we try to keep the current release line, retext-readability@^8
,
compatible with Node.js 16.
retext-syntax-mentions
— classify @mentions as syntaxretext-syntax-urls
— classify URLs and filepaths as syntaxretext-simplify
— check phrases for simpler alternativesSee contributing.md
in retextjs/.github
for ways
to get started.
See support.md
for ways to get help.
This project has a code of conduct. By interacting with this repository, organization, or community you agree to abide by its terms.