Apply top score scaling algorithm
This commit is contained in:
@@ -104,7 +104,10 @@ extension KissIndex {
|
||||
}
|
||||
}
|
||||
|
||||
normalizeAndWrite(scoreMap: scoreMap, includeName: true, kmi: kmi)
|
||||
if let maxScore = scoreMap.max(by: { abs($0.value) < abs($1.value) }) {
|
||||
let output = normalizeByScale(scoreMap: scoreMap, includeName: true, scale: abs(maxScore.value))
|
||||
writeOutput(output, kmi: kmi)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -162,6 +165,9 @@ extension KissIndex {
|
||||
}
|
||||
}
|
||||
|
||||
normalizeAndWrite(scoreMap: scoreMap, includeName: true, kmi: kmi)
|
||||
if let maxScore = scoreMap.max(by: { abs($0.value) < abs($1.value) }) {
|
||||
let output = normalizeByScale(scoreMap: scoreMap, includeName: true, scale: abs(maxScore.value))
|
||||
writeOutput(output, kmi: kmi)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,8 +47,10 @@ extension KissIndex {
|
||||
}
|
||||
}
|
||||
|
||||
normalizeAndWrite(scoreMap: scoreMap, includeName: true, kmi: kmi)
|
||||
|
||||
if let maxScore = scoreMap.max(by: { abs($0.value) < abs($1.value) }) {
|
||||
let output = normalizeByScale(scoreMap: scoreMap, includeName: true, scale: abs(maxScore.value))
|
||||
writeOutput(output, kmi: kmi)
|
||||
}
|
||||
} catch {
|
||||
writeError(error, kmi: kmi)
|
||||
}
|
||||
|
||||
@@ -127,7 +127,10 @@ extension KissIndex {
|
||||
}
|
||||
}
|
||||
|
||||
normalizeAndWrite(scoreMap: scoreMap, includeName: true, kmi: kmi)
|
||||
if let maxScore = scoreMap.max(by: { abs($0.value) < abs($1.value) }) {
|
||||
let output = normalizeByScale(scoreMap: scoreMap, includeName: true, scale: abs(maxScore.value))
|
||||
writeOutput(output, kmi: kmi)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -190,6 +193,9 @@ extension KissIndex {
|
||||
}
|
||||
}
|
||||
|
||||
normalizeAndWrite(scoreMap: scoreMap, includeName: true, kmi: kmi)
|
||||
if let maxScore = scoreMap.max(by: { abs($0.value) < abs($1.value) }) {
|
||||
let output = normalizeByScale(scoreMap: scoreMap, includeName: true, scale: abs(maxScore.value))
|
||||
writeOutput(output, kmi: kmi)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,10 @@ extension KissIndex {
|
||||
}
|
||||
}
|
||||
|
||||
normalizeAndWrite(scoreMap: scoreMap, includeName: true, kmi: kmi)
|
||||
if let maxScore = scoreMap.max(by: { abs($0.value) < abs($1.value) }) {
|
||||
let output = normalizeByScale(scoreMap: scoreMap, includeName: true, scale: abs(maxScore.value))
|
||||
writeOutput(output, kmi: kmi)
|
||||
}
|
||||
}
|
||||
catch {
|
||||
writeError(error, kmi: kmi)
|
||||
|
||||
@@ -345,7 +345,7 @@ extension KissIndex {
|
||||
|
||||
extension KissIndex {
|
||||
|
||||
func normalizeAndWrite(scoreMap: [String: Double], includeName: Bool = false, kmi: KissIndexType) {
|
||||
func normalizeByTotal(scoreMap: [String: Double], includeName: Bool = false) -> [KissIndexResult.Output] {
|
||||
|
||||
let positiveTotalScores = scoreMap.reduce(0, { $0 + ($1.value > 0 ? $1.value: 0) })
|
||||
let negativeTotalScores = abs(scoreMap.reduce(0, { $0 + ($1.value < 0 ? $1.value: 0) }))
|
||||
@@ -363,7 +363,21 @@ extension KissIndex {
|
||||
outputs.append(output)
|
||||
}
|
||||
|
||||
writeOutput(outputs, kmi: kmi)
|
||||
return outputs
|
||||
}
|
||||
|
||||
func normalizeByScale(scoreMap: [String: Double], includeName: Bool = false, scale: Double) -> [KissIndexResult.Output] {
|
||||
let scoreArray = scoreMap.map { ($0.key, $0.value) }.sorted(by: { $0.1 > $1.1 })
|
||||
|
||||
var outputs = [KissIndexResult.Output]()
|
||||
for array in scoreArray {
|
||||
let weight = min(scale, Double(array.1)) / scale
|
||||
let name: String? = (includeName ? getProduct(shortCode: array.0)?.itemName: nil)
|
||||
let output = KissIndexResult.Output(shortCode: array.0, productName: name, weight: weight)
|
||||
outputs.append(output)
|
||||
}
|
||||
|
||||
return outputs
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user