Files
backup_openclaw/stack/003-kormarc-info.md
2026-03-30 19:30:25 +09:00

124 lines
3.7 KiB
Markdown
Raw Permalink 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.
# KORMARC / MARC21 서지파일 핸들링 정보 수집
## MARC21이란?
- **M**achine-**R**eadable **C**ataloging
- 도서관 서지 데이터 표준 형식
- ISO 2709 기반 바이너리 포맷
- 레코드 구조: 리더(24바이트) + 디렉토리 + 필드 데이터
## 레코드 구조
```
[리더 24바이트][디렉토리][필드1][필드2]...[필드n][레코드 종료 문자(0x1D)]
```
### 리더 (Leader)
- 24바이트 고정 길이
- 레코드 길이, 상태, 레코드 유형, 지시자/서브필드 길이 등 포함
### 필드 구조
- **제어 필드 (001~009)**: 지시자/서브필드 없음, 데이터만
- **데이터 필드 (010~999)**: 지시자 2개 + 서브필드 (delimiter `$` + 코드 + 데이터)
- 예: `245 10$a제목$bsubtitle`
### 주요 태그
| 태그 | 내용 |
|------|------|
| 001 | 제어번호 |
| 005 | 최종 수정일시 |
| 008 | 고정길이 데이터 (언어, 출판국 등) |
| 020 | ISBN |
| 040 | 카탈로그링 기관 |
| 100 | 주 저자 |
| 245 | 제목 |
| 250 | 판사항 |
| 260 | 출판정보 |
| 300 | 물리적 설명 |
| 500 | 일반 주석 |
| 650 | 주제 (LC) |
| 700 | 부가 저자 |
| 856 | 전자 자원 URL |
## KORMARC
- 한국형 MARC 형식
- MARC21을 기반으로 한국 서지 특화
- 차이점:
- 한글 처리 (EUC-KR 또는 UTF-8)
- 한국 도서관 분류법 연동
- 국립중앙도서관 기준
- 일부 필드/서브필드가 한국 특화
## Python 라이브러리
### pymarc (핵심)
- **설치**: `pip install pymarc`
- **용도**: MARC21 읽기/쓰기/수정
- **기능**:
- `MARCReader`: 배치 파일 읽기
- `Record`: 단일 레코드 객체
- `Field`: 필드 (태그 + 지시자 + 서브필드)
- `Subfield`: 서브필드 (코드 + 값)
- MARC/XML 변환
- MARC/JSON 변환
- MARC/CSV 변환
### pymarc 기본 사용법
```python
from pymarc import MARCReader, Record, Field, Subfield
# 읽기
with open('data.mrc', 'rb') as fh:
reader = MARCReader(fh)
for record in reader:
print(record.title) # 245 필드 자동 추출
print(record['245']['a']) # 서브필드 직접 접근
print(record.isbn()) # 020 필드 자동 추출
# 쓰기
record = Record()
record.add_field(
Field(tag='245', indicators=['1', '0'], subfields=[
Subfield(code='a', value='제목'),
Subfield(code='b', value='부제목'),
])
)
record.add_field(
Field(tag='100', indicators=['1', ' '], subfields=[
Subfield(code='a', value='저자명'),
])
)
# 파일 저장
with open('output.mrc', 'wb') as fh:
fh.write(record.as_marc())
```
### 기타 라이브러리
| 라이브러리 | 용도 |
|-----------|------|
| `pymarc` | MARC21 읽기/쓰기/수정 (핵심) |
| `marcjson` | MARC → JSON 변환 |
| `pymarc[xml]` | MARC → MARCXML 변환 |
| `tablib` | 범용 데이터셋 (CSV/JSON/XLS 지원) |
| `pydantic` | 데이터 모델 검증 |
## MARC 바이너리 포맷 상세
- 인코딩: ISO 2709
- 레코드 종료: `0x1D` (GS)
- 필드 종료: `0x1E` (RS)
- 서브필드 구분: `0x1F` (US) 또는 `$`
- 리더 길이: 24바이트 (고정)
- 디렉토리: 각 필드의 태그(3) + 길이(4) + 위치(5) = 12바이트 × 필드 수
## LLM 연동 아이디어
1. **일괄 편집**: 여러 레코드의 특정 필드를 LLM으로 일괄 수정
2. **자동 분류**: 제목/초록 기반 주제 분류
3. **형식 변환**: 자연어 → MARC 레코드 생성
4. **검증**: MARC 규칙 준수 여부 자동 확인
5. **번역**: 필드 값 번역 (다국어 서지 작성)
## 한국 국립중앙도서관 참고
- KORMARC 사양: https://www.nl.go.kr
- KORMARC는 MARC21을 기반으로 한국 특화 필드 추가
- 인코딩: UTF-8 권장 (구형은 EUC-KR)
- 필드 매핑: MARC21 ↔ KORMARC 변환 테이블 필요