LMI // Make lmCNS and lmSymbols static to save RAM.
This commit is contained in:
parent
3da4395e12
commit
413115cbca
|
@ -26,15 +26,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
// 簡體中文模式與繁體中文模式共用全字庫擴展模組,故單獨處理。
|
|
||||||
// 塞在 LMInstantiator 內的話,每個模式都會讀入一份全字庫,會多佔用 100MB 記憶體。
|
|
||||||
private var lmCNS = vChewing.LMCoreNS(
|
|
||||||
reverse: true, consolidate: false, defaultScore: -11.0, forceDefaultScore: false
|
|
||||||
)
|
|
||||||
private var lmSymbols = vChewing.LMCoreNS(
|
|
||||||
reverse: true, consolidate: false, defaultScore: -13.0, forceDefaultScore: false
|
|
||||||
)
|
|
||||||
|
|
||||||
extension vChewing {
|
extension vChewing {
|
||||||
/// 語言模組副本化模組(LMInstantiator,下稱「LMI」)自身為符合天權星組字引擎內
|
/// 語言模組副本化模組(LMInstantiator,下稱「LMI」)自身為符合天權星組字引擎內
|
||||||
/// 的 LanguageModel 協定的模組、統籌且整理來自其它子模組的資料(包括使用者語彙、
|
/// 的 LanguageModel 協定的模組、統籌且整理來自其它子模組的資料(包括使用者語彙、
|
||||||
|
@ -79,6 +70,15 @@ extension vChewing {
|
||||||
reverse: true, consolidate: false, defaultScore: -1.0, forceDefaultScore: false
|
reverse: true, consolidate: false, defaultScore: -1.0, forceDefaultScore: false
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// 簡體中文模式與繁體中文模式共用全字庫擴展模組,故靜態處理。
|
||||||
|
// 不然,每個模式都會讀入一份全字庫,會多佔用 100MB 記憶體。
|
||||||
|
static var lmCNS = vChewing.LMCoreNS(
|
||||||
|
reverse: true, consolidate: false, defaultScore: -11.0, forceDefaultScore: false
|
||||||
|
)
|
||||||
|
static var lmSymbols = vChewing.LMCoreNS(
|
||||||
|
reverse: true, consolidate: false, defaultScore: -13.0, forceDefaultScore: false
|
||||||
|
)
|
||||||
|
|
||||||
// 聲明使用者語言模組。
|
// 聲明使用者語言模組。
|
||||||
// 使用者語言模組使用多執行緒的話,可能會導致一些問題。有時間再仔細排查看看。
|
// 使用者語言模組使用多執行緒的話,可能會導致一些問題。有時間再仔細排查看看。
|
||||||
var lmUserPhrases = LMCoreEX(
|
var lmUserPhrases = LMCoreEX(
|
||||||
|
@ -108,11 +108,11 @@ extension vChewing {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public var isCNSDataLoaded: Bool { lmCNS.isLoaded() }
|
public var isCNSDataLoaded: Bool { vChewing.LMInstantiator.lmCNS.isLoaded() }
|
||||||
public func loadCNSData(path: String) {
|
public func loadCNSData(path: String) {
|
||||||
if FileManager.default.isReadableFile(atPath: path) {
|
if FileManager.default.isReadableFile(atPath: path) {
|
||||||
lmCNS.open(path)
|
vChewing.LMInstantiator.lmCNS.open(path)
|
||||||
IME.prtDebugIntel("lmCNS: \(lmCNS.count) entries of data loaded from: \(path)")
|
IME.prtDebugIntel("lmCNS: \(vChewing.LMInstantiator.lmCNS.count) entries of data loaded from: \(path)")
|
||||||
} else {
|
} else {
|
||||||
IME.prtDebugIntel("lmCNS: File access failure: \(path)")
|
IME.prtDebugIntel("lmCNS: File access failure: \(path)")
|
||||||
}
|
}
|
||||||
|
@ -128,11 +128,11 @@ extension vChewing {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public var isSymbolDataLoaded: Bool { lmSymbols.isLoaded() }
|
public var isSymbolDataLoaded: Bool { vChewing.LMInstantiator.lmSymbols.isLoaded() }
|
||||||
public func loadSymbolData(path: String) {
|
public func loadSymbolData(path: String) {
|
||||||
if FileManager.default.isReadableFile(atPath: path) {
|
if FileManager.default.isReadableFile(atPath: path) {
|
||||||
lmSymbols.open(path)
|
vChewing.LMInstantiator.lmSymbols.open(path)
|
||||||
IME.prtDebugIntel("lmSymbol: \(lmSymbols.count) entries of data loaded from: \(path)")
|
IME.prtDebugIntel("lmSymbol: \(vChewing.LMInstantiator.lmSymbols.count) entries of data loaded from: \(path)")
|
||||||
} else {
|
} else {
|
||||||
IME.prtDebugIntel("lmSymbols: File access failure: \(path)")
|
IME.prtDebugIntel("lmSymbols: File access failure: \(path)")
|
||||||
}
|
}
|
||||||
|
@ -216,12 +216,12 @@ extension vChewing {
|
||||||
rawAllUnigrams += lmCore.unigramsFor(key: key)
|
rawAllUnigrams += lmCore.unigramsFor(key: key)
|
||||||
|
|
||||||
if isCNSEnabled {
|
if isCNSEnabled {
|
||||||
rawAllUnigrams += lmCNS.unigramsFor(key: key)
|
rawAllUnigrams += vChewing.LMInstantiator.lmCNS.unigramsFor(key: key)
|
||||||
}
|
}
|
||||||
|
|
||||||
if isSymbolEnabled {
|
if isSymbolEnabled {
|
||||||
rawAllUnigrams += lmUserSymbols.unigramsFor(key: key)
|
rawAllUnigrams += lmUserSymbols.unigramsFor(key: key)
|
||||||
rawAllUnigrams += lmSymbols.unigramsFor(key: key)
|
rawAllUnigrams += vChewing.LMInstantiator.lmSymbols.unigramsFor(key: key)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 準備過濾清單。因為我們在 Swift 使用 NSOrderedSet,所以就不需要統計清單了。
|
// 準備過濾清單。因為我們在 Swift 使用 NSOrderedSet,所以就不需要統計清單了。
|
||||||
|
|
Loading…
Reference in New Issue