Files
Aislo/resources/knowledge/01_수집지침.md
T

102 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 01_수집지침 — 원문 수집·갱신 작업 절차 (W1~W7)
> 법령·행정규칙·표준시방서·교본 **원문(`original/`)의 수집·변환·품질점검·색인 갱신** 절차서. AI가 그대로 실행한다.
> 전체 지도: [README.md](README.md) · 기술문서 작성 규칙: [00_운영지침.md](00_운영지침.md) · 실무 분석: [02_분석지침.md](02_분석지침.md)
> 사방 원문 특기: 사방기술교본은 ToUnicode 교정으로 텍스트 추출 가능한 `한글교정.pdf`가 원본이다. 교정 방법·검증은 [원문/사방기술교본_한글교정_작업가이드.md](<original/사방기술교본/원문/사방기술교본_한글교정_작업가이드.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_HEADER `b" 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로 추출하고 본문 위치에 `![그림](../pic/…)` 로 인라인 삽입한다(`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/` 에 내려받아 `![그림](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. 1차: 조달청 누리집 게시판(시설총괄과 발표). 2차(실사용): **한국표준품셈정보원 자료실**(kseis.co.kr → 자료실에서 "조달청 제비율" 검색) — 변경 시마다 토목/건축/국가유산 xlsx 재게시됨. 첨부 다운로드 URL 형식: `kseis.co.kr/bbs/data/dataFileDown.do?bbs_seq=<seq>&file_no=1`(1=토목).
2. 저장: `행정규칙/토목공사원가계산 제비율 적용기준/첨부/YYYY.MM.DD_조달청_토목공사_제비율.xlsx` + 정리본 `현행_YYYYMMDD.md` (기존 판본 덮어쓰지 않고 추가).
3. **갱신 주기: 수동.** 연초(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 결정)
- [x] **수집·변환 스크립트 저장소 이관 완료** — `original/_pipeline/` 에 최종본 배치. 경로는 폴더 위치 기준 상대라 어디서든 실행된다. 스크립트↔워크플로 대응은 `_pipeline/README.md` 참조. (단, `docs/` 는 `.gitignore`로 원격 제외 = 로컬 볼트. 원격 백업이 필요하면 별도 처리)
- [x] **구형 HWP 판독 = 해결** — 이전에 "구형 `.hwp`는 바이너리라 못 읽는다"고 적었으나, `_pipeline/hwp5_text.py`(olefile 기반)로 실제 추출에 성공했다. 임도시설공사 표준시방서 2016.12 HWP를 이 방식으로 읽어 교본 15.4와 83% 일치를 확인함.
- [x] **임도시설공사 표준시방서 확보** — HWP 원본 + 설명 md. 본문은 교본 15.4(2020, 더 최신)를 최종본으로 본다. `표준시방서/임도시설공사 표준시방서/_meta.md` 참조.
### 보류 (필요 시 재개)
- [ ] **미수집 3건 보류** — 자연휴양림 처리지침 / 중기운용관리예규 / 예산편성기준. 인용 수가 적고 실무 비중 낮음. 진행하다 필요해지면 추가, 불필요하면 목록에서 삭제.
- [x] **토목공사원가계산 제비율 — 수집 완료** (2026-08-12) — 조달청 2026.04.13판 xlsx + 정리 md. 수집·갱신 절차는 §W7. 이후 변경분은 수동 갱신.
- [ ] **KS 45건 현상 유지** — 메타데이터(◐)만 확보. 원문은 DRM이라 무료 경로 없음. 특정 KS 원문이 필요해지면 그때 다른 방법(뷰어 열람·구매)을 찾는다.
- [x] **공백 소실 첨부 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 별도 경로.