perf: shouldBeRemovedよりも単純なフィルターを前に配置することで高速化・単純化

This commit is contained in:
Miwa / Ensan
2025-07-08 23:35:44 +09:00
parent 31a8ece9fc
commit c55fd4925c
4 changed files with 11 additions and 24 deletions

View File

@@ -54,10 +54,7 @@ extension Kana2Kanji {
let nextIndex: Int = node.inputRange.endIndex
// count
if nextIndex == count {
for index in node.prevs.indices {
let newnode: RegisteredNode = node.getRegisteredNode(index, value: node.values[index])
result.prevs.append(newnode)
}
self.updateResultNode(with: node, resultNode: result)
} else {
self.updateNextNodes(with: node, nextNodes: nodes[nextIndex], nBest: N_best)
}
@@ -66,6 +63,12 @@ extension Kana2Kanji {
return (result: result, lattice: Lattice(nodes: nodes))
}
func updateResultNode(with node: LatticeNode, resultNode: LatticeNode) {
for index in node.prevs.indices {
let newnode: RegisteredNode = node.getRegisteredNode(index, value: node.values[index])
resultNode.prevs.append(newnode)
}
}
/// N-Best
func updateNextNodes(with node: LatticeNode, nextNodes: [LatticeNode], nBest: Int) {
for nextnode in nextNodes {

View File

@@ -58,15 +58,10 @@ extension Kana2Kanji {
}
//
let nextIndex = node.inputRange.endIndex
// count
if nextIndex != count {
self.updateNextNodes(with: node, nextNodes: lattice.nodes[nextIndex], nBest: N_best)
} else {
// count
for index in node.prevs.indices {
let newnode = node.getRegisteredNode(index, value: node.values[index])
result.prevs.append(newnode)
}
self.updateResultNode(with: node, resultNode: result)
}
}

View File

@@ -88,11 +88,7 @@ extension Kana2Kanji {
}
let nextIndex = node.inputRange.endIndex
if count == nextIndex {
//
for index in node.prevs.indices {
let newnode = node.getRegisteredNode(index, value: node.values[index])
result.prevs.append(newnode)
}
self.updateResultNode(with: node, resultNode: result)
} else {
self.updateNextNodes(with: node, nextNodes: terminalNodes.nodes[nextIndex], nBest: N_best)
}

View File

@@ -31,21 +31,14 @@ extension Kana2Kanji {
let result = LatticeNode.EOSNode
for nodeArray in previousResult.lattice.nodes {
for node in nodeArray {
for node in nodeArray where node.inputRange.endIndex == count {
if node.prevs.isEmpty {
continue
}
if self.dicdataStore.shouldBeRemoved(data: node.data) {
continue
}
let nextIndex = node.inputRange.endIndex
if nextIndex == count {
//
for (index, value) in node.values.enumerated() {
let newnode = node.getRegisteredNode(index, value: value)
result.prevs.append(newnode)
}
}
self.updateResultNode(with: node, resultNode: result)
}
}