FleschKincaidCalculator.java

package com.kapil.verbametrics.services.calculators;

import com.kapil.verbametrics.config.ReadabilityAnalysisProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * Calculator for Flesch-Kincaid Grade Level.
 * Handles the logic for calculating Flesch-Kincaid readability scores.
 *
 * @author Kapil Garg
 */
@Component
public class FleschKincaidCalculator {

    private final ReadabilityAnalysisProperties properties;

    @Autowired
    public FleschKincaidCalculator(ReadabilityAnalysisProperties properties) {
        this.properties = properties;
    }

    /**
     * Calculates the Flesch-Kincaid Grade Level.
     * Uses configurable coefficients from properties.
     *
     * @param averageSentenceLength   the average sentence length
     * @param averageSyllablesPerWord the average syllables per word
     * @return the Flesch-Kincaid score
     */
    public double calculateScore(double averageSentenceLength, double averageSyllablesPerWord) {
        return properties.getFleschKincaid().getSentenceLengthMultiplier() * averageSentenceLength +
                properties.getFleschKincaid().getSyllablesPerWordMultiplier() * averageSyllablesPerWord +
                properties.getFleschKincaid().getConstant();
    }

}