mirror of
https://github.com/mii443/AzooKeyKanaKanjiConverter.git
synced 2025-08-22 15:05:26 +00:00
Rename for merge
This commit is contained in:
@ -78,7 +78,7 @@ import SwiftUtils
|
||||
/// 確定操作後、学習メモリをアップデートする関数。
|
||||
/// - Parameters:
|
||||
/// - candidate: 確定された候補。
|
||||
public func updateLearningData(_ candidate: Candidate, with predictionCandidate: PredictionCandidate) {
|
||||
public func updateLearningData(_ candidate: Candidate, with predictionCandidate: PostCompositionPredictionCandidate) {
|
||||
self.converter.dicdataStore.updateLearningData(candidate, with: predictionCandidate)
|
||||
self.lastData = predictionCandidate.lastData
|
||||
}
|
||||
@ -130,8 +130,8 @@ import SwiftUtils
|
||||
/// - candidates: uniqueを実行する候補列。
|
||||
/// - Returns:
|
||||
/// `candidates`から重複を削除したもの。
|
||||
private func getUniquePredictionCandidate(_ candidates: some Sequence<PredictionCandidate>, seenCandidates: Set<String> = []) -> [PredictionCandidate] {
|
||||
var result = [PredictionCandidate]()
|
||||
private func getUniquePostCompositionPredictionCandidate(_ candidates: some Sequence<PostCompositionPredictionCandidate>, seenCandidates: Set<String> = []) -> [PostCompositionPredictionCandidate] {
|
||||
var result = [PostCompositionPredictionCandidate]()
|
||||
for candidate in candidates where !candidate.text.isEmpty && !seenCandidates.contains(candidate.text) {
|
||||
if let index = result.firstIndex(where: {$0.text == candidate.text}) {
|
||||
if result[index].value < candidate.value {
|
||||
@ -623,9 +623,9 @@ import SwiftUtils
|
||||
}
|
||||
|
||||
/// 変換確定後の予測変換候補を要求する関数
|
||||
public func requestPredictionCandidates(leftSideCandidate: Candidate, options: ConvertRequestOptions) -> [PredictionCandidate] {
|
||||
public func requestPostCompositionPredictionCandidates(leftSideCandidate: Candidate, options: ConvertRequestOptions) -> [PostCompositionPredictionCandidate] {
|
||||
// ゼロヒント予測変換に基づく候補を列挙
|
||||
var zeroHintResults = self.getUniquePredictionCandidate(self.converter.getZeroHintPredictionCandidates(preparts: [leftSideCandidate], N_best: 15))
|
||||
var zeroHintResults = self.getUniquePostCompositionPredictionCandidate(self.converter.getZeroHintPredictionCandidates(preparts: [leftSideCandidate], N_best: 15))
|
||||
do {
|
||||
// 助詞は最大3つに制限する
|
||||
var joshiCount = 0
|
||||
@ -650,26 +650,28 @@ import SwiftUtils
|
||||
let predictionResults = self.converter.getPredictionCandidates(prepart: leftSideCandidate, N_best: 15)
|
||||
// 絵文字を追加
|
||||
let replacer = TextReplacer()
|
||||
var emojiCandidates: [PredictionCandidate] = []
|
||||
var emojiCandidates: [PostCompositionPredictionCandidate] = []
|
||||
for data in leftSideCandidate.data where DicdataStore.includeMMValueCalculation(data) {
|
||||
let result = replacer.getSearchResult(query: data.word, target: [.emoji], ignoreNonBaseEmoji: true)
|
||||
for emoji in result {
|
||||
emojiCandidates.append(PredictionCandidate(text: emoji.text, value: -3, type: .additional(data: [.init(word: emoji.text, ruby: "エモジ", cid: CIDData.記号.cid, mid: MIDData.一般.mid, value: -3)])))
|
||||
emojiCandidates.append(PostCompositionPredictionCandidate(text: emoji.text, value: -3, type: .additional(data: [.init(word: emoji.text, ruby: "エモジ", cid: CIDData.記号.cid, mid: MIDData.一般.mid, value: -3)])))
|
||||
}
|
||||
}
|
||||
emojiCandidates = self.getUniquePredictionCandidate(emojiCandidates)
|
||||
emojiCandidates = self.getUniquePostCompositionPredictionCandidate(emojiCandidates)
|
||||
|
||||
var results: [PredictionCandidate] = []
|
||||
var results: [PostCompositionPredictionCandidate] = []
|
||||
var seenCandidates: Set<String> = []
|
||||
|
||||
results.append(contentsOf: emojiCandidates.suffix(3))
|
||||
seenCandidates.formUnion(emojiCandidates.suffix(3).map {$0.text})
|
||||
|
||||
let predictions = self.getUniquePredictionCandidate(predictionResults, seenCandidates: seenCandidates).min(count: (10 - results.count) / 2, sortedBy: {$0.value > $1.value})
|
||||
// 残りの半分。ただしzeroHintResultsが足りない場合は全部で10個になるようにする。
|
||||
let predictionsCount = max((10 - results.count) / 2, 10 - results.count - zeroHintResults.count)
|
||||
let predictions = self.getUniquePostCompositionPredictionCandidate(predictionResults, seenCandidates: seenCandidates).min(count: predictionsCount, sortedBy: {$0.value > $1.value})
|
||||
results.append(contentsOf: predictions)
|
||||
seenCandidates.formUnion(predictions.map {$0.text})
|
||||
|
||||
let zeroHints = self.getUniquePredictionCandidate(zeroHintResults, seenCandidates: seenCandidates)
|
||||
let zeroHints = self.getUniquePostCompositionPredictionCandidate(zeroHintResults, seenCandidates: seenCandidates)
|
||||
results.append(contentsOf: zeroHints.min(count: 10 - results.count, sortedBy: {$0.value > $1.value}))
|
||||
return results
|
||||
}
|
||||
|
@ -616,7 +616,7 @@ public final class DicdataStore {
|
||||
}
|
||||
// 予測変換に基づいて学習を反映する
|
||||
// TODO: previousの扱いを改善したい
|
||||
func updateLearningData(_ candidate: Candidate, with predictionCandidate: PredictionCandidate) {
|
||||
func updateLearningData(_ candidate: Candidate, with predictionCandidate: PostCompositionPredictionCandidate) {
|
||||
switch predictionCandidate.type {
|
||||
case .additional(data: let data):
|
||||
self.learningManager.update(data: candidate.data, updatePart: data)
|
||||
|
@ -1,6 +1,6 @@
|
||||
//
|
||||
// getPrediction.swift
|
||||
// Keyboard
|
||||
// mid_composition_prediction.swift
|
||||
// AzooKeyKanaKanjiConverter
|
||||
//
|
||||
// Created by ensan on 2020/12/09.
|
||||
// Copyright © 2020 ensan. All rights reserved.
|
||||
@ -9,6 +9,7 @@
|
||||
import Foundation
|
||||
import SwiftUtils
|
||||
|
||||
// 変換中の予測変換に関する実装
|
||||
extension Kana2Kanji {
|
||||
/// CandidateDataの状態から予測変換候補を取得する関数
|
||||
/// - parameters:
|
@ -1,12 +1,13 @@
|
||||
//
|
||||
// prediction.swift
|
||||
//
|
||||
// post_composition_prediction.swift
|
||||
//
|
||||
//
|
||||
// Created by miwa on 2023/09/19.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
// 確定後の予測変換に関係する実装
|
||||
extension Kana2Kanji {
|
||||
func mergeCandidates(_ left: Candidate, _ right: Candidate) -> Candidate {
|
||||
guard let leftLast = left.data.last, let rightFirst = right.data.first else {
|
||||
@ -31,8 +32,8 @@ extension Kana2Kanji {
|
||||
)
|
||||
}
|
||||
|
||||
func getPredictionCandidates(prepart: Candidate, N_best: Int) -> [PredictionCandidate] {
|
||||
var result: [PredictionCandidate] = []
|
||||
func getPredictionCandidates(prepart: Candidate, N_best: Int) -> [PostCompositionPredictionCandidate] {
|
||||
var result: [PostCompositionPredictionCandidate] = []
|
||||
var count = 1
|
||||
var prefixCandidate = prepart
|
||||
prefixCandidate.actions = []
|
||||
@ -97,8 +98,8 @@ extension Kana2Kanji {
|
||||
/// ゼロヒント予測変換の結果
|
||||
/// - note:
|
||||
/// 「食べちゃ-てる」「食べちゃ-いる」などの間抜けな候補を返すことが多いため、学習によるもの以外を無効化している。
|
||||
func getZeroHintPredictionCandidates(preparts: some Collection<Candidate>, N_best: Int) -> [PredictionCandidate] {
|
||||
var result: [PredictionCandidate] = []
|
||||
func getZeroHintPredictionCandidates(preparts: some Collection<Candidate>, N_best: Int) -> [PostCompositionPredictionCandidate] {
|
||||
var result: [PostCompositionPredictionCandidate] = []
|
||||
for candidate in preparts {
|
||||
if let last = candidate.data.last {
|
||||
let dicdata = self.dicdataStore.getZeroHintPredictionDicdata(lastRcid: last.rcid)
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// PredictionCandidate.swift
|
||||
// PostCompositionPredictionCandidate.swift
|
||||
//
|
||||
//
|
||||
// Created by miwa on 2023/09/19.
|
||||
@ -7,8 +7,9 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
public struct PredictionCandidate {
|
||||
public init(text: String, value: PValue, type: PredictionCandidate.PredictionType) {
|
||||
/// 確定後予測変換候補を表す型
|
||||
public struct PostCompositionPredictionCandidate {
|
||||
public init(text: String, value: PValue, type: PostCompositionPredictionCandidate.PredictionType) {
|
||||
self.text = text
|
||||
self.value = value
|
||||
self.type = type
|
||||
@ -22,6 +23,8 @@ public struct PredictionCandidate {
|
||||
public var text: String
|
||||
public var value: PValue
|
||||
public var type: PredictionType
|
||||
|
||||
/// 確定後予測変換を終了すべきか否か。句点では終了する。
|
||||
public var isTerminal: Bool
|
||||
|
||||
public func join(to candidate: Candidate) -> Candidate {
|
Reference in New Issue
Block a user