feat(B09): 원문 단위 읽기 넓힘 — 상위 절·수 낀 표기까지, 대신 장 단위는 막음
- 「A = 77.7 ㎡/시간」처럼 등호와 단위 사이에 수가 끼는 표기를 읽음 (9-17-1 비탈면 다짐이 그래서 통째로 미확보였음). - 상위 절이 스스로 안 적고 하위만 적는 경우를 채움 — 암절취 9-4 · 발파암 9-5 · 노체 9-16 · 덤프운반 10-12 가 전부 ㎥. - ⚠ 좁힘: 말한 하위가 둘 이상이고 값이 하나로 모일 때만. 하나만 말한 것을 상위에 주면 장 전체가 그 단위가 됨 — 「13. 돌공사」가 실제로 ton 으로 나왔음. - 단위 빈 일위대가 73 → 61. 시험 3건 추가, 252건 통과. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -62,7 +62,9 @@ _RE_HEADING = re.compile(r"^#{2,4}\s*(\d+(?:-\d+)*)\s*\.\s*(.*)$")
|
|||||||
#: 「(단위: ㎡당)」·「(단위 : 100㎡당)」. 앞에 붙은 수는 밑수라 여기서는 버린다.
|
#: 「(단위: ㎡당)」·「(단위 : 100㎡당)」. 앞에 붙은 수는 밑수라 여기서는 버린다.
|
||||||
_RE_UNIT_LINE = re.compile(r"^\(\s*단위\s*[::]\s*(.+?)\s*\)\s*$")
|
_RE_UNIT_LINE = re.compile(r"^\(\s*단위\s*[::]\s*(.+?)\s*\)\s*$")
|
||||||
#: 공식이 스스로 밝히는 결과 단위 — 「= ㎥/시간」·「㎥/hr」.
|
#: 공식이 스스로 밝히는 결과 단위 — 「= ㎥/시간」·「㎥/hr」.
|
||||||
_RE_FORMULA_UNIT = re.compile(r"=\s*([㎡㎥m]+)\s*/\s*(?:시간|hr|h)\b")
|
#: ⚠ 등호와 단위 사이에 **수가 끼는 표기**가 있다 — 「A = 77.7 ㎡/시간」(9-17-1 비탈면 다짐).
|
||||||
|
#: 그 수를 건너뛰지 않으면 그 절이 통째로 안 읽힌다.
|
||||||
|
_RE_FORMULA_UNIT = re.compile(r"=\s*(?:[\d.,]+\s*)?([㎡㎥m]+)\s*/\s*(?:시간|hr|h)\b")
|
||||||
|
|
||||||
|
|
||||||
def _project_root() -> str:
|
def _project_root() -> str:
|
||||||
@@ -135,5 +137,23 @@ def unit_of(work_item_code: str) -> str | None:
|
|||||||
# ⚠ 두 단계 위까지는 안 올라간다. 장(13) 전체는 공종이 섞여 단위가 하나가 아니다.
|
# ⚠ 두 단계 위까지는 안 올라간다. 장(13) 전체는 공종이 섞여 단위가 하나가 아니다.
|
||||||
if section in units:
|
if section in units:
|
||||||
return units[section]
|
return units[section]
|
||||||
|
|
||||||
|
# ⚠ **상위 절은 스스로 단위를 안 적고 하위 절만 적는 경우가 많다** — 「9-5. 발파암」은
|
||||||
|
# 빈 제목이고 9-5-1·9-5-2·9-5-3 이 각각 ㎥ 를 밝힌다(암절취 9-4·노체 9-16·덤프운반
|
||||||
|
# 10-12 도 같다). **하위가 모두 같은 단위일 때만** 그 단위를 상위에 준다 —
|
||||||
|
# 갈리면 안 준다(한 단위로 뭉뚱그리면 어느 하위가 틀렸는지 못 가린다).
|
||||||
|
#
|
||||||
|
# ⚠ **둘 이상이 말할 때만 듣는다.** 하나만 말한 것을 상위에 주면 장(章) 전체가
|
||||||
|
# 그 하나의 단위가 된다 — 실제로 「13. 돌공사」가 하위 한 절 때문에 **ton** 으로
|
||||||
|
# 나왔다(2026-09-08). 그래서 ㉠ 절 번호에 하이픈이 있고(장 자체가 아니고)
|
||||||
|
# ㉡ **말한 하위가 둘 이상**이며 ㉢ 그 값이 하나로 모일 때만 준다.
|
||||||
|
declared = [
|
||||||
|
value
|
||||||
|
for key, value in units.items()
|
||||||
|
if key.startswith(f"{section}-") and key.count("-") == section.count("-") + 1
|
||||||
|
]
|
||||||
|
if "-" in section and len(declared) >= 2 and len(set(declared)) == 1:
|
||||||
|
return declared[0]
|
||||||
|
|
||||||
parent = section.rsplit("-", 1)[0]
|
parent = section.rsplit("-", 1)[0]
|
||||||
return units.get(parent) if parent != section and "-" in section else None
|
return units.get(parent) if parent != section and "-" in section else None
|
||||||
|
|||||||
Reference in New Issue
Block a user