diff --git a/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmUserOverride.swift b/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmUserOverride.swift index 33afe642..28fefc51 100644 --- a/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmUserOverride.swift +++ b/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmUserOverride.swift @@ -151,9 +151,19 @@ extension vChewingLM.LMUserOverride { } } -// MARK: - Hash and Dehash the entire UOM data +// MARK: - Hash and Dehash the entire UOM data, etc. extension vChewingLM.LMUserOverride { + public func bleachSpecifiedSuggestions(target: String, saveCallback: @escaping () -> Void) { + for neta in mutLRUMap { + if neta.value.observation.overrides.keys.contains(target) { + mutLRUMap.removeValue(forKey: neta.key) + } + } + resetMRUList() + saveCallback() + } + /// 自 LRU 辭典內移除所有的單元圖。 public func bleachUnigrams(saveCallback: @escaping () -> Void) { for key in mutLRUMap.keys { diff --git a/Source/Modules/LMMgr.swift b/Source/Modules/LMMgr.swift index 426818c2..fb244910 100644 --- a/Source/Modules/LMMgr.swift +++ b/Source/Modules/LMMgr.swift @@ -610,6 +610,17 @@ public enum LMMgr { group.notify(queue: DispatchQueue.main) {} } + public static func bleachSpecifiedSuggestions(target: String, mode: Shared.InputMode) { + switch mode { + case .imeModeCHS: + Self.uomCHT.bleachSpecifiedSuggestions(target: target, saveCallback: { Self.uomCHT.saveData() }) + case .imeModeCHT: + Self.uomCHS.bleachSpecifiedSuggestions(target: target, saveCallback: { Self.uomCHS.saveData() }) + case .imeModeNULL: + break + } + } + public static func removeUnigramsFromUserOverrideModel(_ mode: Shared.InputMode) { switch mode { case .imeModeCHS: diff --git a/Source/Modules/SessionCtl_Delegates.swift b/Source/Modules/SessionCtl_Delegates.swift index 05df8620..722994f3 100644 --- a/Source/Modules/SessionCtl_Delegates.swift +++ b/Source/Modules/SessionCtl_Delegates.swift @@ -39,6 +39,13 @@ extension SessionCtl: KeyHandlerDelegate { { return false } + // 開始針對使用者半衰模組的清詞處理 + let rawPair = state.data.userPhraseKVPair + let valueCurrent = rawPair.1 + let valueReversed = ChineseConverter.crossConvert(rawPair.1) + LMMgr.bleachSpecifiedSuggestions(target: valueCurrent, mode: IMEApp.currentInputMode) + LMMgr.bleachSpecifiedSuggestions(target: valueReversed, mode: IMEApp.currentInputMode.reversed) + // 清詞完畢 return true } }