fix: 高密度テスト52/52通過 + SPACES figurative constant FP fix

COBOL技術者による高密度テスト(52 tests)実装:

発見・修正されたバグ:
1. WS-KEY = SPACES の figurative constant 比較が FP 原因
   - _matches_key_comparison に figurative constant除外を追加
   - 構造検知の信号4でも SPACES/ZERO 等を除外
   - structural_matching で単一ファイルプログラムを除外

2. simple_vs_two_stage が常に単純マッチングを返していた
   - 実証拠なしでも0.5で返す → 他の分類を汚染
   - 修正: file_count>=2 + IF + 比較証拠がない場合は unknown

3. simple_vs_two_stageテストを現実に合わせて更新

回帰: 767 passed(0 new failures)
高密度テスト: 52/52 PASS
This commit is contained in:
NB-076
2026-06-21 17:04:48 +08:00
parent ecf3c1cd61
commit a784c6974a
4 changed files with 49 additions and 12 deletions
+19 -3
View File
@@ -144,7 +144,8 @@ def resolve_simple_vs_two_stage(features: dict) -> dict:
规则:
- OPEN → CLOSE → 再 OPEN 模式 → 二级匹配
- 其他顺序 → 简单匹配
- 其他顺序且有匹配证据 → 简单匹配
- 无匹配证据 → unknown(不胡乱判定)
"""
open_pattern = features.get("open_pattern", "")
evidence: list[str] = []
@@ -152,10 +153,25 @@ def resolve_simple_vs_two_stage(features: dict) -> dict:
if open_pattern == "open-close-open":
evidence.append("OPEN→CLOSE→再OPEN 模式 → 二级匹配")
return {"resolved_type": "二段階マッチング", "confidence": 0.90, "evidence": evidence}
else:
evidence.append(f"OPEN 模式为 '{open_pattern}' → 默认为単純マッチング(非決定的: 无 OPEN-CLOSE-OPEN 模式不代表一定是匹配程序)")
# 只有存在多文件+跨文件比较等匹配证据时才返回単純マッチング
vp = features.get("variable_patterns", {})
file_count = features.get("file_count", 0)
if_types = features.get("if_types", {})
has_real_evidence = (
file_count >= 2
and if_types.get("total", 0) >= 1
and (vp.get("has_prev_key", False)
or features.get("has_key_var", False)
or features.get("has_cross_file_cmp", False))
)
if has_real_evidence:
evidence.append(f"OPEN 模式为 '{open_pattern}' + 匹配证据 → 単純マッチング")
return {"resolved_type": "単純マッチング", "confidence": 0.50, "evidence": evidence}
evidence.append(f"OPEN 模式为 '{open_pattern}' + 无匹配证据 → unknown")
return {"resolved_type": "unknown", "confidence": 0.0, "evidence": evidence}
def resolve_pure_vs_mixed(features: dict) -> dict:
"""区分「純粋マッチング」与「混合マッチング」。