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>
78 lines
4.4 KiB
Markdown
78 lines
4.4 KiB
Markdown
# _pipeline — 법령·기준 수집·변환 스크립트
|
|
|
|
`original/` 하위 법령·행정규칙·표준시방서·KS 코퍼스를 **수집·변환·색인**하는 재현용 스크립트.
|
|
경로는 이 폴더 위치 기준 상대(`ROOT_DIR = 상위 = original/`)로 동작한다. 어느 PC에서 clone 해도 그대로 실행된다.
|
|
|
|
## 실행 전 준비
|
|
|
|
- Python 3.12 + `pymupdf`, `olefile`
|
|
- 인증키(커밋 금지):
|
|
- `resources/knowledge/.secrets.local.md` 에 KCSC 키 (스크립트가 자동 파싱) — 또는 환경변수 `KCSC_KEY`
|
|
- law.go.kr OC키는 기본 `umsangdon` (환경변수 `LAW_OC` 로 교체 가능)
|
|
|
|
## 스크립트 → 워크플로(README W1~W6) 대응
|
|
|
|
| 스크립트 | 역할 | 워크플로 |
|
|
|---|---|---|
|
|
| `check_law.py` | law.go.kr 현행본 시행일·개정일 조회 | W1 갱신 판별 |
|
|
| `collect_law.py` | 법령·행정규칙 원문(현행+교본시점) + 별표 PDF 수집 | W2 |
|
|
| `patch_law_md.py` | 보관 XML 기준으로 기존 법령 md의 **누락분만 보충**(부칙·목). 네트워크 미사용 | W2 보정 |
|
|
| `get_attach.py` | 고시 첨부파일·안내문 별표의 HWP 원본 수집 | W3 |
|
|
| `get_kcsc.py` | 국가건설기준센터 KCS 본문(OpenApi) 수집 | W2 |
|
|
| `get_ks.py` | e나라 표준인증 KS 메타데이터·이력 수집(원문은 DRM) | W2 |
|
|
| `hwp5_text.py` | 구형 HWP5(OLE) 본문 텍스트 추출 | W5 |
|
|
| `hwpx_text.py` | HWPX(zip+XML) → md(공백·표 보존). 공백 소실 첨부 재추출 | W5 |
|
|
| `pdf2md.py` | 별표·첨부 PDF → Markdown 변환(표 복원·이미지 pic/ 추출·손실 방지) | W4 |
|
|
| `fix_spacing.py` | HWP→PDF 공백 소실 별표/첨부의 프로즈 띄어쓰기 복원(표 보존) | W5 |
|
|
| `qc_lint.py` | md 전수 품질 점검(테이블·사진·내용누락·띄어쓰기·줄바꿈) | W5 |
|
|
| `verify_pdf2md.py` | 변환 손실·줄누락 검증 | W5 |
|
|
| `build_srcmap.py` | law API 결과 → 시행일/개정일 맵(srcmap.json) | W6 |
|
|
| `gen_md.py` | `../04_참조_법령기준_목록.md`의 **§5 원문 md 색인 절만** 재생성 (AUTO:INDEX 마커 사이 스플라이스 — 등록표·큐레이션 절은 수기 관리, 2026-08-15 변경) | W6 |
|
|
| `verify_structure.py` | 법령 XML ↔ md 구조 회귀검사(부칙·목·별표 수량 대조). 네트워크 미사용 | W5 |
|
|
|
|
## data/ (생성 데이터 = gen_md 입력)
|
|
|
|
이번 세션에서 만든 매핑. 수동 보정이 섞여 있어 함께 보관한다.
|
|
|
|
| 파일 | 내용 |
|
|
|---|---|
|
|
| `srcmap.json` | 항목별 시행일·개정일·출처 |
|
|
| `collected_map.json` | law.go.kr 수집 결과(판본·별표·개정 횟수) |
|
|
| `ks_map.json` | KS 45건 메타·이력 |
|
|
| `kcsc_map.json` | 표준시방서 ↔ KCS 코드 수 |
|
|
| `items_all.json` | `collect_law.py` 수집 대상 목록 |
|
|
| `ks_codes.json` | KS 조회 코드 목록 |
|
|
| `lawapi.json` | law.go.kr 조회 원자료 |
|
|
|
|
## 표준 실행 순서
|
|
|
|
```bash
|
|
cd resources/knowledge/original/_pipeline
|
|
python collect_law.py data/items_all.json # 법령·행정규칙 + 별표
|
|
python get_attach.py # 첨부·HWP
|
|
python get_kcsc.py # KCS 본문
|
|
python get_ks.py # KS 메타
|
|
python pdf2md.py # PDF → md (전건)
|
|
python verify_pdf2md.py # 검증
|
|
python gen_md.py # 색인 재생성
|
|
```
|
|
|
|
수집은 새로 받은 현행본을 `현행_새시행일.*` 로 **추가**한다(기존 판본 삭제 금지). 상세 규칙은 `resources/knowledge/README.md` W1~W6 참조.
|
|
|
|
## 변환 규칙이 바뀐 경우 (2026-08-14 감사 반영)
|
|
|
|
기존 법령 md 에는 수집 이후 **후처리**(ASCII 박스표 → 마크다운 표, 수식, 이미지)가
|
|
적용돼 있다. `law_to_md()` 로 전체를 다시 렌더링하면 그 결과가 사라지므로
|
|
**전량 재생성 금지**. 대신 누락분만 채우는 `patch_law_md.py` 를 쓴다.
|
|
|
|
```bash
|
|
python patch_law_md.py --dry # 보충량 확인
|
|
python patch_law_md.py # 저장
|
|
```
|
|
|
|
과거 결함 2건(이 도구로 보정 완료 — 부칙 2,264건·목 2,114줄):
|
|
- `부칙단위[:20]` 상한 → 법제처 XML 은 부칙이 **오래된 순**이라 최신 부칙(연도별 요율
|
|
특례 등)이 통째로 절단됐다. 상한 제거함.
|
|
- `목`(가·나·다…)이 `호`가 아니라 `항`의 **직속 자식**으로 오는 구조를 처리 못 해 누락.
|
|
항의 자식을 문서 순서대로 순회하도록 수정함.
|