private void executeReadabilityCheck()

in core/src/main/java/org/apache/sling/cms/core/insights/impl/providers/ReadabilityInsightProvider.java [113:161]


    private void executeReadabilityCheck(Insight insight, PageInsightRequest pageRequest, String text, Site site,
            ReadabilitySiteConfig config, I18NDictionary dictionary) {
        ReadabilityService svc = factory.getReadabilityService(site.getLocale());

        double score = svc.calculateAverageGradeLevel(text);
        String scoreStr = new DecimalFormat("##0.00").format(score);

        insight.setScored(true);

        log.debug("Calculating readability of page {}", pageRequest.getPage());

        if (score > config.getMaxGradeLevel() || score < config.getMinGradeLevel()) {
            log.debug("Retrieved out of bounds readability {} based on range {}-{}", score,
                    config.getMinGradeLevel(), config.getMaxGradeLevel());

            StandardDeviation sd = new StandardDeviation(false);
            double stddev = sd.evaluate(new double[] { config.getMinGradeLevel(), config.getMaxGradeLevel() });
            double dev;
            if (score > config.getMaxGradeLevel()) {
                dev = score - config.getMaxGradeLevel();
            } else {
                dev = config.getMinGradeLevel() - score;
            }
            double calcScore = 1 - (dev / stddev) * .5;
            if (calcScore > 0) {
                insight.setScore(calcScore);
            } else {
                insight.setScore(0.0);
            }
            insight.setPrimaryMessage(Message.warn(dictionary.get(I18N_KEY_READABILITY_RESULT_WARN,
                    new Object[] { config.getMinGradeLevel(), config.getMaxGradeLevel(), scoreStr })));
        } else {
            log.debug("Retrieved in bounds readability {} based on range {}-{}", score, config.getMinGradeLevel(),
                    config.getMaxGradeLevel());
            insight.setScore(1.0);
            insight.setPrimaryMessage(Message.success(dictionary.get(I18N_KEY_READABILITY_RESULT_SUCCESS,
                    new Object[] { config.getMinGradeLevel(), config.getMaxGradeLevel(), scoreStr })));
        }
        Text t = svc.extractSentences(text);

        insight.getScoreDetails().add(Message.defaultMsg(dictionary.get(I18N_KEY_READABILITY_STATS,
                new Object[] { t.getSentences().size(), t.getWordCount(), t.getComplexWordCount() })));
        addDetail(insight, svc.calculateARI(t), "ARI");
        addDetail(insight, svc.calculateColemanLiauIndex(t), "Coleman-Liau Index");
        addDetail(insight, svc.calculateFleschKincaidGradeLevel(t), "Flesch-Kincaid Grade Level");
        addDetail(insight, svc.calculateFleschReadingEase(t), "Flesch-Kincaid Reading Ease");
        addDetail(insight, svc.calculateGunningFog(t), "Gunning Fog");
        addDetail(insight, svc.calculateSMOG(t), "SMOG");
    }