LM // Swiftify: LMUserOverride - phase 3.

This commit is contained in:
ShikiSuen 2022-05-04 20:07:47 +08:00
parent 8618e83c9d
commit 1a5fa95697
1 changed files with 18 additions and 10 deletions

View File

@ -30,12 +30,6 @@ extension vChewing {
public class LMUserOverride { public class LMUserOverride {
// MARK: - Private Structures // MARK: - Private Structures
var mutCapacity: Int
var mutDecayExponent: Double
var mutLRUList = [KeyObservationPair]()
var mutLRUMap: [String: KeyObservationPair] = [:]
let kDecayThreshold: Double = 1.0 / 1_048_576.0
struct Override { struct Override {
var count: Int = 0 var count: Int = 0
var timestamp: Double = 0.0 var timestamp: Double = 0.0
@ -70,6 +64,14 @@ extension vChewing {
} }
} }
// MARK: - Main
var mutCapacity: Int
var mutDecayExponent: Double
var mutLRUList = [KeyObservationPair]()
var mutLRUMap: [String: KeyObservationPair] = [:]
let kDecayThreshold: Double = 1.0 / 1_048_576.0
public init(capacity: Int = 500, decayConstant: Double = 5400.0) { public init(capacity: Int = 500, decayConstant: Double = 5400.0) {
mutCapacity = abs(capacity) // Ensures that this value is always > 0. mutCapacity = abs(capacity) // Ensures that this value is always > 0.
mutDecayExponent = log(0.5) / decayConstant mutDecayExponent = log(0.5) / decayConstant
@ -82,7 +84,10 @@ extension vChewing {
timestamp: Double timestamp: Double
) { ) {
let key = getWalkedNodesToKey(walkedNodes: walkedNodes, cursorIndex: cursorIndex) let key = getWalkedNodesToKey(walkedNodes: walkedNodes, cursorIndex: cursorIndex)
guard key != "((),(),())" else { return } guard !key.isEmpty
else {
return
}
guard let map = mutLRUMap[key] else { guard let map = mutLRUMap[key] else {
var observation: Observation = .init() var observation: Observation = .init()
observation.update(candidate: candidate, timestamp: timestamp) observation.update(candidate: candidate, timestamp: timestamp)
@ -107,15 +112,15 @@ extension vChewing {
timestamp: Double timestamp: Double
) -> String { ) -> String {
let key = getWalkedNodesToKey(walkedNodes: walkedNodes, cursorIndex: cursorIndex) let key = getWalkedNodesToKey(walkedNodes: walkedNodes, cursorIndex: cursorIndex)
guard let keyValuePair = mutLRUMap[key] else { guard let keyValuePair = mutLRUMap[key],
!key.isEmpty
else {
return "" return ""
} }
IME.prtDebugIntel("Suggest - A: \(key)") IME.prtDebugIntel("Suggest - A: \(key)")
IME.prtDebugIntel("Suggest - B: \(keyValuePair.key)") IME.prtDebugIntel("Suggest - B: \(keyValuePair.key)")
guard key != "((),(),())" else { return "" }
let observation = keyValuePair.observation let observation = keyValuePair.observation
var candidate = "" var candidate = ""
@ -208,6 +213,9 @@ extension vChewing {
} }
strOutput = "(\(strAnterior),\(strPrev),\(strCurrent))" strOutput = "(\(strAnterior),\(strPrev),\(strCurrent))"
if strOutput == "((),(),())" {
strOutput = ""
}
return strOutput return strOutput
} }