From eb7076e318c062937bcd031f50f116189ee67ae3 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Wed, 30 Nov 2022 23:18:55 +0800 Subject: [PATCH] LMAssembly // Add temporary data support for LMCoreEX. --- .../Sources/LangModelAssembly/LMInstantiator.swift | 7 +++++++ .../Sources/LangModelAssembly/SubLMs/lmCoreEX.swift | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/LMInstantiator.swift b/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/LMInstantiator.swift index f52be57a..fb7d3fc9 100644 --- a/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/LMInstantiator.swift +++ b/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/LMInstantiator.swift @@ -227,6 +227,13 @@ extension vChewingLM { lmAssociates.valuesFor(pair: pair) } + public func insertTemporaryData(key: String, unigram: Megrez.Unigram, isFiltering: Bool) { + _ = + isFiltering + ? lmFiltered.temporaryMap[key, default: []].append(unigram) + : lmUserPhrases.temporaryMap[key, default: []].append(unigram) + } + /// 根據給定的索引鍵來確認各個資料庫陣列內是否存在對應的資料。 /// - Parameter key: 索引鍵。 /// - Returns: 是否在庫。 diff --git a/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmCoreEX.swift b/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmCoreEX.swift index cba7d952..b68c0a6d 100644 --- a/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmCoreEX.swift +++ b/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmCoreEX.swift @@ -19,6 +19,8 @@ extension vChewingLM { @frozen public struct LMCoreEX { /// 資料庫辭典。索引內容為注音字串,資料內容則為字串首尾範圍、方便自 strData 取資料。 var rangeMap: [String: [Range]] = [:] + /// 資料庫追加辭典。 + var temporaryMap: [String: [Megrez.Unigram]] = [:] /// 資料庫字串陣列。 var strData: String = "" /// 聲明原始檔案內第一、二縱列的內容是否彼此顛倒。 @@ -78,6 +80,7 @@ extension vChewingLM { } } } + temporaryMap.removeAll() } catch { vCLog("\(error)") vCLog("↑ Exception happened when reading data at: \(path).") @@ -129,6 +132,9 @@ extension vChewingLM { grams.append(Megrez.Unigram(value: theValue, score: theScore)) } } + if let arrOtherRecords: [Megrez.Unigram] = temporaryMap[key] { + grams.append(contentsOf: arrOtherRecords) + } return grams }