// // mid_composition_prediction.swift // AzooKeyKanaKanjiConverter // // Created by ensan on 2020/12/09. // Copyright © 2020 ensan. All rights reserved. // import Foundation import SwiftUtils // 変換中の予測変換に関する実装 extension Kana2Kanji { /// CandidateDataの状態から予測変換候補を取得する関数 /// - parameters: /// - prepart: CandidateDataで、予測変換候補に至る前の部分。例えば「これはき」の「き」の部分から予測をする場合「これは」の部分がprepart。 /// - lastRuby: /// 「これはき」の「き」の部分 /// - N_best: 取得する数 /// - returns: /// 「これはき」から「これは今日」に対応する候補などを作って返す。 /// - note: /// この関数の役割は意味連接の考慮にある。 func getPredictionCandidates(composingText: ComposingText, prepart: CandidateData, lastClause: ClauseDataUnit, N_best: Int) -> [Candidate] { debug("getPredictionCandidates", composingText, lastClause.range, lastClause.text) let lastRuby = switch lastClause.range { case let .input(left, right): ComposingText.getConvertTarget(for: composingText.input[left..= newValue}) ?? -1) + 1 if lastindex >= N_best { continue } var nodedata: [DicdataElement] = datas nodedata.append(data) let candidate: Candidate = Candidate( text: lastCandidate.text + data.word, value: newValue, composingCount: composingCount, lastMid: includeMMValueCalculation ? data.mid:lastMid, data: nodedata ) // カウントがオーバーしそうな場合は除去する if result.count >= N_best { result.removeLast() } // removeしてからinsertした方が速い (insertはO(N)なので) result.insert(candidate, at: lastindex) } return result } }