mirror of
https://github.com/mii443/AzooKeyKanaKanjiConverter.git
synced 2025-12-03 02:58:27 +00:00
61 lines
2.2 KiB
Swift
61 lines
2.2 KiB
Swift
//
|
||
// afterLastCharacterDeleted.swift
|
||
// Keyboard
|
||
//
|
||
// Created by ensan on 2020/09/14.
|
||
// Copyright © 2020 ensan. All rights reserved.
|
||
//
|
||
|
||
import Foundation
|
||
import SwiftUtils
|
||
|
||
extension Kana2Kanji {
|
||
|
||
/// カナを漢字に変換する関数, 最後の複数文字を削除した場合。
|
||
/// - Parameters:
|
||
/// - deletedCount: 消した文字数。
|
||
/// - N_best: N_best値。
|
||
/// - previousResult: ひとつ前のデータ。つまり消した文字があった時の変換のデータ。
|
||
/// - Returns:
|
||
/// 発見された候補のリスト。
|
||
///
|
||
/// ### 実装方法
|
||
/// (1)まず、計算済みノードを捜査して、新しい文末につながるものをresultにregisterしていく。
|
||
/// N_bestの計算は既にやってあるので不要。
|
||
///
|
||
/// (2)次に、返却用ノードを計算する。文字数が超過するものはfilterで除去する。
|
||
|
||
func kana2lattice_deletedLast(deletedCount: Int, N_best: Int, previousResult: (inputData: ComposingText, nodes: Nodes)) -> (result: LatticeNode, nodes: Nodes) {
|
||
debug("削除の連続性を利用した変換、元の文字は:", previousResult.inputData.convertTarget)
|
||
let count = previousResult.inputData.input.count - deletedCount
|
||
// (1)
|
||
let result = LatticeNode.EOSNode
|
||
|
||
for nodeArray in previousResult.nodes {
|
||
for node in nodeArray {
|
||
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)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// (2)
|
||
let updatedNodes = previousResult.nodes.prefix(count).map {(nodeArray: [LatticeNode]) in
|
||
nodeArray.filter {$0.inputRange.endIndex <= count}
|
||
}
|
||
return (result: result, nodes: updatedNodes)
|
||
}
|
||
|
||
}
|