ReadabilityAnalysisProperties.java

package com.kapil.verbametrics.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * Configuration properties for readability analysis.
 * Contains coefficients for Flesch-Kincaid and Flesch Reading Ease for reading and complexity levels.
 *
 * @author Kapil Garg
 */
@Data
@Configuration
@ConfigurationProperties(prefix = "readability.analysis")
public class ReadabilityAnalysisProperties {

    /**
     * Reading level thresholds
     */
    private ReadingLevels readingLevels = new ReadingLevels();

    /**
     * Flesch-Kincaid formula coefficients
     */
    private FleschKincaid fleschKincaid = new FleschKincaid();

    /**
     * Complexity level thresholds
     */
    private ComplexityLevels complexityLevels = new ComplexityLevels();

    /**
     * Flesch Reading Ease formula coefficients
     */
    private FleschReadingEase fleschReadingEase = new FleschReadingEase();

    @Data
    public static class ReadingLevels {
        private double elementary = 6.0;
        private double middleSchool = 9.0;
        private double highSchool = 12.0;
        private double college = 16.0;
    }

    @Data
    public static class FleschKincaid {
        private double sentenceLengthMultiplier = 0.39;
        private double syllablesPerWordMultiplier = 11.8;
        private double constant = -15.59;
    }

    @Data
    public static class ComplexityLevels {
        private double veryEasy = 80.0;
        private double easy = 60.0;
        private double moderate = 40.0;
        private double difficult = 20.0;
    }

    @Data
    public static class FleschReadingEase {
        private double constant = 206.835;
        private double sentenceLengthMultiplier = 1.015;
        private double syllablesPerWordMultiplier = 84.6;
    }

}