Files
AzooKeyKanaKanjiConverter/Sources/KanaKanjiConverterModule/ConversionAlgorithms/Kana2Kanji.swift

52 lines
1.5 KiB
Swift

//
// kana2kanji.swift
// Kana2KajiProject
//
// Created by ensan on 2020/09/02.
// Copyright © 2020 ensan. All rights reserved.
//
import Foundation
#if os(iOS) || os(tvOS)
public typealias PValue = Float16
#else
public typealias PValue = Float32
#endif
struct Kana2Kanji {
var dicdataStore = DicdataStore()
/// CandidateDataCandidate
/// - parameters:
/// - data: CandidateData
/// - returns:
/// Candidate
/// - note:
///
func processClauseCandidate(_ data: CandidateData) -> Candidate {
let mmValue: (value: PValue, mid: Int) = data.clauses.reduce((value: .zero, mid: MIDData.EOS.mid)) { result, data in
(
value: result.value + self.dicdataStore.getMMValue(result.mid, data.clause.mid),
mid: data.clause.mid
)
}
let text = data.clauses.map {$0.clause.text}.joined()
let value = data.clauses.last!.value + mmValue.value
let lastMid = data.clauses.last!.clause.mid
let composingCount: ComposingCount = data.clauses.reduce(into: .inputCount(0)) {
for range in $1.clause.ranges {
$0 = .composite($0, range.count)
}
}
return Candidate(
text: text,
value: value,
composingCount: composingCount,
lastMid: lastMid,
data: data.data
)
}
}