11 KiB
11 KiB
01_수집지침 — 원문 수집·갱신 작업 절차 (W1~W7)
법령·행정규칙·표준시방서·교본 원문(
original/)의 수집·변환·품질점검·색인 갱신 절차서. AI가 그대로 실행한다. 전체 지도: README.md · 기술문서 작성 규칙: 00_운영지침.md · 실무 분석: 02_분석지침.md
사방 원문 특기: 사방기술교본은 ToUnicode 교정으로 텍스트 추출 가능한
한글교정.pdf가 원본이다. 교정 방법·검증은 원문/사방기술교본_한글교정_작업가이드.md 참조. 교본시점 대조 기준일은 임도(2019-12-31)와 달리 사방은 교본 2023 발행이라 의미가 약함 — 현행본 위주로 사용.
1. 작업 순서
W1. 갱신 대상 판별
목록 md의 시행일을 국가법령정보센터 현행본과 대조한다. 다른 항목만 W2로 넘긴다. 같으면 종료.
W2. 원문 수집
| 용도 | 요청 |
|---|---|
| 현행본 검색 | lawSearch.do?OC=<키>&type=XML&target=law|admrul&query=<명칭> |
| 연혁 목록 | 법령 target=eflaw / 행정규칙 target=admrul&nw=2 |
| 본문 | lawService.do?target=law&MST=<법령일련번호> / target=admrul&ID=<행정규칙일련번호> |
| 파일 | 링크 앞에 https://www.law.go.kr 를 붙이고 User-Agent 헤더를 넣는다 |
- 검색 결과는 이름이 유사한 다른 법령을 섞어 준다. 정확 일치 → 접두 일치 순으로 고른다.
- 기존 판본을 덮어쓰지 않는다.
현행_새시행일.*로 추가한다. - XML의
개정문·제개정이유를CHANGELOG.md에 덧붙인다. - 별표는
별표단위/별표서식PDF파일링크로 받는다.
W3. 첨부파일 수집 — 생략 금지
고시·훈령은 본문이 껍데기다. 본문에 ~은 별표와 같다만 있고 별표 PDF가 자세한 내용은 상단 메뉴 버튼을 이용하십시오 안내문인 경우가 많다.
- XML
첨부파일/첨부파일링크를 전건 받아첨부/에 저장한다. - 별표 PDF의 문자 수가 120자 미만이거나
자세한 내용은을 포함하면 안내문이다.별표서식파일링크(HWP)를 함께 받는다. - 본문 md가 500자 미만이면 첨부를 못 받은 것으로 간주하고 W3을 다시 수행한다.
- 첨부 zip 처리(
extract_zip.py): 첨부에 zip이 있으면[압축] <이름>/로 해제한다. zip 엔트리명이 CP949 mojibake면encode("cp437").decode("cp949")로 복원한다. 내부 HWP/HWPX는 md로 변환(hwpx_text)하고index_zip.py로_목록.md를 만든다. - 구형 HWP 표 복원:
hwp5_text.extract_items가 HWP5 레코드 스트림에서 표(CTRL_HEADERb" lbt"='tbl ' → TABLE 레코드의 열수 → LIST_HEADER마다 셀 → PARA_TEXT)를 md 표로 재구성한다. 셀 병합은 열수 기준 순차 배치로 근사한다. 서로게이트·사설글리프는 인코딩 전 제거한다.
W4. PDF → Markdown 변환
별표/*.pdf, 첨부/*.pdf 를 같은 폴더에 같은 이름의 .md 로 변환한다.
- 표는
find_tables()로 뽑되, 표로 못 만들거나 원문 문자 커버리지가 0.90 미만이면 표 취급을 취소하고 텍스트로 되돌린다. (표 영역 텍스트를 본문에서 제외하기 때문에, 취소하지 않으면 그 내용이 통째로 사라진다.) - 한 셀에 여러 줄이 들어간 행은 세로로 겹쳐진 행이다. 비어있지 않은 셀의 줄 수가 모두 같으면 그 수만큼 행으로 분리한다.
- 본문 계층은
Ⅰ. / 1. / 가. / (1) / (가) / 1) / 가) / ①마커 등장 순서로 스택을 쌓아 결정한다. 들여쓰기 픽셀로 판단하지 않는다. - 줄바꿈 이어붙이기: PyMuPDF는 구조적 줄의 들여쓰기를 텍스트 안에 넣고 x0는 좌측 여백에 둔다. x0가 좌측 여백보다 큰 줄만 앞줄에서 넘어온 조각이므로 앞줄에 그대로 붙인다.
- 붙일 때 공백을 새로 넣지 않는다. 원문은 줄이 공백에서 끊기면 꼬리 공백을 남기므로 그대로 이어붙이면 맞는다.
- 이미지: PDF 내 그림(40px 이상)은
pic/에 PNG로 추출하고 본문 위치에로 인라인 삽입한다(pdf2md.py). - HWPX 첨부는
hwpx_text.py로 재추출한다(공백·표·글상자·계층 보존). 글상자(단일셀 표) → 인용블록,제N장/N-N-N.→헤딩,1./가./(1)/①→중첩 리스트. 구형.hwp는hwp5_to_md(표 없는 문서만). - 법령 본문 이미지: XML 조문에 인라인된
<img src=…>/<img id=…>(수식·그림)를fix_law_images.py로pic/에 내려받아로 로컬화한다.id값은flDownload.do?flSeq=<id>로 받는다.
W5. 문서 품질 점검·보정
변환만으로 끝내지 않는다. 아래를 검사하고 문제가 남으면 보정한다.
| 검사 | 방법 | 조치 |
|---|---|---|
| 문자 손실 | 정규화(md)/정규화(pdf) ≥ 0.985 |
미달이면 W4 표 처리 재검토 |
| 줄 누락 | PDF 각 줄의 앞 12자가 md에 있는지 | 누락 시 해당 표·문단 재변환 |
| 공백 소실 | 한글 12자 이상 연속 덩어리 비율 > 0.15 | HWP를 PDF로 뽑을 때 공백이 사라진 원본이다. 같은 폴더의 HWPX에서 다시 변환한다 |
| 표 셀 순서 왜곡 | 값은 있는데 원문 줄 순서와 어긋남 | 수량·단가표에서 치명적이다. HWPX <hp:tbl>/<hp:tc> 로 재변환한다 |
| 표 구조 | 구분선 존재, 행별 열 수 일치 | 불일치 행 수정 |
| 음절 분리 | 가 나 다 형태의 글자 단위 공백 |
병합 |
- HWPX는 ZIP +
Contents/section*.xml이다.<hp:t>가 텍스트,<hp:tbl>/<hp:tc>가 표이며 공백과 병합 정보가 온전하다. PDF보다 우선한다. - 구형
.hwp(바이너리)는 전용 라이브러리 없이 읽을 수 없다. 읽지 못하면 PDF본을 유지하고_meta.md에 결함을 기록한다. - 판독 불가한 값을 추정해서 채우지 않는다. 공백·표 구조를 임의로 지어내는 것도 금지다.
W6. 색인 갱신
04_참조_법령기준_목록.md의 ## 5. 원문 md 색인 절만 gen_md.py로 재생성한다.
- 2026-08-15 변경: 04 문서 전체 재생성 금지. 등록표(§1~§4)와 큐레이션 절(§6~§11)은 수기 관리(사방·조달수수료 등 수기 행 보존) — 스크립트는
<!-- AUTO:INDEX:BEGIN/END -->마커 사이만 갱신하며, 마커가 없으면 실행을 거부한다. - 등록표에 신규 원문을 추가할 때는 §2 등 해당 절에 수기로 행 추가 (번호 이어붙임, 재부여 금지) + §11 통계 갱신.
시행일·개정일·확보·소관둘째 줄(실제 내려받은 출처)을 반영한다.- 확인하지 않은 출처는 적지 않는다. 받지 못한 항목의 출처 칸은 비운다.
- 종료 조건: 링크 깨짐 0, 표 열 수 이상 0, 마커 밖 내용 무변경.
W7. 조달청 제비율 수집 (법령정보센터 밖 — 별도 경로)
조달청 시설공사 원가계산 간접공사비(제비율) 적용기준은 법령·행정규칙이 아니라 국가법령정보센터에 없다. 수집 방법:
- 1차: 조달청 누리집 게시판(시설총괄과 발표). 2차(실사용): 한국표준품셈정보원 자료실(kseis.co.kr → 자료실에서 "조달청 제비율" 검색) — 변경 시마다 토목/건축/국가유산 xlsx 재게시됨. 첨부 다운로드 URL 형식:
kseis.co.kr/bbs/data/dataFileDown.do?bbs_seq=<seq>&file_no=1(1=토목). - 저장:
행정규칙/토목공사원가계산 제비율 적용기준/첨부/YYYY.MM.DD_조달청_토목공사_제비율.xlsx+ 정리본현행_YYYYMMDD.md(기존 판본 덮어쓰지 않고 추가). - 갱신 주기: 수동. 연초(1월) 확인 필수 + 분기 1회 권장 — 2026년에만 3회(01.01/03.13/04.13) 변경된 전례. 변경 확인 시
technical_info/01_임도/05_원가정보/제비율.md도 함께 갱신.
2. 불변 규칙
- 원문 파일은 수정하지 않는다. 오류가 있어도 그대로 두고 별도로 기록한다.
교본시점_*과임도기술교본/은 대조 기준이므로 갱신하지 않는다.- 명칭이 바뀌어도
_meta.md의 법령ID는 불변이다. 추적 키로 쓴다. - 폐지·승계된 법령은 폴더를 지우지 않는다. 승계 관계를
_meta.md·CHANGELOG.md에 남기고, 폐지 전 판본도 함께 보관한다.
3. 처리 방침 (2026-08-09 결정)
- 수집·변환 스크립트 저장소 이관 완료 —
original/_pipeline/에 최종본 배치. 경로는 폴더 위치 기준 상대라 어디서든 실행된다. 스크립트↔워크플로 대응은_pipeline/README.md참조. (단,docs/는.gitignore로 원격 제외 = 로컬 볼트. 원격 백업이 필요하면 별도 처리) - 구형 HWP 판독 = 해결 — 이전에 "구형
.hwp는 바이너리라 못 읽는다"고 적었으나,_pipeline/hwp5_text.py(olefile 기반)로 실제 추출에 성공했다. 임도시설공사 표준시방서 2016.12 HWP를 이 방식으로 읽어 교본 15.4와 83% 일치를 확인함. - 임도시설공사 표준시방서 확보 — HWP 원본 + 설명 md. 본문은 교본 15.4(2020, 더 최신)를 최종본으로 본다.
표준시방서/임도시설공사 표준시방서/_meta.md참조.
보류 (필요 시 재개)
- 미수집 3건 보류 — 자연휴양림 처리지침 / 중기운용관리예규 / 예산편성기준. 인용 수가 적고 실무 비중 낮음. 진행하다 필요해지면 추가, 불필요하면 목록에서 삭제.
- 토목공사원가계산 제비율 — 수집 완료 (2026-08-12) — 조달청 2026.04.13판 xlsx + 정리 md. 수집·갱신 절차는 §W7. 이후 변경분은 수동 갱신.
- KS 45건 현상 유지 — 메타데이터(◐)만 확보. 원문은 DRM이라 무료 경로 없음. 특정 KS 원문이 필요해지면 그때 다른 방법(뷰어 열람·구매)을 찾는다.
- 공백 소실 첨부 md — 해결 — HWPX 원본 11건을
_pipeline/hwpx_text.py로 재추출(공백·표·박스·계층 복원). 산림사업 표준품셈은 표 2438개·헤딩 503개·박스 35개로 완전 복원, 띄어쓰기 0.0. 별표 16건도fix_spacing.py로 프로즈 띄어쓰기 복원. - 별표 프로즈 공백 잔여 8건 — 대기환경보전법 자동차 별표 등 주변 문서. 표·수치는 정상, 프로즈만 공백 붙음(판독·검색 가능). md 문단이 HWP보다 길게 병합되거나 서식 이미지 기반이라 자동 복원 한계. 산안비 별지1은 2026-08-17 HWP·PDF 대조로 표 복원 완료.
_품질점검_보고서.md참조.
갱신 운영
- 갱신 주기·실행은 사용자가 결정한다. 자동 스케줄 없음. 사용자가 수동 작업을 요청하면
_pipeline스크립트로 W1~W6을 수행한다. 조달청 제비율은 §W7 별도 경로.