From 5063bd376b048a6a33beac0e6b5b5c1e021f8f5a Mon Sep 17 00:00:00 2001 From: umsangdon Date: Tue, 8 Sep 2026 14:15:33 +0900 Subject: [PATCH] =?UTF-8?q?feat(B09):=20=E3=80=8C=EB=8B=A8=EC=9C=84:?= =?UTF-8?q?=E3=80=8D=20=EC=97=86=EC=9D=B4=20=EA=B4=84=ED=98=B8=EB=A7=8C=20?= =?UTF-8?q?=EC=A0=81=EB=8A=94=20=EC=A0=88=EB=8F=84=20=EC=9D=BD=EC=9D=8C=20?= =?UTF-8?q?=E2=80=94=20=EB=8B=A8=EC=9C=84=20=EB=B9=88=20=EC=9D=BC=EC=9C=84?= =?UTF-8?q?=EB=8C=80=EA=B0=80=2061=20=E2=86=92=2027?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 「(㎡당)」·「(인/100㎡당)」·「(1,000본당)」처럼 「단위:」를 뺀 절이 있음. 씨앗뿜어붙이기 5-24 가 그 모양이라 통째로 미확보였음(메인이 물은 아홉 중 하나). - 「인/」 앞머리는 품의 단위라 건너뜀 — 「인/㎡당」은 「㎡당 몇 인」이라 공종 단위가 ㎡. - ⚠ 「㎥/1대, 1일」·「대/ton」은 안 받음 — 그건 시공량이지 소요량이 아니라 공종 단위로 읽으면 뜻이 뒤집힘(역수). 밑수가 둘인 「1ha당, 100본당」도 안 받음. - 절 단위 128 → 185, 단위 빈 일위대가 61 → 27. 내역 금액 변동 없음. 시험 2건 추가(받을 것·막을 것 짝), 254건 통과. Co-Authored-By: Claude Opus 5 (1M context) --- B09_Estimation/B09_Estimation_WorkItemUnit.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/B09_Estimation/B09_Estimation_WorkItemUnit.py b/B09_Estimation/B09_Estimation_WorkItemUnit.py index d3f3bdf5..ec05eb27 100644 --- a/B09_Estimation/B09_Estimation_WorkItemUnit.py +++ b/B09_Estimation/B09_Estimation_WorkItemUnit.py @@ -61,6 +61,15 @@ _QUANTITY_UNITS = frozenset( _RE_HEADING = re.compile(r"^#{2,4}\s*(\d+(?:-\d+)*)\s*\.\s*(.*)$") #: 「(단위: ㎡당)」·「(단위 : 100㎡당)」. 앞에 붙은 수는 밑수라 여기서는 버린다. _RE_UNIT_LINE = re.compile(r"^\(\s*단위\s*[::]\s*(.+?)\s*\)\s*$") +#: 「단위:」를 빼고 **괄호만** 적는 절이 있다 — 「(㎡당)」·「(인/100㎡당)」·「(1,000본당)」. +#: 씨앗뿜어붙이기 5-24 가 그 모양이라 통째로 안 읽히고 있었다(2026-09-08). +#: +#: ⚠ **앞의 「인/」은 품의 단위이고 뒤가 공종 단위다** — 「인/㎡당」은 「㎡당 몇 인」이라 +#: 공종 단위가 ㎡ 다. 그래서 그것만 건너뛴다. +#: ⚠ **「㎥/1대, 1일」·「대/ton」 같은 것은 안 받는다** — 그건 소요량이 아니라 +#: **시공량**(1대가 하루에 몇 ㎥)이라, 공종 단위로 읽으면 뜻이 뒤집힌다. +#: 쉼표가 들어간 것(「1ha당, 100본당」)도 밑수가 둘이라 안 받는다. +_RE_BARE_UNIT_LINE = re.compile(r"^\(\s*(?:인\s*/\s*)?(?:[\d.,]+\s*)?([^\s/,()]+?)\s*당?\s*\)\s*$") #: 공식이 스스로 밝히는 결과 단위 — 「= ㎥/시간」·「㎥/hr」. #: ⚠ 등호와 단위 사이에 **수가 끼는 표기**가 있다 — 「A = 77.7 ㎡/시간」(9-17-1 비탈면 다짐). #: 그 수를 건너뛰지 않으면 그 절이 통째로 안 읽힌다. @@ -102,7 +111,7 @@ def section_units() -> dict[str, str]: continue if section is None or section in units: continue - unit_line = _RE_UNIT_LINE.match(line) + unit_line = _RE_UNIT_LINE.match(line) or _RE_BARE_UNIT_LINE.match(line) if unit_line: cleaned = _clean_unit(unit_line.group(1)) if cleaned: