+33
-20
@@ -1,33 +0,46 @@ | ||
| var sentenceWeight = 1.015 | ||
| var wordWeight = 84.6 | ||
| var base = 206.835 | ||
| /** | ||
| * @typedef {Object.<string, number>} FleschCounts | ||
| * @typedef Counts | ||
| * Counts from input document. | ||
| * @property {number} sentence | ||
| * Number of sentences. | ||
| * @property {number} word | ||
| * Number of words. | ||
| * @property {number} syllable | ||
| * Number of syllables. | ||
| */ | ||
| /** | ||
| * Given an object containing the number of words (`word`), the number of sentences (`sentence`), and the number of syllables (`syllable`) in a document, returns the reading ease associated with the document. | ||
| * @typedef {Counts} FleschCounts | ||
| * Deprecated: please use the `Counts` type instead. | ||
| */ | ||
| const sentenceWeight = 1.015 | ||
| const wordWeight = 84.6 | ||
| const base = 206.835 | ||
| /** | ||
| * Given an object containing the number of words (`word`), the number of | ||
| * sentences (`sentence`), and the number of syllables (`syllable`) in a | ||
| * document, returns the reading ease associated with the document. | ||
| * | ||
| * Returned values are 120 (every sentence consisting of only two one-syllable words), or lower (including negative values). | ||
| * @param {Counts} counts | ||
| * Counts from input document. | ||
| * @returns {number} | ||
| * Result is `120` (every sentence consisting of only two one-syllable words) | ||
| * or lower (including negative values). | ||
| * | ||
| * The values have the following semantics: | ||
| * The values have the following semantics: | ||
| * | ||
| * | Score | Semantics | | ||
| * | :----------: | :-------------------------------------------------- | | ||
| * | 90.0 – 100.0 | Easily understood by an average 11-year-old student | | ||
| * | 60.0 – 70.0 | Easily understood by 13- to 15-year-old students | | ||
| * | 0.0 – 30.0 | Best understood by university graduates | | ||
| * | Score | Semantics | | ||
| * | :----------: | :-------------------------------------------------- | | ||
| * | 90.0 – 100.0 | Easily understood by an average 11-year-old student | | ||
| * | 60.0 – 70.0 | Easily understood by 13- to 15-year-old students | | ||
| * | 0.0 – 30.0 | Best understood by university graduates | | ||
| * | ||
| * Therefore we can use the following formula to approximate the average age a student would understand a document at, given score `score`: | ||
| * Therefore we can use the following formula to approximate the average age | ||
| * a student would understand a document at, given score `score`: | ||
| * | ||
| * ```js | ||
| * var age = 20 - Math.floor(score / 10) | ||
| * ``` | ||
| * | ||
| * @param {FleschCounts} counts | ||
| * @returns {number} | ||
| * ```js | ||
| * const age = 20 - Math.floor(score / 10) | ||
| * ``` | ||
| */ | ||
@@ -34,0 +47,0 @@ export function flesch(counts) { |
+10
-16
| { | ||
| "name": "flesch", | ||
| "version": "2.0.0", | ||
| "version": "2.0.1", | ||
| "description": "Formula to detect the ease of reading a text according to Flesch Reading Ease (1975)", | ||
@@ -30,20 +30,18 @@ "license": "MIT", | ||
| "devDependencies": { | ||
| "@types/tape": "^4.0.0", | ||
| "@types/node": "^18.0.0", | ||
| "c8": "^7.0.0", | ||
| "prettier": "^2.0.0", | ||
| "remark-cli": "^9.0.0", | ||
| "remark-preset-wooorm": "^8.0.0", | ||
| "rimraf": "^3.0.0", | ||
| "tape": "^5.0.0", | ||
| "remark-cli": "^11.0.0", | ||
| "remark-preset-wooorm": "^9.0.0", | ||
| "type-coverage": "^2.0.0", | ||
| "typescript": "^4.0.0", | ||
| "xo": "^0.38.0" | ||
| "xo": "^0.52.0" | ||
| }, | ||
| "scripts": { | ||
| "prepack": "npm run build && npm run format", | ||
| "build": "rimraf \"*.d.ts\" && tsc && type-coverage", | ||
| "build": "tsc --build --clean && tsc --build && type-coverage", | ||
| "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", | ||
| "test-api": "node test.js", | ||
| "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov node test.js", | ||
| "test": "npm run format && npm run test-coverage" | ||
| "test-api": "node --conditions development test.js", | ||
| "test-coverage": "c8 --check-coverage --100 --reporter lcov npm run test-api", | ||
| "test": "npm run build && npm run format && npm run test-coverage" | ||
| }, | ||
@@ -59,7 +57,3 @@ "prettier": { | ||
| "xo": { | ||
| "prettier": true, | ||
| "rules": { | ||
| "no-var": "off", | ||
| "prefer-arrow-callback": "off" | ||
| } | ||
| "prettier": true | ||
| }, | ||
@@ -66,0 +60,0 @@ "remarkConfig": { |
+106
-21
@@ -11,11 +11,36 @@ # flesch | ||
| See [`syllable`][syllable] for detecting syllables. | ||
| ## Contents | ||
| * [What is this?](#what-is-this) | ||
| * [When should I use this?](#when-should-i-use-this) | ||
| * [Install](#install) | ||
| * [Use](#use) | ||
| * [API](#api) | ||
| * [`flesch(counts)`](#fleschcounts) | ||
| * [Types](#types) | ||
| * [Compatibility](#compatibility) | ||
| * [Related](#related) | ||
| * [Contribute](#contribute) | ||
| * [Security](#security) | ||
| * [License](#license) | ||
| ## What is this? | ||
| This package exposes an algorithm to detect ease of reading of English texts. | ||
| ## When should I use this? | ||
| You’re probably dealing with natural language, and know you need this, if | ||
| you’re here! | ||
| This algorithm is based on syllables, whereas some others are not, which means | ||
| it’s tougher to get right and slower to calculate. | ||
| See [syllable][] for detecting syllables. | ||
| ## Install | ||
| This package is ESM only: Node 12+ is needed to use it and it must be `import`ed | ||
| instead of `require`d. | ||
| This package is [ESM only][esm]. | ||
| In Node.js (version 14.14+, 16.0+), install with [npm][]: | ||
| [npm][]: | ||
| ```sh | ||
@@ -25,2 +50,16 @@ npm install flesch | ||
| In Deno with [`esm.sh`][esmsh]: | ||
| ```js | ||
| import {flesch} from 'https://esm.sh/flesch@2' | ||
| ``` | ||
| In browsers with [`esm.sh`][esmsh]: | ||
| ```html | ||
| <script type="module"> | ||
| import {flesch} from 'https://esm.sh/flesch@2?bundle' | ||
| </script> | ||
| ``` | ||
| ## Use | ||
@@ -32,7 +71,7 @@ | ||
| // For “The cat sat on the mat” (1 sentence, 6 words, 6 syllables). | ||
| flesch({sentence: 1, word: 6, syllable: 6}) // => 116.14500... | ||
| flesch({sentence: 1, word: 6, syllable: 6}) // => 116.14500… | ||
| // For “The Australian platypus is seemingly a hybrid of mammal and reptilian | ||
| // creature.” (1 sentence, 12 words, 23 syllables). | ||
| flesch({sentence: 1, word: 12, syllable: 23}) // => 32.50499... | ||
| flesch({sentence: 1, word: 12, syllable: 23}) // => 32.50499… | ||
| ``` | ||
@@ -42,3 +81,3 @@ | ||
| This package exports the following identifiers: `flesch`. | ||
| This package exports the identifier `flesch`. | ||
| There is no default export. | ||
@@ -48,9 +87,27 @@ | ||
| Given an object containing the number of words (`word`), the number of sentences | ||
| (`sentence`), and the number of syllables (`syllable`) in a document, returns | ||
| the reading ease associated with the document. | ||
| Given an object containing the number of words (`word`), the number of | ||
| sentences (`sentence`), and the number of syllables (`syllable`) in a | ||
| document, returns the reading ease associated with the document. | ||
| Returned values are 120 (every sentence consisting of only two one-syllable | ||
| words), or lower (including negative values). | ||
| ##### `counts` | ||
| Counts from input document. | ||
| ###### `counts.sentence` | ||
| Number of sentences (`number`, required). | ||
| ###### `counts.word` | ||
| Number of words (`number`, required). | ||
| ###### `counts.syllable` | ||
| Number of syllables (`number`, required). | ||
| ##### Returns | ||
| Result is `120` (every sentence consisting of only two one-syllable words) or | ||
| lower (including negative values). | ||
| The values have the following semantics: | ||
@@ -68,22 +125,42 @@ | ||
| ```js | ||
| var age = 20 - Math.floor(score / 10) | ||
| const age = 20 - Math.floor(score / 10) | ||
| ``` | ||
| ## Types | ||
| This package is fully typed with [TypeScript][]. | ||
| It exports the additional type `Counts`. | ||
| ## Compatibility | ||
| This package is at least compatible with all maintained versions of Node.js. | ||
| As of now, that is Node.js 14.14+ and 16.0+. | ||
| It also works in Deno and modern browsers. | ||
| ## Related | ||
| * [`automated-readability`](https://github.com/words/automated-readability) | ||
| — Uses character count instead of error-prone syllable parser | ||
| — uses character count instead of error-prone syllable parser | ||
| * [`coleman-liau`](https://github.com/words/coleman-liau) | ||
| — Uses letter count instead of an error-prone syllable parser | ||
| — uses letter count instead of an error-prone syllable parser | ||
| * [`dale-chall-formula`](https://github.com/words/dale-chall-formula) | ||
| — Uses a dictionary, suited for higher reading levels | ||
| — uses a dictionary, suited for higher reading levels | ||
| * [`flesch-kincaid`](https://github.com/words/flesch-kincaid) | ||
| — Like `flesch`, returns U.S. grade levels | ||
| — like `flesch`, returns U.S. grade levels | ||
| * [`gunning-fog`](https://github.com/words/gunning-fog) | ||
| — Uses syllable count, needs POS-tagging and NER | ||
| — uses syllable count, needs POS-tagging and NER | ||
| * [`smog-formula`](https://github.com/words/smog-formula) | ||
| — Like `gunning-fog-index`, without needing advanced NLP | ||
| — like `gunning-fog-index`, without needing advanced NLP | ||
| * [`spache-formula`](https://github.com/words/spache-formula) | ||
| — Uses a dictionary, suited for lower reading levels | ||
| — uses a dictionary, suited for lower reading levels | ||
| ## Contribute | ||
| Yes please! | ||
| See [How to Contribute to Open Source][contribute]. | ||
| ## Security | ||
| This package is safe. | ||
| ## License | ||
@@ -113,2 +190,10 @@ | ||
| [esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c | ||
| [esmsh]: https://esm.sh | ||
| [typescript]: https://www.typescriptlang.org | ||
| [contribute]: https://opensource.guide/how-to-contribute/ | ||
| [license]: license | ||
@@ -115,0 +200,0 @@ |
11197
20.02%8
-20%85
16.44%199
74.56%