feat(801-5): M01 로직 단위 글 건설품셈 원문 꼴 — 시간당 ㎥ · ㎡ → hr · 초 → sec · mm · cm · kg → ㎜ · ㎝ · ㎏ · TON · t → ton · km/hr → ㎞/hr
- 대응표 master_unit_text.RULES(규칙마다 원문 근거 절) · 빌더 build_단위표기_801_5(--check · --list · 셈 지문 전후 같을 때만 씀) - M01 로직 53 개 · 칸 79 개 글만 바꿈(변수 입력 · 중간 단위 · 결과단위) · 계수 · 소요량 표 값칸 · 호표 줄 단위 · 원문이 두 꼴을 다 쓰는 단위(㎞ · km · 분 · min)는 안 건드림 - M02 사본 새로 씀 도구 M02_Copy_Units(M02_Copy_Symbols 의 fill 만 바꿔 끼움) — 사본 16 문서 28 칸 · 금액 전후 같음 - 검토 목록 docs/raw/요구_1104/_목록_801-5_단위표기.xlsx - 옛 시험 기대 고침: test_796_3 굴착기 cm 단위 초 → sec(원문 표 머리 「싸이클시간(Sec)」) - 새 test_801_5_units 6 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""M01 로직 단위 글 → 건설품셈 원문 꼴(PLAN 801-5 · 요구 663-2) — 글만 바꿈 · 셈 · 환산 안 바꿈.
|
||||
|
||||
`canon(단위 글)` = 아래 `RULES` 를 차례로 적용(이미 원문 꼴이면 그대로 · 두 번 돌려도 같음).
|
||||
`RULES` 한 줄 = (이름, 지금 글 정규식, 바꿀 글, 원문 글, 근거 절들) — 근거 절 = `EVIDENCE_ROOT` 아래 파일 ·
|
||||
그 파일 안에 원문 글이 실제로 있어야 함(시험 `test_801_5_units`). 원문이 두 꼴을 다 쓰는 단위(㎞ · km · 분 · min)는 안 건드림.
|
||||
단위 칸 중 원문 표를 그대로 옮긴 계수 · 소요량 표 값칸 · 호표 줄 단위(요소 단위)는 대상 아님.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import re
|
||||
from pathlib import Path
|
||||
|
||||
EVIDENCE_ROOT = Path("resources/knowledge/original/원가계산/건설공사_표준품셈/본문")
|
||||
_A = r"(?<![A-Za-z])" # 영문 낱말 한가운데는 안 건드림
|
||||
_Z = r"(?![A-Za-z])"
|
||||
|
||||
# (이름, 지금 글 정규식, 바꿀 글, 원문 글, 근거 절들)
|
||||
RULES: list[tuple[str, str, str, str, list[str]]] = [
|
||||
(
|
||||
"시간당 ㎥ · ㎡ → hr",
|
||||
r"(?<=[㎥㎡])/시간(?![가-힣])",
|
||||
"/hr",
|
||||
"/hr",
|
||||
[
|
||||
"01_공통부문/제08장_건설기계/8-03-05_[40]콘크리트기계.md", # ㎥/hr
|
||||
"02_토목부문/제07장_항만공사/7-02_사석.md", # ㎡/hr
|
||||
],
|
||||
),
|
||||
(
|
||||
"사이클 시간 초 → sec",
|
||||
r"(?<![가-힣])초(?![가-힣])",
|
||||
"sec",
|
||||
"sec",
|
||||
[
|
||||
"01_공통부문/제05장_기초공사/5-02_연약지반처리.md", # cm : 1회 싸이클 타임(sec)
|
||||
"01_공통부문/제08장_건설기계/8-02-02_리퍼(유압식).md",
|
||||
],
|
||||
),
|
||||
(
|
||||
"mm → ㎜",
|
||||
rf"{_A}mm{_Z}",
|
||||
"㎜",
|
||||
"㎜",
|
||||
["04_기계설비부문/제13장_플랜트설비공사/13-01_플랜트_배관.md"],
|
||||
),
|
||||
(
|
||||
"cm → ㎝",
|
||||
rf"{_A}cm{_Z}",
|
||||
"㎝",
|
||||
"㎝",
|
||||
["01_공통부문/제08장_건설기계/8-03-06_[50]골재생산기계_등.md"],
|
||||
),
|
||||
("kg → ㎏", rf"{_A}kg{_Z}", "㎏", "㎏", ["01_공통부문/제01장_적용기준/1-02_설계_및_수량.md"]),
|
||||
(
|
||||
"km/hr → ㎞/hr",
|
||||
rf"{_A}km/hr",
|
||||
"㎞/hr",
|
||||
"㎞/hr",
|
||||
["01_공통부문/제08장_건설기계/8-02-09_롤러.md"],
|
||||
),
|
||||
(
|
||||
"TON · t → ton",
|
||||
rf"{_A}(?:TON|t){_Z}",
|
||||
"ton",
|
||||
"ton",
|
||||
["01_공통부문/제08장_건설기계/8-02-12_크러셔.md"],
|
||||
),
|
||||
]
|
||||
_COMPILED = [(name, re.compile(pat), to, tok, files) for name, pat, to, tok, files in RULES]
|
||||
|
||||
|
||||
def canon(unit) -> str:
|
||||
"""원문 꼴 단위 글 — 규칙에 안 걸리면 그대로."""
|
||||
text = str(unit or "")
|
||||
for _, pat, to, _, _ in _COMPILED:
|
||||
text = pat.sub(to, text)
|
||||
return text
|
||||
|
||||
|
||||
def rule_of(before: str) -> str:
|
||||
"""바뀐 단위가 걸린 규칙 이름들(검토 목록 · 대응표용)."""
|
||||
out, text = [], str(before or "")
|
||||
for name, pat, to, _, _ in _COMPILED:
|
||||
if pat.search(text):
|
||||
out.append(name)
|
||||
text = pat.sub(to, text)
|
||||
return " · ".join(out)
|
||||
Reference in New Issue
Block a user