LMMgr.UserPhrase // Fine-tweak suggestNextFreq().
This commit is contained in:
parent
e8961ff33f
commit
817df50916
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue