@technobuddha/library
Version: 
A large library of useful functions
35 lines • 3.27 kB
JavaScript
import { splitSentences } from "./split-sentences.js";
import { splitWords } from "./split-words.js";
import { syllables } from "./syllables.js";
/**
 * Calculates the Flesch-Kincaid readability score for a given text.
 *
 * The Flesch-Kincaid readability score estimates how easy a text is to read,
 * with higher scores indicating easier readability. The formula considers the
 * average number of words per sentence and the average number of syllables per word.
 *
 * | Score        | School Level       | Notes                                                                    |
 * | ------------ | ------------------ | ------------------------------------------------------------------------ |
 * | 100.00–90.00 | 5ᵗʰ grade          | Very easy to read. Easily understood by an average 11-year-old student.  |
 * | 90.0–80.0	  | 6ᵗʰ grade	         | Easy to read. Conversational English for consumers.                      |
 * | 80.0–70.0	  | 7ᵗʰ grade	         | Fairly easy to read.                                                     |
 * | 70.0–60.0	  | 8ᵗʰ & 9ᵗʰ grade	   | Plain English. Easily understood by 13-15 year-old students.             |
 * | 60.0–50.0	  | 10ᵗʰ to 12ᵗʰ grade | Fairly difficult to read.                                                |
 * | 50.0–30.0    | College            | Difficult to read.                                                       |
 * | 30.0–10.0    | College graduate   | Very difficult to read. Best understood by university graduates.         |
 * | 10.0–0.0     | Professional       | Extremely difficult to read. Best understood by university graduates.    |
 * @param text - The input text to analyze.
 * @returns The Flesch-Kincaid readability score as a number.
 * @see https://en.wikipedia.org/wiki/Flesch%E2%80%93Kincaid_readability_tests
 * @group String
 * @category Analysis
 */
export function readability(text) {
    const words = splitWords(text);
    const sentences = splitSentences(text);
    const totalSyllables = words.reduce((acc, value) => acc + syllables(value), 0);
    const numWords = words.length;
    const numSentences = sentences.length;
    return 206.835 - 1.015 * (numWords / numSentences) - 84.6 * (totalSyllables / numWords);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZGFiaWxpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmVhZGFiaWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQVk7SUFDdEMsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUUvRSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzlCLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFFdEMsT0FBTyxPQUFPLEdBQUcsS0FBSyxHQUFHLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsQ0FBQztBQUMxRixDQUFDIn0=