From 632ce251c7b7ca3698ea56e235a02e02012a87ed Mon Sep 17 00:00:00 2001 From: Miwa / Ensan Date: Wed, 9 Jul 2025 00:01:25 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20api=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ConversionAlgorithms/Core/FullInputProcessing.swift | 8 ++++---- .../Core/FullInputProcessingWithPrefixConstraint.swift | 2 +- .../Core/PrefixCompletionProcessing.swift | 2 +- .../Core/SuffixReplacementProcessing.swift | 4 ++-- .../ConversionAlgorithms/Lattice.swift | 6 ++++++ 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/FullInputProcessing.swift b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/FullInputProcessing.swift index 867620d..5cf6ef4 100644 --- a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/FullInputProcessing.swift +++ b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/FullInputProcessing.swift @@ -30,9 +30,9 @@ extension Kana2Kanji { debug("新規に計算を行います。inputされた文字列は\(inputData.input.count)文字分の\(inputData.convertTarget)") let count: Int = inputData.input.count let result: LatticeNode = LatticeNode.EOSNode - let nodes: [[LatticeNode]] = (.zero ..< count).map {dicdataStore.getLOUDSDataInRange(inputData: inputData, from: $0, needTypoCorrection: needTypoCorrection)} + let lattice: Lattice = Lattice(nodes: (.zero ..< count).map {dicdataStore.getLOUDSDataInRange(inputData: inputData, from: $0, needTypoCorrection: needTypoCorrection)}) // 「i文字目から始まるnodes」に対して - for (i, nodeArray) in nodes.enumerated() { + for (i, nodeArray) in lattice.nodes.enumerated() { // それぞれのnodeに対して for node in nodeArray { if node.prevs.isEmpty { @@ -56,11 +56,11 @@ extension Kana2Kanji { if nextIndex == count { self.updateResultNode(with: node, resultNode: result) } else { - self.updateNextNodes(with: node, nextNodes: nodes[nextIndex], nBest: N_best) + self.updateNextNodes(with: node, nextNodes: lattice[inputIndex: nextIndex], nBest: N_best) } } } - return (result: result, lattice: Lattice(nodes: nodes)) + return (result: result, lattice: lattice) } func updateResultNode(with node: LatticeNode, resultNode: LatticeNode) { diff --git a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/FullInputProcessingWithPrefixConstraint.swift b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/FullInputProcessingWithPrefixConstraint.swift index efd097d..5ec0ff5 100644 --- a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/FullInputProcessingWithPrefixConstraint.swift +++ b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/FullInputProcessingWithPrefixConstraint.swift @@ -61,7 +61,7 @@ extension Kana2Kanji { Array(($0.data.reduce(into: "") { $0.append(contentsOf: $1.word)} + node.data.word).utf8) } // nodeの繋がる次にあり得る全てのnextnodeに対して - for nextnode in lattice.nodes[nextIndex] { + for nextnode in lattice[inputIndex: nextIndex] { // クラスの連続確率を計算する。 let ccValue: PValue = self.dicdataStore.getCCValue(node.data.rcid, nextnode.data.lcid) // nodeの持っている全てのprevnodeに対して diff --git a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/PrefixCompletionProcessing.swift b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/PrefixCompletionProcessing.swift index 3e93ec6..d16d0d7 100644 --- a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/PrefixCompletionProcessing.swift +++ b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/PrefixCompletionProcessing.swift @@ -59,7 +59,7 @@ extension Kana2Kanji { // 変換した文字数 let nextIndex = node.inputRange.endIndex if nextIndex != count { - self.updateNextNodes(with: node, nextNodes: lattice.nodes[nextIndex], nBest: N_best) + self.updateNextNodes(with: node, nextNodes: lattice[inputIndex: nextIndex], nBest: N_best) } else { self.updateResultNode(with: node, resultNode: result) } diff --git a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/SuffixReplacementProcessing.swift b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/SuffixReplacementProcessing.swift index f2a79d5..29a6294 100644 --- a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/SuffixReplacementProcessing.swift +++ b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Core/SuffixReplacementProcessing.swift @@ -57,7 +57,7 @@ extension Kana2Kanji { } // 変換した文字数 let nextIndex = node.inputRange.endIndex - self.updateNextNodes(with: node, nextNodes: addedNodes.nodes[nextIndex], nBest: N_best) + self.updateNextNodes(with: node, nextNodes: addedNodes[inputIndex: nextIndex], nBest: N_best) } } lattice.merge(addedNodes) @@ -90,7 +90,7 @@ extension Kana2Kanji { if count == nextIndex { self.updateResultNode(with: node, resultNode: result) } else { - self.updateNextNodes(with: node, nextNodes: terminalNodes.nodes[nextIndex], nBest: N_best) + self.updateNextNodes(with: node, nextNodes: terminalNodes[inputIndex: nextIndex], nBest: N_best) } } } diff --git a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Lattice.swift b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Lattice.swift index d3a3c26..9c9fcd7 100644 --- a/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Lattice.swift +++ b/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Lattice.swift @@ -25,4 +25,10 @@ struct Lattice { } } } + + subscript(inputIndex i: Int) -> [LatticeNode] { + get { + self.nodes[i] + } + } }