LMMgr.UserPhrase // Fine-tweak suggestNextFreq().

This commit is contained in:
ShikiSuen 2024-03-30 18:29:41 +08:00
parent e8961ff33f
commit 817df50916
1 changed files with 13 additions and 7 deletions

View File

@ -213,24 +213,30 @@ public extension LMMgr.UserPhrase {
} }
} }
guard !extreme, isSingleCharReadingPair else { return extremeFallbackResult } guard !extreme, isSingleCharReadingPair else { return extremeFallbackResult }
let factoryUnigrams = inputMode.langModel.factoryCoreUnigramsFor(key: keyArray.joined(separator: "-")) let fetchedUnigrams = inputMode.langModel.unigramsFor(keyArray: keyArray)
let currentWeight = weight ?? factoryUnigrams.first { $0.value == value }?.score let currentWeight = weight ?? fetchedUnigrams.first { $0.value == value }?.score
guard let currentWeight = currentWeight else { return extremeFallbackResult } guard let currentWeight = currentWeight else { return extremeFallbackResult }
let factoryScores = factoryUnigrams.map(\.score) let fetchedScores = fetchedUnigrams.map(\.score)
var neighborValue: Double? var neighborValue: Double?
switch action { switch action {
case .toBoost: case .toBoost:
neighborValue = currentWeight.findNeighborValue(from: factoryScores, greater: true) neighborValue = currentWeight.findNeighborValue(from: fetchedScores, greater: true)
if let realNeighborValue = neighborValue { if let realNeighborValue = neighborValue {
neighborValue = realNeighborValue + 0.0001 neighborValue = realNeighborValue + 0.000_001
} else if let fetchedMax = fetchedScores.min(), currentWeight <= fetchedMax {
neighborValue = Swift.min(0, currentWeight + 0.000_001)
} else { } else {
//
neighborValue = Swift.min(0, currentWeight + 1) neighborValue = Swift.min(0, currentWeight + 1)
} }
case .toNerf: case .toNerf:
neighborValue = currentWeight.findNeighborValue(from: factoryScores, greater: false) neighborValue = currentWeight.findNeighborValue(from: fetchedScores, greater: false)
if let realNeighborValue = neighborValue { if let realNeighborValue = neighborValue {
neighborValue = realNeighborValue - 0.0001 neighborValue = realNeighborValue - 0.000_001
} else if let fetchedMax = fetchedScores.max(), currentWeight >= fetchedMax {
neighborValue = Swift.max(-114.514, currentWeight - 0.000_001)
} else { } else {
//
neighborValue = Swift.max(-114.514, currentWeight - 1) neighborValue = Swift.max(-114.514, currentWeight - 1)
} }
case .toFilter: return nil case .toFilter: return nil