From 706cfb3f947b3cb24452455ddaf80e9f80d7bb48 Mon Sep 17 00:00:00 2001 From: Miwa / Ensan Date: Wed, 9 Jul 2025 21:35:04 +0900 Subject: [PATCH] refactor: make nodes private --- .../Core/FullInputProcessing.swift | 2 +- ...llInputProcessingWithPrefixConstraint.swift | 2 +- .../Core/PrefixCompletionProcessing.swift | 6 +++--- .../Core/SuffixReplacementProcessing.swift | 6 +++--- .../Core/UnchangedInputProcessing.swift | 2 +- .../ConversionAlgorithms/Lattice.swift | 18 ++++++++++++++++-- .../ConversionAlgorithms/Zenzai/zenzai.swift | 2 +- .../ConverterAPI/KanaKanjiConverter.swift | 2 +- 8 files changed, 27 insertions(+), 13 deletions(-) diff --git a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/FullInputProcessing.swift b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/FullInputProcessing.swift index 5cf6ef4..a213d03 100644 --- a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/FullInputProcessing.swift +++ b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/FullInputProcessing.swift @@ -32,7 +32,7 @@ extension Kana2Kanji { let result: LatticeNode = LatticeNode.EOSNode let lattice: Lattice = Lattice(nodes: (.zero ..< count).map {dicdataStore.getLOUDSDataInRange(inputData: inputData, from: $0, needTypoCorrection: needTypoCorrection)}) // 「i文字目から始まるnodes」に対して - for (i, nodeArray) in lattice.nodes.enumerated() { + for (i, nodeArray) in lattice.enumerated() { // それぞれのnodeに対して for node in nodeArray { if node.prevs.isEmpty { diff --git a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/FullInputProcessingWithPrefixConstraint.swift b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/FullInputProcessingWithPrefixConstraint.swift index 5ec0ff5..5a6a35a 100644 --- a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/FullInputProcessingWithPrefixConstraint.swift +++ b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/FullInputProcessingWithPrefixConstraint.swift @@ -24,7 +24,7 @@ extension Kana2Kanji { let result: LatticeNode = LatticeNode.EOSNode let lattice: Lattice = Lattice(nodes: (.zero ..< count).map {dicdataStore.getLOUDSDataInRange(inputData: inputData, from: $0, needTypoCorrection: false)}) // 「i文字目から始まるnodes」に対して - for (i, nodeArray) in lattice.nodes.enumerated() { + for (i, nodeArray) in lattice.enumerated() { // それぞれのnodeに対して for node in nodeArray { if node.prevs.isEmpty { diff --git a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/PrefixCompletionProcessing.swift b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/PrefixCompletionProcessing.swift index d16d0d7..16a4aad 100644 --- a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/PrefixCompletionProcessing.swift +++ b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/PrefixCompletionProcessing.swift @@ -20,8 +20,8 @@ extension Kana2Kanji { let count = inputData.input.count // (1) let start = RegisteredNode.fromLastCandidate(completedData) - let lattice = Lattice(nodes: previousResult.lattice.nodes.suffix(count)) - for (i, nodeArray) in lattice.nodes.enumerated() { + let lattice = previousResult.lattice.suffix(count) + for (i, nodeArray) in lattice.enumerated() { if i == .zero { for node in nodeArray { node.prevs = [start] @@ -39,7 +39,7 @@ extension Kana2Kanji { // (2) let result = LatticeNode.EOSNode - for (i, nodeArray) in lattice.nodes.enumerated() { + for (i, nodeArray) in lattice.enumerated() { for node in nodeArray { if node.prevs.isEmpty { continue diff --git a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/SuffixReplacementProcessing.swift b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/SuffixReplacementProcessing.swift index 29a6294..2634a20 100644 --- a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/SuffixReplacementProcessing.swift +++ b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/SuffixReplacementProcessing.swift @@ -35,7 +35,7 @@ extension Kana2Kanji { let terminalNodes: Lattice if counts.added == 0 { - terminalNodes = Lattice(nodes: lattice.nodes.map { + terminalNodes = Lattice(nodes: lattice.map { $0.filter { $0.inputRange.endIndex == count } @@ -47,7 +47,7 @@ extension Kana2Kanji { }) // (3) - for nodeArray in lattice.nodes { + for nodeArray in lattice { for node in nodeArray { if node.prevs.isEmpty { continue @@ -68,7 +68,7 @@ extension Kana2Kanji { // terminalNodesの各要素を結果ノードに接続する let result = LatticeNode.EOSNode - for (i, nodes) in terminalNodes.nodes.enumerated() { + for (i, nodes) in terminalNodes.enumerated() { for node in nodes { if node.prevs.isEmpty { continue diff --git a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/UnchangedInputProcessing.swift b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/UnchangedInputProcessing.swift index 97746c7..443d37b 100644 --- a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/UnchangedInputProcessing.swift +++ b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/UnchangedInputProcessing.swift @@ -30,7 +30,7 @@ extension Kana2Kanji { // (1) let result = LatticeNode.EOSNode - for nodeArray in previousResult.lattice.nodes { + for nodeArray in previousResult.lattice { for node in nodeArray where node.inputRange.endIndex == count { if node.prevs.isEmpty { continue diff --git a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Lattice.swift b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Lattice.swift index 9c9fcd7..5df2df9 100644 --- a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Lattice.swift +++ b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Lattice.swift @@ -1,9 +1,11 @@ -struct Lattice { +struct Lattice: Sequence { + typealias Element = [LatticeNode] + init(nodes: [[LatticeNode]] = []) { self.nodes = nodes } - private(set) var nodes: [[LatticeNode]] + private var nodes: [[LatticeNode]] func prefix(_ k: Int) -> Lattice { var lattice = Lattice(nodes: self.nodes.prefix(k).map {(nodes: [LatticeNode]) in @@ -15,6 +17,10 @@ struct Lattice { return lattice } + func suffix(_ count: Int) -> Lattice { + Lattice(nodes: self.nodes.suffix(count)) + } + mutating func merge(_ lattice: Lattice) { for (index, nodeArray) in lattice.nodes.enumerated() where index < self.nodes.endIndex { self.nodes[index].append(contentsOf: nodeArray) @@ -31,4 +37,12 @@ struct Lattice { self.nodes[i] } } + + func makeIterator() -> some IteratorProtocol { + self.nodes.makeIterator() + } + + var isEmpty: Bool { + self.nodes.isEmpty + } } diff --git a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Zenzai/zenzai.swift b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Zenzai/zenzai.swift index 19a82ec..f253be8 100644 --- a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Zenzai/zenzai.swift +++ b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Zenzai/zenzai.swift @@ -82,7 +82,7 @@ extension Kana2Kanji { // 制約がついている場合は高速になるので、N=3としている self.kana2lattice_all_with_prefix_constraint(inputData, N_best: 3, constraint: constraint) } - if lattice.nodes.isEmpty { + if lattice.isEmpty { // 初回のみ lattice = draftResult.lattice } diff --git a/Sources/KanaKanjiConverterModule/ConverterAPI/KanaKanjiConverter.swift b/Sources/KanaKanjiConverterModule/ConverterAPI/KanaKanjiConverter.swift index 5c75878..17e7dda 100644 --- a/Sources/KanaKanjiConverterModule/ConverterAPI/KanaKanjiConverter.swift +++ b/Sources/KanaKanjiConverterModule/ConverterAPI/KanaKanjiConverter.swift @@ -538,7 +538,7 @@ import EfficientNGram seenCandidate.formUnion(clause_candidates.map {$0.text}) // 最初の辞書データ - let dicCandidates: [Candidate] = result.lattice.nodes[0] + let dicCandidates: [Candidate] = result.lattice[inputIndex: 0] .map { Candidate( text: $0.data.word,