Merge pull request #199 from azooKey/fix/clarify_incremental_update_case

fix: Zenzaiで学習が有効な場合に、低頻度の漢字を用いたありえない変換候補が提案される問題を修正
This commit is contained in:
Miwa
2025-06-04 01:35:57 +09:00
committed by GitHub

View File

@ -182,7 +182,7 @@ extension Kana2Kanji {
candidateIndex: Int, candidateIndex: Int,
candidates: [Candidate], candidates: [Candidate],
reviewResult: consuming ZenzContext.CandidateEvaluationResult, reviewResult: consuming ZenzContext.CandidateEvaluationResult,
constraint: inout PrefixConstraint constraint: inout PrefixConstraint,
) -> NextAction { ) -> NextAction {
switch reviewResult { switch reviewResult {
case .error: case .error:
@ -200,13 +200,18 @@ extension Kana2Kanji {
return .return(constraint: PrefixConstraint([]), alternativeConstraints: [], satisfied: false) return .return(constraint: PrefixConstraint([]), alternativeConstraints: [], satisfied: false)
} }
// //
let isIncrementalUpdate = prefixConstraint.hasPrefix(constraint.constraint)
constraint = PrefixConstraint(prefixConstraint) constraint = PrefixConstraint(prefixConstraint)
debug("update constraint:", constraint) debug("update constraint:", constraint)
// 使 if isIncrementalUpdate {
for (i, candidate) in candidates.indexed() where i != candidateIndex { // 使
if candidate.text.utf8.hasPrefix(prefixConstraint) && self.heuristicRetryValidation(candidate.text) { // prefix constraintcandidates
debug("found \(candidate.text) as another retry") // prefix constraint!isIncrementalUpdate
return .retry(candidateIndex: i) for (i, candidate) in candidates.indexed() where i != candidateIndex {
if candidate.text.utf8.hasPrefix(prefixConstraint) && self.heuristicRetryValidation(candidate.text) {
debug("found \(candidate.text) as another retry")
return .retry(candidateIndex: i)
}
} }
} }
return .continue return .continue
@ -219,12 +224,16 @@ extension Kana2Kanji {
} }
// //
debug("update whole constraint:", wholeConstraint) debug("update whole constraint:", wholeConstraint)
let isIncrementalUpdate = wholeConstraint.utf8.hasPrefix(constraint.constraint)
constraint = PrefixConstraint(Array(wholeConstraint.utf8), hasEOS: true) constraint = PrefixConstraint(Array(wholeConstraint.utf8), hasEOS: true)
// 使 if isIncrementalUpdate {
for (i, candidate) in candidates.indexed() where i != candidateIndex { // 使
if candidate.text == wholeConstraint && self.heuristicRetryValidation(candidate.text) { // prefix constraint!isIncrementalUpdate
debug("found \(candidate.text) as another retry") for (i, candidate) in candidates.indexed() where i != candidateIndex {
return .retry(candidateIndex: i) if candidate.text == wholeConstraint && self.heuristicRetryValidation(candidate.text) {
debug("found \(candidate.text) as another retry")
return .retry(candidateIndex: i)
}
} }
} }
return .continue return .continue