diff --git a/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/LMInstantiator_UserDictionarySummarized.swift b/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/LMInstantiator_UserDictionarySummarized.swift new file mode 100644 index 00000000..38b23397 --- /dev/null +++ b/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/LMInstantiator_UserDictionarySummarized.swift @@ -0,0 +1,33 @@ +// (c) 2021 and onwards The vChewing Project (MIT-NTL License). +// ==================== +// This code is released under the MIT license (SPDX-License-Identifier: MIT) +// ... with NTL restriction stating that: +// No trademark license is granted to use the trade names, trademarks, service +// marks, or product names of Contributor, except as required to fulfill notice +// requirements defined in MIT License. + +import Foundation + +public extension LMAssembly { + struct UserDictionarySummarized: Codable { + let isCHS: Bool + let userPhrases: [String: [String]] + let filter: [String: [String]] + let userSymbols: [String: [String]] + let replacements: [String: String] + let associates: [String: [String]] + } +} + +public extension LMAssembly.LMInstantiator { + func summarize(all: Bool) -> LMAssembly.UserDictionarySummarized { + LMAssembly.UserDictionarySummarized( + isCHS: isCHS, + userPhrases: lmUserPhrases.dictRepresented, + filter: lmFiltered.dictRepresented, + userSymbols: lmUserSymbols.dictRepresented, + replacements: lmReplacements.dictRepresented, + associates: all ? lmAssociates.dictRepresented : [:] + ) + } +} diff --git a/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmAssociates.swift b/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmAssociates.swift index a5aa2030..083fe35c 100644 --- a/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmAssociates.swift +++ b/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmAssociates.swift @@ -11,7 +11,7 @@ import Megrez extension LMAssembly { struct LMAssociates { public private(set) var filePath: String? - var rangeMap: [String: [(Range, Int)]] = [:] + var rangeMap: [String: [(Range, Int)]] = [:] // Range 只可能是一整行,所以必須得有 index。 var strData: String = "" public var count: Int { rangeMap.count } @@ -97,15 +97,9 @@ extension LMAssembly { public func valuesFor(pair: Megrez.KeyValuePaired) -> [String] { var pairs: [String] = [] - if let arrRangeRecords: [(Range, Int)] = rangeMap[pair.toNGramKey] { - for (netaRange, index) in arrRangeRecords { - let neta = strData[netaRange].split(separator: " ") - let theValue: String = .init(neta[index]) - pairs.append(theValue) - } - } - if let arrRangeRecords: [(Range, Int)] = rangeMap[pair.value] { - for (netaRange, index) in arrRangeRecords { + let availableResults = [rangeMap[pair.toNGramKey], rangeMap[pair.value]].compactMap { $0 } + availableResults.forEach { arrRangeRecords in + arrRangeRecords.forEach { netaRange, index in let neta = strData[netaRange].split(separator: " ") let theValue: String = .init(neta[index]) pairs.append(theValue) @@ -120,3 +114,17 @@ extension LMAssembly { } } } + +extension LMAssembly.LMAssociates { + var dictRepresented: [String: [String]] { + var result = [String: [String]]() + rangeMap.forEach { key, arrRangeRecords in + arrRangeRecords.forEach { netaRange, index in + let neta = strData[netaRange].split(separator: " ") + let theValue: String = .init(neta[index]) + result[key, default: []].append(theValue) + } + } + return result + } +} diff --git a/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmCoreEX.swift b/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmCoreEX.swift index fb1e8eb8..0e36385c 100644 --- a/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmCoreEX.swift +++ b/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmCoreEX.swift @@ -184,3 +184,15 @@ extension LMAssembly { } } } + +extension LMAssembly.LMCoreEX { + var dictRepresented: [String: [String]] { + var result = [String: [String]]() + rangeMap.forEach { key, arrValueRanges in + result[key, default: []] = arrValueRanges.map { currentRange in + strData[currentRange].description + } + } + return result + } +} diff --git a/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmReplacements.swift b/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmReplacements.swift index 46ed79d3..b79bba40 100644 --- a/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmReplacements.swift +++ b/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/SubLMs/lmReplacements.swift @@ -98,3 +98,13 @@ extension LMAssembly { } } } + +extension LMAssembly.LMReplacements { + var dictRepresented: [String: String] { + var result = [String: String]() + rangeMap.forEach { key, valueRange in + result[key] = strData[valueRange].description + } + return result + } +}