Skip to content

Commit 384b7a9

Browse files
committed
Megrez // Add isExplicitlyOverridden property to GramInPath, etc.
1 parent 1bddd32 commit 384b7a9

File tree

4 files changed

+26
-3
lines changed

4 files changed

+26
-3
lines changed

Sources/Megrez/2_PathFinder.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ extension Megrez {
7070
guard let node = parent[currentPos] else { break }
7171
let insertable = Megrez.GramInPath(
7272
gram: node.currentUnigram,
73-
isOverridden: node.isOverridden
73+
isOverridden: node.isOverridden,
74+
isExplicitlyOverridden: node.isExplicitlyOverridden
7475
)
7576
reversedSentence.append(insertable)
7677
currentPos -= node.keyArray.count

Sources/Megrez/3_KeyValuePaired.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ extension Megrez.Compositor {
156156
default: break
157157
}
158158
}
159-
result.append(.init(keyArray: theNode.keyArray, value: gram.value))
159+
result.append(.init(keyArray: theNode.keyArray, value: gram.value, score: gram.score))
160160
}
161161
}
162162
return result
@@ -176,6 +176,7 @@ extension Megrez.Compositor {
176176
public func overrideCandidate(
177177
_ candidate: Megrez.KeyValuePaired, at location: Int,
178178
overrideType: Megrez.Node.OverrideType = .withSpecified,
179+
isExplicitlyOverridden: Bool = false,
179180
enforceRetokenization: Bool = false,
180181
perceptionHandler: ((Megrez.PerceptionIntel) -> ())? = nil
181182
)
@@ -186,6 +187,7 @@ extension Megrez.Compositor {
186187
value: candidate.value,
187188
score: candidate.score < 0 ? candidate.score : nil,
188189
type: overrideType,
190+
isExplicitlyOverridden: isExplicitlyOverridden,
189191
enforceRetokenization: enforceRetokenization,
190192
perceptionHandler: perceptionHandler
191193
)
@@ -205,6 +207,7 @@ extension Megrez.Compositor {
205207
public func overrideCandidateLiteral(
206208
_ candidate: String,
207209
at location: Int, overrideType: Megrez.Node.OverrideType = .withSpecified,
210+
isExplicitlyOverridden: Bool = false,
208211
enforceRetokenization: Bool = false,
209212
perceptionHandler: ((Megrez.PerceptionIntel) -> ())? = nil
210213
)
@@ -215,6 +218,7 @@ extension Megrez.Compositor {
215218
value: candidate,
216219
score: nil,
217220
type: overrideType,
221+
isExplicitlyOverridden: isExplicitlyOverridden,
218222
enforceRetokenization: enforceRetokenization,
219223
perceptionHandler: perceptionHandler
220224
)
@@ -238,6 +242,7 @@ extension Megrez.Compositor {
238242
value: String,
239243
score specifiedScore: Double? = nil,
240244
type: Megrez.Node.OverrideType,
245+
isExplicitlyOverridden: Bool,
241246
enforceRetokenization: Bool,
242247
perceptionHandler: ((Megrez.PerceptionIntel) -> ())? = nil
243248
)
@@ -285,6 +290,7 @@ extension Megrez.Compositor {
285290
anchor.node.overrideStatus = .init(
286291
overridingScore: desiredScore,
287292
currentOverrideType: .withSpecified,
293+
isExplicitlyOverridden: isExplicitlyOverridden,
288294
currentUnigramIndex: anchor.node.currentUnigramIndex
289295
)
290296
}
@@ -333,6 +339,7 @@ extension Megrez.Compositor {
333339
anchor.node.overrideStatus = .init(
334340
overridingScore: demotionScore,
335341
currentOverrideType: .withSpecified,
342+
isExplicitlyOverridden: anchor.node.isExplicitlyOverridden,
336343
currentUnigramIndex: anchor.node.currentUnigramIndex
337344
)
338345
}

Sources/Megrez/5_Node.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ extension Megrez {
4545
self.segLength = node.segLength
4646
self.unigrams = node.unigrams.map(\.copy)
4747
self.currentOverrideType = node.currentOverrideType
48+
self.isExplicitlyOverridden = node.isExplicitlyOverridden
4849
self.currentUnigramIndex = node.currentUnigramIndex
4950
}
5051

@@ -80,6 +81,8 @@ extension Megrez {
8081
public private(set) var unigrams: [Megrez.Unigram]
8182
/// 該節點目前的覆寫狀態種類。為 `nil` 時表示無覆寫行為。
8283
public private(set) var currentOverrideType: Node.OverrideType?
84+
/// 是否為使用者明確覆寫(explicit override)、而非出於自動機制進行的複寫。
85+
public private(set) var isExplicitlyOverridden: Bool = false
8386

8487
/// 當前該節點所指向的(單元圖陣列內的)單元圖索引位置。
8588
public private(set) var currentUnigramIndex: Int = 0 {
@@ -124,12 +127,14 @@ extension Megrez {
124127
NodeOverrideStatus(
125128
overridingScore: overridingScore,
126129
currentOverrideType: currentOverrideType,
130+
isExplicitlyOverridden: isExplicitlyOverridden,
127131
currentUnigramIndex: currentUnigramIndex
128132
)
129133
}
130134
set {
131135
overridingScore = newValue.overridingScore
132136
currentOverrideType = newValue.currentOverrideType
137+
isExplicitlyOverridden = newValue.isExplicitlyOverridden
133138
// 防範 UnigramIndex 溢出,如果溢出則重設覆寫狀態
134139
if newValue.currentUnigramIndex >= 0, newValue.currentUnigramIndex < unigrams.count {
135140
currentUnigramIndex = newValue.currentUnigramIndex
@@ -221,10 +226,12 @@ public struct NodeOverrideStatus: Codable, Hashable {
221226
public init(
222227
overridingScore: Double = 114_514,
223228
currentOverrideType: Megrez.Node.OverrideType? = nil,
229+
isExplicitlyOverridden: Bool = false,
224230
currentUnigramIndex: Int = 0
225231
) {
226232
self.overridingScore = overridingScore
227233
self.currentOverrideType = currentOverrideType
234+
self.isExplicitlyOverridden = isExplicitlyOverridden
228235
self.currentUnigramIndex = currentUnigramIndex
229236
}
230237

@@ -236,4 +243,6 @@ public struct NodeOverrideStatus: Codable, Hashable {
236243
public var currentOverrideType: Megrez.Node.OverrideType?
237244
/// 當前單元圖索引位置
238245
public var currentUnigramIndex: Int
246+
/// 使用者是否明確覆寫(explicit override)
247+
public var isExplicitlyOverridden: Bool
239248
}

Sources/Megrez/8_GramInPath.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,21 @@ extension Megrez {
1212
public struct GramInPath: Codable, Hashable {
1313
// MARK: Lifecycle
1414

15-
public init(gram: Unigram, isOverridden: Bool) {
15+
public init(
16+
gram: Unigram,
17+
isOverridden: Bool,
18+
isExplicitlyOverridden: Bool = false
19+
) {
1620
self.gram = gram
1721
self.isOverridden = isOverridden
22+
self.isExplicitlyOverridden = isExplicitlyOverridden
1823
}
1924

2025
// MARK: Public
2126

2227
public let gram: Unigram
2328
public let isOverridden: Bool
29+
public let isExplicitlyOverridden: Bool
2430

2531
public var keyArray: [String] { gram.keyArray }
2632
public var value: String { gram.value }

0 commit comments

Comments
 (0)