knowledge(색인): 04 목록 근거 원장 재구성 — 절 계층화·AUTO 마커·gen_md 스플라이스화
04_참조_법령기준_목록.md (파일명 유지): - 제목 정정(# 0. → # 04.) + 성격 재정의: 근거 등록부·탐색 관문 (전체 인벤토리는 각 _index.md, 역링크 없이 technical_info sources = SSOT) - 근거 수준 절 분리: §1~§4 법정 등록표(수동) / §5 원문 색인(자동) / §6 품셈·원가 기능별 링크 모음(중복 등록 없음) / §7 공식 기초가격 원천 (노임 2·나라장터·ECOS·오피넷, 전용 필드) / §8 교본(보조 참고) / §9 포맷·실무 검증자료(경고+인덱스 위임) / §10 갱신 관리 / §11 통계(114건 실측) gen_md.py: - 전체 덮어쓰기 → AUTO:INDEX 마커 스플라이스 (수기 행·큐레이션 절 보존, 마커 없으면 실행 거부) - 잠복 버그 2건 수정: ORIG=OUTMD.parent(이동 후 빈 색인 생성) → ROOT_DIR, 색인 링크 original/ 접두 누락 → 보정. 재실행으로 색인 최신화 (법령 md 161→182·별표 292→312, 조달수수료 폴더 자동 반영, 깨진 링크 0) 연동 정정: - 00_운영지침: 깨진 구경로 2곳 수정, §6 갱신주기표 → 04 §10 이관(SSOT) - 01_수집지침 W6: 색인 절만 재생성으로 절차 변경, 수기 행 추가 규칙 명시 - _pipeline/README·knowledge README 설명 갱신 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -27,7 +27,7 @@
|
||||
| `qc_lint.py` | md 전수 품질 점검(테이블·사진·내용누락·띄어쓰기·줄바꿈) | W5 |
|
||||
| `verify_pdf2md.py` | 변환 손실·줄누락 검증 | W5 |
|
||||
| `build_srcmap.py` | law API 결과 → 시행일/개정일 맵(srcmap.json) | W6 |
|
||||
| `gen_md.py` | `../04_참조_법령기준_목록.md` 재생성(9열·색인) | W6 |
|
||||
| `gen_md.py` | `../04_참조_법령기준_목록.md`의 **§5 원문 md 색인 절만** 재생성 (AUTO:INDEX 마커 사이 스플라이스 — 등록표·큐레이션 절은 수기 관리, 2026-08-15 변경) | W6 |
|
||||
| `verify_structure.py` | 법령 XML ↔ md 구조 회귀검사(부칙·목·별표 수량 대조). 네트워크 미사용 | W5 |
|
||||
|
||||
## data/ (생성 데이터 = gen_md 입력)
|
||||
|
||||
@@ -669,7 +669,9 @@ if miss:
|
||||
L.append("")
|
||||
|
||||
# ── 5. 원문 md 색인 (법령 본문 + 별표 전체) ──
|
||||
ORIG = OUTMD.parent
|
||||
# ORIG = 원문 코퍼스 루트(…/original). ⚠ OUTMD.parent 사용 금지 — OUTMD가 knowledge
|
||||
# 루트로 이동(2026-08-15)한 뒤 OUTMD.parent는 원문 폴더가 아니다 (빈 색인 생성 버그 원인).
|
||||
ORIG = ROOT_DIR
|
||||
CATDIR = [("법률", "법률"), ("행정규칙", "행정규칙"), ("표준시방서", "표준시방서")]
|
||||
L.append("## 5. 원문 md 색인")
|
||||
L.append("")
|
||||
@@ -685,7 +687,7 @@ for cat, d in CATDIR:
|
||||
L.append(f"### {cat}")
|
||||
L.append("")
|
||||
for folder in sorted([x for x in base.iterdir() if x.is_dir()], key=lambda x: x.name):
|
||||
rel = f"{d}/{folder.name}"
|
||||
rel = f"original/{d}/{folder.name}" # 링크 기준 = knowledge 루트(OUTMD 위치)
|
||||
docs = []
|
||||
for f in sorted(folder.glob("*.md")):
|
||||
label = {"_meta": "메타", "CHANGELOG": "변경이력"}.get(f.stem, f.stem.replace("_", " "))
|
||||
@@ -735,7 +737,7 @@ L.append("### KS (메타데이터)")
|
||||
L.append("")
|
||||
ksdir = sorted((ORIG / "KS").glob("*.md")) if (ORIG / "KS").is_dir() else []
|
||||
if ksdir:
|
||||
L.append("- " + " · ".join(f"[{f.stem}](<KS/{f.name}>)" for f in ksdir))
|
||||
L.append("- " + " · ".join(f"[{f.stem}](<original/KS/{f.name}>)" for f in ksdir))
|
||||
L.append("")
|
||||
L.append(
|
||||
f"> 법령 본문 md {n_law} · 별표/서식 md {n_byl} · 첨부 본문 md {n_att} · 압축해제 md {n_zip[0]} · KCS 본문 md {n_kcs} · KS 메타 md {len(ksdir)}"
|
||||
@@ -752,5 +754,26 @@ L.append(
|
||||
L.append("- 교본 기준 시점: 2019년 (고시·요율은 당시 개정본 기준. 원문 수집 시 현행본 병기 필요)")
|
||||
L.append("- 시행일/개정일 조회: 국가법령정보센터 Open API (`law.go.kr/DRF`), 2026-08 기준 현행본")
|
||||
|
||||
OUTMD.write_text("\n".join(L) + "\n", encoding="utf-8")
|
||||
print(f"작성 완료: {OUTMD.name} / {total}건 / 무매칭 {miss}")
|
||||
# ── 쓰기: 전체 덮어쓰기 금지 — '원문 md 색인' 절만 마커 사이에 스플라이스 ──
|
||||
# 배경(2026-08-15): 04 목록의 등록표(§1~§4)는 수기 추가 행(사방 고시·조달수수료 등)이
|
||||
# 축적된 수동 관리 문서가 됐다. 전체 재생성하면 수기 행이 소실되므로, 이 스크립트는
|
||||
# 자동화 가치가 큰 '원문 md 색인' 절만 AUTO 마커 블록 안에서 재생성한다.
|
||||
MARK_BEGIN = "<!-- AUTO:INDEX:BEGIN — gen_md.py가 재생성하는 블록. 수동 편집 금지 -->"
|
||||
MARK_END = "<!-- AUTO:INDEX:END -->"
|
||||
|
||||
idx_start = L.index("## 5. 원문 md 색인")
|
||||
idx_end = next(i for i, ln in enumerate(L) if ln.startswith("> 법령 본문 md "))
|
||||
auto_block = "\n".join([MARK_BEGIN] + L[idx_start : idx_end + 1] + [MARK_END])
|
||||
|
||||
if not OUTMD.exists():
|
||||
raise SystemExit(f"오류: {OUTMD} 없음 — 이 스크립트는 색인 절만 갱신하며 신규 생성하지 않는다.")
|
||||
cur = OUTMD.read_text(encoding="utf-8")
|
||||
if MARK_BEGIN not in cur or MARK_END not in cur:
|
||||
raise SystemExit(
|
||||
"오류: AUTO:INDEX 마커 없음 — 04 문서에 마커 블록을 먼저 넣어야 한다 "
|
||||
"('## 5. 원문 md 색인' 절을 MARK_BEGIN/END로 감싼다)."
|
||||
)
|
||||
pre = cur.split(MARK_BEGIN)[0]
|
||||
post = cur.split(MARK_END, 1)[1]
|
||||
OUTMD.write_text(pre + auto_block + post, encoding="utf-8")
|
||||
print(f"색인 절 갱신 완료: {OUTMD.name} (등록표 §1~§4·큐레이션 절은 수동 관리 — 보존됨)")
|
||||
|
||||
Reference in New Issue
Block a user