mirror of
https://github.com/laosb/ReadabilityFramework.git
synced 2025-04-30 20:51:10 +00:00
fix: Publish functions.
This commit is contained in:
parent
73b8996beb
commit
4343848549
5 changed files with 25 additions and 19 deletions
|
@ -17,11 +17,11 @@ public enum RACommonMetric {
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct RACommonMetricsCalculator {
|
public struct RACommonMetricsCalculator {
|
||||||
typealias Results = [RACommonMetric: Double]
|
public typealias Results = [RACommonMetric: Double]
|
||||||
|
|
||||||
private var metrics: Set<RACommonMetric>
|
private var metrics: Set<RACommonMetric>
|
||||||
|
|
||||||
init(metrics: Set<RACommonMetric>) {
|
public init(metrics: Set<RACommonMetric>) {
|
||||||
self.metrics = metrics
|
self.metrics = metrics
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ public struct RACommonMetricsCalculator {
|
||||||
SyllableCounter.shared.count(word: word)
|
SyllableCounter.shared.count(word: word)
|
||||||
}
|
}
|
||||||
|
|
||||||
func calculate(on text: String) -> Results {
|
public func calculate(on text: String) -> Results {
|
||||||
let shouldDoSentences = metrics.contains(.sentenceCount) || metrics.contains(.avgWordsPerSentence)
|
let shouldDoSentences = metrics.contains(.sentenceCount) || metrics.contains(.avgWordsPerSentence)
|
||||||
let shouldDoWords = metrics.contains(.wordCount)
|
let shouldDoWords = metrics.contains(.wordCount)
|
||||||
|| metrics.contains(.avgWordsPerSentence)
|
|| metrics.contains(.avgWordsPerSentence)
|
||||||
|
|
|
@ -8,18 +8,20 @@
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
public struct RAFleschKincaidGradeScorer: RAScorer {
|
public struct RAFleschKincaidGradeScorer: RAScorer {
|
||||||
static let requiresCommonMetrics: Set<RACommonMetric>? = [
|
public static let requiresCommonMetrics: Set<RACommonMetric>? = [
|
||||||
.avgWordsPerSentence,
|
.avgWordsPerSentence,
|
||||||
.avgSyllablesPerWord
|
.avgSyllablesPerWord
|
||||||
]
|
]
|
||||||
|
|
||||||
static let meta = RAScorerMeta(
|
public static let meta = RAScorerMeta(
|
||||||
name: "Flesch-Kincaid Grade",
|
name: "Flesch-Kincaid Grade",
|
||||||
creator: "John P. Kincaid",
|
creator: "John P. Kincaid",
|
||||||
citation: "Kincaid, J. P., Fishburne Jr, R. P., Rogers, R. L., & Chissom, B. S. (1975). Derivation of new readability formulas (automated readability index, fog count and flesch reading ease formula) for navy enlisted personnel. Naval Technical Training Command Millington TN Research Branch."
|
citation: "Kincaid, J. P., Fishburne Jr, R. P., Rogers, R. L., & Chissom, B. S. (1975). Derivation of new readability formulas (automated readability index, fog count and flesch reading ease formula) for navy enlisted personnel. Naval Technical Training Command Millington TN Research Branch."
|
||||||
)
|
)
|
||||||
|
|
||||||
func score(_ text: String, metrics: RACommonMetricsCalculator.Results?) -> Double {
|
public init() {}
|
||||||
|
|
||||||
|
public func score(_ text: String, metrics: RACommonMetricsCalculator.Results?) -> Double {
|
||||||
let asl = metrics![.avgWordsPerSentence]!
|
let asl = metrics![.avgWordsPerSentence]!
|
||||||
let asw = metrics![.avgSyllablesPerWord]!
|
let asw = metrics![.avgSyllablesPerWord]!
|
||||||
|
|
||||||
|
|
|
@ -8,18 +8,20 @@
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
public struct RAFleschReadingEaseScorer: RAScorer {
|
public struct RAFleschReadingEaseScorer: RAScorer {
|
||||||
static let requiresCommonMetrics: Set<RACommonMetric>? = [
|
public static let requiresCommonMetrics: Set<RACommonMetric>? = [
|
||||||
.avgWordsPerSentence,
|
.avgWordsPerSentence,
|
||||||
.avgSyllablesPerWord
|
.avgSyllablesPerWord
|
||||||
]
|
]
|
||||||
|
|
||||||
static let meta = RAScorerMeta(
|
public static let meta = RAScorerMeta(
|
||||||
name: "Flesch Reading Ease",
|
name: "Flesch Reading Ease",
|
||||||
creator: "Rudolf Flesch",
|
creator: "Rudolf Flesch",
|
||||||
citation: "Flesch, R. (1948). A new readability yardstick. Journal of applied psychology, 32(3), 221."
|
citation: "Flesch, R. (1948). A new readability yardstick. Journal of applied psychology, 32(3), 221."
|
||||||
)
|
)
|
||||||
|
|
||||||
func score(_ text: String, metrics: RACommonMetricsCalculator.Results?) -> Double {
|
public init() {}
|
||||||
|
|
||||||
|
public func score(_ text: String, metrics: RACommonMetricsCalculator.Results?) -> Double {
|
||||||
let asl = metrics![.avgWordsPerSentence]!
|
let asl = metrics![.avgWordsPerSentence]!
|
||||||
let asw = metrics![.avgSyllablesPerWord]!
|
let asw = metrics![.avgSyllablesPerWord]!
|
||||||
|
|
||||||
|
|
|
@ -8,21 +8,22 @@
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
public class RAScoringTask {
|
public class RAScoringTask {
|
||||||
typealias Results = [Scorer: Double]
|
public typealias Results = [Scorer: Double]
|
||||||
|
|
||||||
enum Scorer: Hashable, CaseIterable, Comparable {
|
public enum Scorer: Hashable, CaseIterable, Comparable {
|
||||||
case fleschReadingEase
|
case fleschReadingEase
|
||||||
case fleschKincaidGrade
|
case fleschKincaidGrade
|
||||||
}
|
}
|
||||||
|
|
||||||
static let availableScorers: [Scorer: RAScorer.Type] = [
|
public static let availableScorers: [Scorer: RAScorer.Type] = [
|
||||||
.fleschReadingEase: RAFleschReadingEaseScorer.self,
|
.fleschReadingEase: RAFleschReadingEaseScorer.self,
|
||||||
.fleschKincaidGrade: RAFleschKincaidGradeScorer.self
|
.fleschKincaidGrade: RAFleschKincaidGradeScorer.self
|
||||||
]
|
]
|
||||||
|
|
||||||
var scorersToRun: Set<Scorer> = Set(Scorer.allCases)
|
public var scorersToRun: Set<Scorer> = Set(Scorer.allCases)
|
||||||
|
|
||||||
var scorers: [Scorer: RAScorer.Type] {
|
/** Derived from `scorersToRun`. */
|
||||||
|
public var scorers: [Scorer: RAScorer.Type] {
|
||||||
scorersToRun.reduce([:]) { partialResult, scorer in
|
scorersToRun.reduce([:]) { partialResult, scorer in
|
||||||
var d = partialResult
|
var d = partialResult
|
||||||
d[scorer] = Self.availableScorers[scorer]!
|
d[scorer] = Self.availableScorers[scorer]!
|
||||||
|
@ -30,7 +31,8 @@ public class RAScoringTask {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var commonMetricsToGet: Set<RACommonMetric> {
|
/** Derived from `scorersToRun`. */
|
||||||
|
public var commonMetricsToGet: Set<RACommonMetric> {
|
||||||
scorers
|
scorers
|
||||||
.map { $0.1.requiresCommonMetrics }
|
.map { $0.1.requiresCommonMetrics }
|
||||||
.reduce([]) { partialResult, scorerMetrics in
|
.reduce([]) { partialResult, scorerMetrics in
|
||||||
|
@ -39,7 +41,7 @@ public class RAScoringTask {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func run(on text: String) -> Results {
|
public func run(on text: String) -> Results {
|
||||||
var commonMetrics: RACommonMetricsCalculator.Results? = nil
|
var commonMetrics: RACommonMetricsCalculator.Results? = nil
|
||||||
|
|
||||||
if !commonMetricsToGet.isEmpty {
|
if !commonMetricsToGet.isEmpty {
|
||||||
|
|
|
@ -14,7 +14,7 @@ public struct RATokenizer {
|
||||||
|
|
||||||
private var tokenizer: NLTokenizer
|
private var tokenizer: NLTokenizer
|
||||||
|
|
||||||
init (_ text: String, unit: NLTokenUnit, language: NLLanguage? = nil) {
|
public init (_ text: String, unit: NLTokenUnit, language: NLLanguage? = nil) {
|
||||||
self.text = text
|
self.text = text
|
||||||
self.unit = unit
|
self.unit = unit
|
||||||
tokenizer = NLTokenizer(unit: unit)
|
tokenizer = NLTokenizer(unit: unit)
|
||||||
|
@ -24,8 +24,8 @@ public struct RATokenizer {
|
||||||
tokenizer.string = text
|
tokenizer.string = text
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns token count. */
|
/** - Returns: Token count. */
|
||||||
func enumerateTokens(using callBack: (String) -> Void) -> Int {
|
public func enumerateTokens(using callBack: (String) -> Void) -> Int {
|
||||||
var tokenCount = 0
|
var tokenCount = 0
|
||||||
tokenizer.enumerateTokens(in: text.startIndex..<text.endIndex) { range, _ in
|
tokenizer.enumerateTokens(in: text.startIndex..<text.endIndex) { range, _ in
|
||||||
tokenCount += 1
|
tokenCount += 1
|
||||||
|
|
Loading…
Add table
Reference in a new issue