@termdock/twlint 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,7 +6,7 @@ export declare class DictionaryManager {
6
6
  constructor(dictionariesPath?: string, maxCacheSize?: number);
7
7
  loadDictionary(name: string): Promise<CompiledDict>;
8
8
  findMatches(text: string): MatchResult[];
9
- private addMatchWithPriority;
9
+ private addMatch;
10
10
  scanAvailableDictionaries(): Promise<string[]>;
11
11
  getLoadedDictionaries(): string[];
12
12
  clearCache(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"dictionary-manager.d.ts","sourceRoot":"","sources":["../../src/core/dictionary-manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAmB,MAAM,aAAa,CAAA;AAK7E,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,KAAK,CAAyC;IACtD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAuB;gBAE5C,gBAAgB,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;IActD,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAiBzD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE;IAmDxC,OAAO,CAAC,oBAAoB;IAkCtB,yBAAyB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAepD,qBAAqB,IAAI,MAAM,EAAE;IAIjC,UAAU,IAAI,IAAI;IAKlB,wBAAwB,IAAI,MAAM,EAAE;CAIrC"}
1
+ {"version":3,"file":"dictionary-manager.d.ts","sourceRoot":"","sources":["../../src/core/dictionary-manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAmB,MAAM,aAAa,CAAA;AAK7E,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,KAAK,CAAyC;IACtD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAuB;gBAE5C,gBAAgB,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;IActD,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAiBzD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE;IAgIxC,OAAO,CAAC,QAAQ;IAgBV,yBAAyB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAepD,qBAAqB,IAAI,MAAM,EAAE;IAIjC,UAAU,IAAI,IAAI;IAKlB,wBAAwB,IAAI,MAAM,EAAE;CAIrC"}
@@ -38,7 +38,6 @@ export class DictionaryManager {
38
38
  }
39
39
  findMatches(text) {
40
40
  const allMatches = [];
41
- const processedRanges = new Map(); // 改為 Map 來追蹤最佳匹配
42
41
  for (const dict of this.cache.values()) {
43
42
  // 先處理所有基本詞彙匹配
44
43
  const basicTerms = Object.keys(dict.lookup).filter(term => !term.includes('_'));
@@ -51,7 +50,7 @@ export class DictionaryManager {
51
50
  continue;
52
51
  const matches = strategy.match(text, term, entry.context);
53
52
  for (const match of matches) {
54
- this.addMatchWithPriority(allMatches, processedRanges, match, entry, dict.metadata.name);
53
+ this.addMatch(allMatches, match, entry, dict.metadata.name);
55
54
  }
56
55
  // 對於語境敏感詞彙,同時檢查其變體
57
56
  if (entry.match_type === 'context_sensitive') {
@@ -63,42 +62,95 @@ export class DictionaryManager {
63
62
  continue;
64
63
  const variantMatches = variantStrategy.match(text, term, variantEntry.context);
65
64
  for (const match of variantMatches) {
66
- this.addMatchWithPriority(allMatches, processedRanges, match, variantEntry, dict.metadata.name, true);
65
+ this.addMatch(allMatches, match, variantEntry, dict.metadata.name, true);
67
66
  }
68
67
  }
69
68
  }
70
69
  }
71
70
  }
72
- // 按信心度和位置排序:高信心度優先,相同信心度則按位置順序
73
- return allMatches.sort((a, b) => {
71
+ // 1. 排序:優先長度,其次信心度,最後位置
72
+ // Sort logic: Longest length > Higher confidence > Earlier position
73
+ allMatches.sort((a, b) => {
74
+ const lenA = a.end - a.start;
75
+ const lenB = b.end - b.start;
76
+ if (lenA !== lenB)
77
+ return lenB - lenA; // Longest first
74
78
  if (Math.abs(a.confidence - b.confidence) > 0.01) {
75
- return b.confidence - a.confidence;
79
+ return b.confidence - a.confidence; // Higher confidence first
76
80
  }
77
- return a.start - b.start;
81
+ return a.start - b.start; // Earlier position first
78
82
  });
83
+ // 2. 去重:過濾掉與高優先級匹配重疊的結果
84
+ // Deduplication using Interval Merging (O(N log N) or O(N) since already sorted by length?)
85
+ // Actually, simply maintaining a list of disjoint intervals is enough.
86
+ // Since matches are sorted by Length DESC, we iterate and check if the current match
87
+ // overlaps with ANY already accepted match.
88
+ // To do this efficiently:
89
+ // We can use a simple boolean array if text is short, but text can be long.
90
+ // Better: Maintain a sorted list of accepted intervals [start, end).
91
+ // For each candidate, check if it overlaps with any interval in the list.
92
+ // Since we process in priority order, if it doesn't overlap, we add it.
93
+ const acceptedMatches = [];
94
+ // 為了效能,我們實作一個簡單的區間檢查
95
+ // 由於我們可能有大量的匹配,線性掃描 acceptedMatches (O(M)) 對每個候選 (N) -> O(NM)。
96
+ // 如果 M 很大,這會慢。
97
+ // 優化:使用一個簡單的遮罩或區間樹?
98
+ // 考量到 JS 的 overhead,對於一般長度的文本,線性掃描可能已經足夠快。
99
+ // 但 Reviewer 提到效能,我們來做一個稍微好一點的檢查。
100
+ // 我們可以使用一個 Uint8Array 來標記被佔用的位置,如果文本長度允許 (e.g. < 1MB)。
101
+ // 這是 O(1) 檢查,O(L) 標記。
102
+ // 如果文本太長,回退到區間檢查。
103
+ // 假設大部分檢查的文本都在 100KB 以內。
104
+ if (text.length < 100000) {
105
+ const occupied = new Uint8Array(text.length);
106
+ for (const candidate of allMatches) {
107
+ let isOverlapping = false;
108
+ // Check overlap
109
+ for (let i = candidate.start; i < candidate.end; i++) {
110
+ if (occupied[i] === 1) {
111
+ isOverlapping = true;
112
+ break;
113
+ }
114
+ }
115
+ if (!isOverlapping) {
116
+ acceptedMatches.push(candidate);
117
+ // Mark occupied
118
+ for (let i = candidate.start; i < candidate.end; i++) {
119
+ occupied[i] = 1;
120
+ }
121
+ }
122
+ }
123
+ }
124
+ else {
125
+ // Fallback for very long text: Interval List
126
+ // Keep intervals sorted by start
127
+ const acceptedIntervals = [];
128
+ for (const candidate of allMatches) {
129
+ // Binary search or linear scan? Linear scan is O(M).
130
+ // Check overlap with any accepted interval
131
+ const isOverlapping = acceptedIntervals.some(interval => candidate.start < interval.end && candidate.end > interval.start);
132
+ if (!isOverlapping) {
133
+ acceptedMatches.push(candidate);
134
+ acceptedIntervals.push({ start: candidate.start, end: candidate.end });
135
+ // No need to sort acceptedIntervals every time if we just use .some()
136
+ // But for binary search we would need to maintain order.
137
+ // Given the typical number of matches, .some() is acceptable here compared to strict O(N^2) if M is small.
138
+ // Wait, previous logic WAS O(N*M) where M is accepted count. This is same.
139
+ // But Uint8Array is O(N * Len).
140
+ }
141
+ }
142
+ }
143
+ // 3. 最終排序:按位置輸出,符合閱讀順序
144
+ return acceptedMatches.sort((a, b) => a.start - b.start);
79
145
  }
80
- addMatchWithPriority(allMatches, processedRanges, match, entry, dictName, isVariant = false) {
81
- const rangeKey = `${match.start}-${match.end}`;
82
- const newMatch = {
146
+ addMatch(allMatches, match, entry, dictName, isVariant = false) {
147
+ allMatches.push({
83
148
  ...match,
84
149
  replacement: entry.taiwan,
85
150
  confidence: entry.confidence,
86
151
  rule: `${dictName}-${entry.match_type || 'exact'}${isVariant ? '-variant' : ''}`,
87
152
  autofix_safe: entry.autofix_safe || false
88
- };
89
- // 如果這個範圍還沒有匹配,或者新匹配的信心度更高
90
- const existingMatch = processedRanges.get(rangeKey);
91
- if (!existingMatch || newMatch.confidence > existingMatch.confidence) {
92
- if (existingMatch) {
93
- // 移除舊的匹配
94
- const index = allMatches.indexOf(existingMatch);
95
- if (index > -1) {
96
- allMatches.splice(index, 1);
97
- }
98
- }
99
- processedRanges.set(rangeKey, newMatch);
100
- allMatches.push(newMatch);
101
- }
153
+ });
102
154
  }
103
155
  async scanAvailableDictionaries() {
104
156
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"dictionary-manager.js","sourceRoot":"","sources":["../../src/core/dictionary-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dictionary-manager.js","sourceRoot":"","sources":["../../src/core/dictionary-manager.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "metadata": {
3
3
  "name": "academic",
4
- "version": "1.0.0",
4
+ "version": "1.2.0",
5
5
  "entries": 12
6
6
  },
7
7
  "lookup": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "metadata": {
3
3
  "name": "ai-emerging-tech",
4
- "version": "1.0.0",
4
+ "version": "1.2.0",
5
5
  "entries": 106
6
6
  },
7
7
  "lookup": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "metadata": {
3
3
  "name": "business-finance",
4
- "version": "1.0.0",
4
+ "version": "1.2.0",
5
5
  "entries": 111
6
6
  },
7
7
  "lookup": {
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "metadata": {
3
3
  "name": "core",
4
- "version": "1.0.0",
5
- "entries": 142
4
+ "version": "1.2.0",
5
+ "entries": 157
6
6
  },
7
7
  "lookup": {
8
8
  "访问": {
@@ -4012,6 +4012,390 @@
4012
4012
  "reason": "台灣檔案操作標準",
4013
4013
  "match_type": "exact",
4014
4014
  "autofix_safe": true
4015
+ },
4016
+ "包含": {
4017
+ "taiwan": "包含",
4018
+ "confidence": 1,
4019
+ "category": "fixed-term",
4020
+ "reason": "避免 '包' 被錯誤匹配",
4021
+ "match_type": "exact",
4022
+ "autofix_safe": false
4023
+ },
4024
+ "包含_contain": {
4025
+ "taiwan": "包含",
4026
+ "confidence": 1,
4027
+ "category": "fixed-term",
4028
+ "reason": "避免 '包' 被錯誤匹配",
4029
+ "match_type": "exact",
4030
+ "autofix_safe": false
4031
+ },
4032
+ "包括": {
4033
+ "taiwan": "包括",
4034
+ "confidence": 1,
4035
+ "category": "fixed-term",
4036
+ "reason": "避免 '包' 被錯誤匹配",
4037
+ "match_type": "exact",
4038
+ "autofix_safe": false
4039
+ },
4040
+ "包括_include": {
4041
+ "taiwan": "包括",
4042
+ "confidence": 1,
4043
+ "category": "fixed-term",
4044
+ "reason": "避免 '包' 被錯誤匹配",
4045
+ "match_type": "exact",
4046
+ "autofix_safe": false
4047
+ },
4048
+ "包装": {
4049
+ "taiwan": "包裝",
4050
+ "confidence": 1,
4051
+ "category": "fixed-term",
4052
+ "reason": "避免 '包' 被錯誤匹配",
4053
+ "match_type": "exact",
4054
+ "autofix_safe": false
4055
+ },
4056
+ "包装_packaging": {
4057
+ "taiwan": "包裝",
4058
+ "confidence": 1,
4059
+ "category": "fixed-term",
4060
+ "reason": "避免 '包' 被錯誤匹配",
4061
+ "match_type": "exact",
4062
+ "autofix_safe": false
4063
+ },
4064
+ "包裝": {
4065
+ "taiwan": "包裝",
4066
+ "confidence": 1,
4067
+ "category": "fixed-term",
4068
+ "reason": "避免 '包' 被錯誤匹配",
4069
+ "match_type": "exact",
4070
+ "autofix_safe": false
4071
+ },
4072
+ "包裝_packaging": {
4073
+ "taiwan": "包裝",
4074
+ "confidence": 1,
4075
+ "category": "fixed-term",
4076
+ "reason": "避免 '包' 被錯誤匹配",
4077
+ "match_type": "exact",
4078
+ "autofix_safe": false
4079
+ },
4080
+ "人类": {
4081
+ "taiwan": "人類",
4082
+ "confidence": 1,
4083
+ "category": "fixed-term",
4084
+ "reason": "避免 '类' 被錯誤匹配",
4085
+ "match_type": "exact",
4086
+ "autofix_safe": false
4087
+ },
4088
+ "人类_human": {
4089
+ "taiwan": "人類",
4090
+ "confidence": 1,
4091
+ "category": "fixed-term",
4092
+ "reason": "避免 '类' 被錯誤匹配",
4093
+ "match_type": "exact",
4094
+ "autofix_safe": false
4095
+ },
4096
+ "人類": {
4097
+ "taiwan": "人類",
4098
+ "confidence": 1,
4099
+ "category": "fixed-term",
4100
+ "reason": "避免 '类' 被錯誤匹配",
4101
+ "match_type": "exact",
4102
+ "autofix_safe": false
4103
+ },
4104
+ "人類_human": {
4105
+ "taiwan": "人類",
4106
+ "confidence": 1,
4107
+ "category": "fixed-term",
4108
+ "reason": "避免 '类' 被錯誤匹配",
4109
+ "match_type": "exact",
4110
+ "autofix_safe": false
4111
+ },
4112
+ "种类": {
4113
+ "taiwan": "種類",
4114
+ "confidence": 1,
4115
+ "category": "fixed-term",
4116
+ "reason": "避免 '类' 被錯誤匹配",
4117
+ "match_type": "exact",
4118
+ "autofix_safe": false
4119
+ },
4120
+ "种类_kind": {
4121
+ "taiwan": "種類",
4122
+ "confidence": 1,
4123
+ "category": "fixed-term",
4124
+ "reason": "避免 '类' 被錯誤匹配",
4125
+ "match_type": "exact",
4126
+ "autofix_safe": false
4127
+ },
4128
+ "種類": {
4129
+ "taiwan": "種類",
4130
+ "confidence": 1,
4131
+ "category": "fixed-term",
4132
+ "reason": "避免 '类' 被錯誤匹配",
4133
+ "match_type": "exact",
4134
+ "autofix_safe": false
4135
+ },
4136
+ "種類_kind": {
4137
+ "taiwan": "種類",
4138
+ "confidence": 1,
4139
+ "category": "fixed-term",
4140
+ "reason": "避免 '类' 被錯誤匹配",
4141
+ "match_type": "exact",
4142
+ "autofix_safe": false
4143
+ },
4144
+ "多云": {
4145
+ "taiwan": "多雲",
4146
+ "confidence": 1,
4147
+ "category": "fixed-term",
4148
+ "reason": "避免 '云' 被錯誤匹配",
4149
+ "match_type": "exact",
4150
+ "autofix_safe": false
4151
+ },
4152
+ "多云_cloudy": {
4153
+ "taiwan": "多雲",
4154
+ "confidence": 1,
4155
+ "category": "fixed-term",
4156
+ "reason": "避免 '云' 被錯誤匹配",
4157
+ "match_type": "exact",
4158
+ "autofix_safe": false
4159
+ },
4160
+ "多雲": {
4161
+ "taiwan": "多雲",
4162
+ "confidence": 1,
4163
+ "category": "fixed-term",
4164
+ "reason": "避免 '云' 被錯誤匹配",
4165
+ "match_type": "exact",
4166
+ "autofix_safe": false
4167
+ },
4168
+ "多雲_cloudy": {
4169
+ "taiwan": "多雲",
4170
+ "confidence": 1,
4171
+ "category": "fixed-term",
4172
+ "reason": "避免 '云' 被錯誤匹配",
4173
+ "match_type": "exact",
4174
+ "autofix_safe": false
4175
+ },
4176
+ "区域": {
4177
+ "taiwan": "區域",
4178
+ "confidence": 1,
4179
+ "category": "fixed-term",
4180
+ "reason": "避免 '域' 被錯誤匹配",
4181
+ "match_type": "exact",
4182
+ "autofix_safe": false
4183
+ },
4184
+ "区域_region": {
4185
+ "taiwan": "區域",
4186
+ "confidence": 1,
4187
+ "category": "fixed-term",
4188
+ "reason": "避免 '域' 被錯誤匹配",
4189
+ "match_type": "exact",
4190
+ "autofix_safe": false
4191
+ },
4192
+ "區域": {
4193
+ "taiwan": "區域",
4194
+ "confidence": 1,
4195
+ "category": "fixed-term",
4196
+ "reason": "避免 '域' 被錯誤匹配",
4197
+ "match_type": "exact",
4198
+ "autofix_safe": false
4199
+ },
4200
+ "區域_region": {
4201
+ "taiwan": "區域",
4202
+ "confidence": 1,
4203
+ "category": "fixed-term",
4204
+ "reason": "避免 '域' 被錯誤匹配",
4205
+ "match_type": "exact",
4206
+ "autofix_safe": false
4207
+ },
4208
+ "领域": {
4209
+ "taiwan": "領域",
4210
+ "confidence": 1,
4211
+ "category": "fixed-term",
4212
+ "reason": "避免 '域' 被錯誤匹配",
4213
+ "match_type": "exact",
4214
+ "autofix_safe": false
4215
+ },
4216
+ "领域_field_domain": {
4217
+ "taiwan": "領域",
4218
+ "confidence": 1,
4219
+ "category": "fixed-term",
4220
+ "reason": "避免 '域' 被錯誤匹配",
4221
+ "match_type": "exact",
4222
+ "autofix_safe": false
4223
+ },
4224
+ "領域": {
4225
+ "taiwan": "領域",
4226
+ "confidence": 1,
4227
+ "category": "fixed-term",
4228
+ "reason": "避免 '域' 被錯誤匹配",
4229
+ "match_type": "exact",
4230
+ "autofix_safe": false
4231
+ },
4232
+ "領域_field_domain": {
4233
+ "taiwan": "領域",
4234
+ "confidence": 1,
4235
+ "category": "fixed-term",
4236
+ "reason": "避免 '域' 被錯誤匹配",
4237
+ "match_type": "exact",
4238
+ "autofix_safe": false
4239
+ },
4240
+ "客栈": {
4241
+ "taiwan": "客棧",
4242
+ "confidence": 1,
4243
+ "category": "fixed-term",
4244
+ "reason": "避免 '栈' 被錯誤匹配",
4245
+ "match_type": "exact",
4246
+ "autofix_safe": false
4247
+ },
4248
+ "客栈_inn": {
4249
+ "taiwan": "客棧",
4250
+ "confidence": 1,
4251
+ "category": "fixed-term",
4252
+ "reason": "避免 '栈' 被錯誤匹配",
4253
+ "match_type": "exact",
4254
+ "autofix_safe": false
4255
+ },
4256
+ "客棧": {
4257
+ "taiwan": "客棧",
4258
+ "confidence": 1,
4259
+ "category": "fixed-term",
4260
+ "reason": "避免 '栈' 被錯誤匹配",
4261
+ "match_type": "exact",
4262
+ "autofix_safe": false
4263
+ },
4264
+ "客棧_inn": {
4265
+ "taiwan": "客棧",
4266
+ "confidence": 1,
4267
+ "category": "fixed-term",
4268
+ "reason": "避免 '栈' 被錯誤匹配",
4269
+ "match_type": "exact",
4270
+ "autofix_safe": false
4271
+ },
4272
+ "栈道": {
4273
+ "taiwan": "棧道",
4274
+ "confidence": 1,
4275
+ "category": "fixed-term",
4276
+ "reason": "避免 '栈' 被錯誤匹配",
4277
+ "match_type": "exact",
4278
+ "autofix_safe": false
4279
+ },
4280
+ "栈道_plank_road": {
4281
+ "taiwan": "棧道",
4282
+ "confidence": 1,
4283
+ "category": "fixed-term",
4284
+ "reason": "避免 '栈' 被錯誤匹配",
4285
+ "match_type": "exact",
4286
+ "autofix_safe": false
4287
+ },
4288
+ "棧道": {
4289
+ "taiwan": "棧道",
4290
+ "confidence": 1,
4291
+ "category": "fixed-term",
4292
+ "reason": "避免 '栈' 被錯誤匹配",
4293
+ "match_type": "exact",
4294
+ "autofix_safe": false
4295
+ },
4296
+ "棧道_plank_road": {
4297
+ "taiwan": "棧道",
4298
+ "confidence": 1,
4299
+ "category": "fixed-term",
4300
+ "reason": "避免 '栈' 被錯誤匹配",
4301
+ "match_type": "exact",
4302
+ "autofix_safe": false
4303
+ },
4304
+ "河流": {
4305
+ "taiwan": "河流",
4306
+ "confidence": 1,
4307
+ "category": "fixed-term",
4308
+ "reason": "避免 '流' 被錯誤匹配",
4309
+ "match_type": "exact",
4310
+ "autofix_safe": false
4311
+ },
4312
+ "河流_river": {
4313
+ "taiwan": "河流",
4314
+ "confidence": 1,
4315
+ "category": "fixed-term",
4316
+ "reason": "避免 '流' 被錯誤匹配",
4317
+ "match_type": "exact",
4318
+ "autofix_safe": false
4319
+ },
4320
+ "交流": {
4321
+ "taiwan": "交流",
4322
+ "confidence": 1,
4323
+ "category": "fixed-term",
4324
+ "reason": "避免 '流' 被錯誤匹配",
4325
+ "match_type": "exact",
4326
+ "autofix_safe": false
4327
+ },
4328
+ "交流_communicate": {
4329
+ "taiwan": "交流",
4330
+ "confidence": 1,
4331
+ "category": "fixed-term",
4332
+ "reason": "避免 '流' 被錯誤匹配",
4333
+ "match_type": "exact",
4334
+ "autofix_safe": false
4335
+ },
4336
+ "考卷": {
4337
+ "taiwan": "考卷",
4338
+ "confidence": 1,
4339
+ "category": "fixed-term",
4340
+ "reason": "避免 '卷' 被錯誤匹配",
4341
+ "match_type": "exact",
4342
+ "autofix_safe": false
4343
+ },
4344
+ "考卷_exam_paper": {
4345
+ "taiwan": "考卷",
4346
+ "confidence": 1,
4347
+ "category": "fixed-term",
4348
+ "reason": "避免 '卷' 被錯誤匹配",
4349
+ "match_type": "exact",
4350
+ "autofix_safe": false
4351
+ },
4352
+ "问卷": {
4353
+ "taiwan": "問卷",
4354
+ "confidence": 1,
4355
+ "category": "fixed-term",
4356
+ "reason": "避免 '卷' 被錯誤匹配",
4357
+ "match_type": "exact",
4358
+ "autofix_safe": false
4359
+ },
4360
+ "问卷_questionnaire": {
4361
+ "taiwan": "問卷",
4362
+ "confidence": 1,
4363
+ "category": "fixed-term",
4364
+ "reason": "避免 '卷' 被錯誤匹配",
4365
+ "match_type": "exact",
4366
+ "autofix_safe": false
4367
+ },
4368
+ "問卷": {
4369
+ "taiwan": "問卷",
4370
+ "confidence": 1,
4371
+ "category": "fixed-term",
4372
+ "reason": "避免 '卷' 被錯誤匹配",
4373
+ "match_type": "exact",
4374
+ "autofix_safe": false
4375
+ },
4376
+ "問卷_questionnaire": {
4377
+ "taiwan": "問卷",
4378
+ "confidence": 1,
4379
+ "category": "fixed-term",
4380
+ "reason": "避免 '卷' 被錯誤匹配",
4381
+ "match_type": "exact",
4382
+ "autofix_safe": false
4383
+ },
4384
+ "土堆": {
4385
+ "taiwan": "土堆",
4386
+ "confidence": 1,
4387
+ "category": "fixed-term",
4388
+ "reason": "避免 '堆' 被錯誤匹配",
4389
+ "match_type": "exact",
4390
+ "autofix_safe": false
4391
+ },
4392
+ "土堆_mound": {
4393
+ "taiwan": "土堆",
4394
+ "confidence": 1,
4395
+ "category": "fixed-term",
4396
+ "reason": "避免 '堆' 被錯誤匹配",
4397
+ "match_type": "exact",
4398
+ "autofix_safe": false
4015
4399
  }
4016
4400
  }
4017
4401
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "metadata": {
3
3
  "name": "hardware-3c",
4
- "version": "1.0.0",
4
+ "version": "1.2.0",
5
5
  "entries": 89
6
6
  },
7
7
  "lookup": {
@@ -26,7 +26,7 @@
26
26
  "description": "核心詞庫",
27
27
  "type": "core",
28
28
  "required": true,
29
- "entries": 142
29
+ "entries": 157
30
30
  },
31
31
  {
32
32
  "name": "extended",
@@ -68,7 +68,7 @@
68
68
  "description": "軟體開發",
69
69
  "type": "domain",
70
70
  "required": false,
71
- "entries": 117
71
+ "entries": 118
72
72
  },
73
73
  {
74
74
  "name": "user-interface",
@@ -78,6 +78,6 @@
78
78
  "entries": 106
79
79
  }
80
80
  ],
81
- "version": "1.0.0",
82
- "buildTime": "2025-10-19T10:23:42.699Z"
81
+ "version": "1.2.0",
82
+ "buildTime": "2026-02-19T06:57:21.924Z"
83
83
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "metadata": {
3
3
  "name": "network-cloud",
4
- "version": "1.0.0",
4
+ "version": "1.2.0",
5
5
  "entries": 111
6
6
  },
7
7
  "lookup": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "metadata": {
3
3
  "name": "operating-system",
4
- "version": "1.0.0",
4
+ "version": "1.2.0",
5
5
  "entries": 97
6
6
  },
7
7
  "lookup": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "metadata": {
3
3
  "name": "social-media",
4
- "version": "1.0.0",
4
+ "version": "1.2.0",
5
5
  "entries": 97
6
6
  },
7
7
  "lookup": {
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "metadata": {
3
3
  "name": "software-development",
4
- "version": "1.0.0",
5
- "entries": 117
4
+ "version": "1.2.0",
5
+ "entries": 118
6
6
  },
7
7
  "lookup": {
8
8
  "算法": {
@@ -1909,6 +1909,38 @@
1909
1909
  "match_type": "exact",
1910
1910
  "autofix_safe": true
1911
1911
  },
1912
+ "鲁棒性": {
1913
+ "taiwan": "穩健性",
1914
+ "confidence": 0.95,
1915
+ "category": "mainland-term",
1916
+ "reason": "台灣標準意譯",
1917
+ "match_type": "exact",
1918
+ "autofix_safe": true
1919
+ },
1920
+ "鲁棒性_robustness": {
1921
+ "taiwan": "穩健性",
1922
+ "confidence": 0.95,
1923
+ "category": "mainland-term",
1924
+ "reason": "台灣標準意譯",
1925
+ "match_type": "exact",
1926
+ "autofix_safe": true
1927
+ },
1928
+ "魯棒性": {
1929
+ "taiwan": "穩健性",
1930
+ "confidence": 0.95,
1931
+ "category": "mainland-term",
1932
+ "reason": "台灣標準意譯",
1933
+ "match_type": "exact",
1934
+ "autofix_safe": true
1935
+ },
1936
+ "魯棒性_robustness": {
1937
+ "taiwan": "穩健性",
1938
+ "confidence": 0.95,
1939
+ "category": "mainland-term",
1940
+ "reason": "台灣標準意譯",
1941
+ "match_type": "exact",
1942
+ "autofix_safe": true
1943
+ },
1912
1944
  "回滚": {
1913
1945
  "taiwan": "回溯",
1914
1946
  "confidence": 0.9,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "metadata": {
3
3
  "name": "user-interface",
4
- "version": "1.0.0",
4
+ "version": "1.2.0",
5
5
  "entries": 106
6
6
  },
7
7
  "lookup": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@termdock/twlint",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "A CLI tool for detecting simplified Chinese terms and suggesting Taiwan traditional alternatives",
5
5
  "main": "dist/cli.js",
6
6
  "type": "module",
@@ -74,4 +74,4 @@
74
74
  "engines": {
75
75
  "node": ">=18.0.0"
76
76
  }
77
- }
77
+ }