retext-readability
retext plugin to check readability.
Contents
What is this?
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.
When should I use this?
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
.
Install
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>
Use
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
API
This package exports no identifiers. The default export is retextReadability
.
unified().use(retextReadability[, options])
Check hard to read sentences.
Parameters
options
(Options
, optional) — configuration
Returns
Transform (Transformer
).
Options
Configuration (TypeScript type).
Fields
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 read
Messages
Each 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.
Types
This package is fully typed with TypeScript. It exports the additional type Options
.
Compatibility
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.
Related
retext-syntax-mentions
— classify @mentions as syntaxretext-syntax-urls
— classify URLs and filepaths as syntaxretext-simplify
— check phrases for simpler alternatives
Contribute
See 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.