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

3.7 KiB
Raw Blame History

KORMARC / MARC21 서지파일 핸들링 정보 수집

MARC21이란?

  • Machine-Readable Cataloging
  • 도서관 서지 데이터 표준 형식
  • 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 기본 사용법

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 변환 테이블 필요