ReadingLevelClassifier.java

package com.kapil.verbametrics.services.classifiers;

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

/**
 * Classifier for reading level based on Flesch-Kincaid score.
 * Handles the logic for determining reading levels from scores.
 *
 * @author Kapil Garg
 */
@Component
public class ReadingLevelClassifier {

    private final ReadabilityAnalysisProperties properties;

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

    /**
     * Determines the reading level based on Flesch-Kincaid score.
     * Uses configurable thresholds from properties.
     *
     * @param fleschKincaidScore the Flesch-Kincaid score
     * @return the reading level
     */
    public String determineReadingLevel(double fleschKincaidScore) {
        if (fleschKincaidScore <= properties.getReadingLevels().getElementary()) {
            return VerbaMetricsConstants.K_ELEMENTARY;
        } else if (fleschKincaidScore <= properties.getReadingLevels().getMiddleSchool()) {
            return VerbaMetricsConstants.K_MIDDLE_SCHOOL;
        } else if (fleschKincaidScore <= properties.getReadingLevels().getHighSchool()) {
            return VerbaMetricsConstants.K_HIGH_SCHOOL;
        } else if (fleschKincaidScore <= properties.getReadingLevels().getCollege()) {
            return VerbaMetricsConstants.K_COLLEGE;
        } else {
            return VerbaMetricsConstants.K_GRADUATE;
        }
    }

}