fix(778-1): 장비 → EQ 괄호 낱말 규칙 — 굴착기(타이어형) = 타이어 기계 · 부속 뺌

- Elem: 괄호 낱말(타이어 · 무한궤도 · 습지 · 트럭탑재) 어긋남 · 부속(자동덮개 · 부착용 · 콤팩터 · 습지) 깎음 · narrow · machine(하나로 가름)
- Fixed Linker._machine: 같은 갈래 · 규격 여럿 = 괄호 낱말로 가름
- SkPatch._add_machine: 기계 = 괄호 낱말로 가른 그 기계 · 기계경비 기초 = 그 기계(같은 이름)를 고르기에 둔 기초 먼저
- 여덟 파일 장비 줄 잇기 59 → 172 / 183(32 → 94 %) · 굴착기(타이어형) 42 줄 = 세 길 모두 타이어 · 기초 80 · SK 37 · 고름 대기 89 그대로
- 새 시험 test_778_1_hopyo_machine

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-04 08:49:46 +09:00
co-authored by Claude Opus 5.5
parent 4e0ea28aec
commit 560e2e0928
4 changed files with 122 additions and 8 deletions
+6 -1
View File
@@ -20,6 +20,7 @@ from decimal import Decimal
from typing import Any
from M01_MasterData import M01_MasterData_Store as m01
from M02_MasterTemplete import M02_Hopyo_Elem as elem
from M02_MasterTemplete import M02_Hopyo_Finger as finger
from M02_MasterTemplete import M02_Hopyo_Match as hm
from M02_MasterTemplete import M02_Hopyo_Material as hmat
@@ -86,6 +87,9 @@ class Linker:
set(specnums(row.get("규격"))), mm_plain(row.get("이름")), mm_plain(row.get("규격")))
for row in self.whole.numbers.get("EQ", {}).values()
] # fmt: skip
self.eq_names = {
str(r.get("키")): r.get("이름") for r in self.whole.numbers.get("EQ", {}).values()
}
self.near = 0 # 못 이은 이음 후보 수
def link(self, line: dict[str, Any], price: dict[str, Decimal]) -> dict[str, str | None]:
@@ -103,13 +107,14 @@ class Linker:
return out
def _machine(self, line: dict[str, Any]) -> str | None:
"""기계 줄 → EQ 하나 — 이름 · 규격 글 같음 › 갈래 겹침 + 규격 수 같음(하나일 때만)."""
"""기계 줄 → EQ 하나 — 이름 · 규격 글 같음 › 갈래 + 규격 수 · 괄호 낱말(하나일 때만)."""
name, spec = mm_plain(line.get("이름")), mm_plain(line.get("규격"))
same = [c for c, _, _, n, s in self.machines if n == name and s == spec]
if len(same) != 1:
text = f"{line.get('이름') or ''} {line.get('규격') or ''}"
kinds, nums = mtypes(text), set(specnums(text))
same = [c for c, t, s, _, _ in self.machines if kinds & t and nums and nums == s]
same = elem.narrow(text, [(c, self.eq_names.get(c)) for c in same])
if len(same) == 1:
return same[0]
self.near += bool(same)