Busan Data Guide

pnu_dhc
Kimseoyun (토론 | 기여)님의 2025년 12월 29일 (월) 09:17 판
이동: 둘러보기, 검색

부산 지역 인문학 데이터 편찬 입문 가이드

📚 부산 지역 인문학 자료 데이터화 입문 가이드

『부산을 빛낸 인물』과 『부산의 자연마을』의 디지털 데이터 변환

📖 들어가며: 부산 인문 자료의 디지털화

본 프로젝트는 부산광역시 문화유산과 시사편찬실에서 발간한 『부산을 빛낸 인물』과 『부산의 자연마을』이라는 부산의 인문 자료를 디지털 데이터로 변환하는 기초 작업입니다.

📚 프로젝트 규모 및 팀 구성

작업 대상 자료: 부산광역시사편찬위원회 자료실 및 부산 지역사 도서관에서 PDF 확인 가능

👥 팀 구성 (총 24명: 인문계 18명 + 이공계 6명)

역할: 인문계-데이터 편찬 및 태깅 / 이공계-기술 지원 및 자동화

A팀

부산을 빛낸 인물 전 3권(총 800페이지)

  • 인원: 6명 (인문계 4명 + 이공계 2명)
  • 담당: 『부산을 빛낸 인물』 800페이지
  • 총괄: 디지털인문학센터 연구전략부장
B팀

부산의 자연마을 제1, 2, 6권(총 1,200페이지)

  • 인원: 9명 (인문계 7명 + 이공계 2명)
  • 담당: 『부산의 자연마을』 1,200페이지
  • 총괄: 디지털인문학센터 겸직교수
C팀

부산의 자연마을 제3, 4, 5권(총 1,200페이지)

  • 인원: 9명 (인문계 7명 + 이공계 2명)
  • 담당: 『부산의 자연마을』 1,200페이지
  • 총괄: 디지털인문학센터 계약교수
📊 인문계 학생 (각 팀 4~7명씩, 총 18명) 주요 역할
  • PDF에서 추출한 텍스트를 Excel/구글 시트에 입력
  • 텍스트 유형 판단 (분류 작업)
  • 의미 요소 식별 (XML 태깅을 위한 준비 작업)
  • 대학원생: 메타데이터(페이지, 장 번호 등 서지 정보 기록) 관리 및 검수
💻 이공계 학생 (각 팀 2명씩, 총 6명) 주요 역할
  • 파이썬 스크립트 개발 (태깅 마커 [P][/P] → XML 자동 변환)
  • 데이터 검증 및 오류 체크 자동화
  • 팀 내 기술적 문제 실시간 지원
  • VScode, Git 등 도구 활용 교육

이제 책 속의 자료를 시맨틱 데이터로 변환하는 기초 작업을 진행할 예정입니다. 왜 이 작업이 필요할까요?

부산광역시사편찬위원회 자료실에 PDF로 제공되는 도서는 한 번에 한 사람만 읽을 수 있지만, 디지털 데이터로 변환된 지식은:

  • 💡 검색 가능: "1950년대 부산 영도구"라고 검색하면 관련된 모든 내용이 한눈에 보이게 만들 수 있습니다!
  • 🔗 연결 가능: 인물과 장소, 사건이 서로 연결되어 새로운 통찰을 발견할 수 있습니다!
  • 📊 분석 가능: 빈도, 패턴, 관계를 통해 보이지 않던 역사적 의미를 발견할 수 있습니다!
  • 🌐 공유 가능: 전 세계 연구자들과 부산의 이야기를 나눌 수 있어요

🔥 전체 로드맵: 3단계 여정

1

기초 데이터 작업

현재 단계

  • PDF → 텍스트 추출
  • 구조화 → CSV 정리
  • 태깅 → XML 변환

목표: 원천 자료를 DB에 업로드 가능한 형태로 구조화

2

데이터 분석(Data Analysis)

  • 빈도 분석 & 키워드 추출
  • 관계 파악
  • 의미 해석

목표: 구축된 데이터에서 학문적 의미와 패턴 도출

3

데이터 설계(Data Modeling)

  • 온톨로지 설계
  • 지식 그래프 구상
  • 활용 방안 기획

목표: 플랫폼 구축을 위한 데이터 모델링

📊 작업 일정 계획 (2026년 1월~2월)

📚 전체 분량
  • 『부산을 빛낸 인물』: 총 800여 페이지 → 1개 팀 (6명) 담당
  • 『부산의 자연마을』: 총 2,400여 페이지 → 2개 팀 (각 9명) 분담
    • 1팀: 1,200페이지
    • 2팀: 1,200페이지

※ 각 팀원은 담당 권/장을 선정하여 2개월간 데이터 편찬 작업을 진행합니다.

기간 목표 세부 과제
1월 16일 csv 작업 파일 및 txt 원본 제출
  • XML 태깅 교육 및 연습
  • 팀장 및 담당 역할 선정
  • PDF 텍스트 추출 연습
  • 검토 후 스프레드시트 작업 시작
  • 검수자는 매주 일정 분량씩 받아서 작업
1월 23일 txt 전처리 파일 및 기본 구조화 작업 파일 제출
  • 원본에서 병기된 한자 및 부호 제거 후 본문만 남기기
  • 간단한 분석 테스트(형태소분석 등)
  • 전처리 파일에 기본 구조화 작업(편장 구분 등)
  • 1차 중간 점검 및 피드백
1월 30일 XML 마커 연습 파일 제출
  • 담당 분량의 10%를 연습 작업물로 제출
  • 인문계: text_tagged 열 작업 진행
  • 이공계: 파이썬 스크립트 개발 시작
  • 2차 중간 점검 및 오류 수정
2월 27일 완료 및 품질 검수 + XML 변환
  • 담당 분량 100% 완료 작업물 제출
  • 인문계: 전체 text_tagged 완성
  • 이공계: XML 자동 변환 실행
  • 전체 데이터 통합
  • 팀원 간 교차 최종 오류 검토
  • 최종 결과물 및 결과보고서 제출

📊 우리 팀 데이터 구조 이해하기

우리가 사용하는 구글 시트는 18개의 필드(열)로 구성되어 있어요. 각 필드가 왜 필요한지 함께 살펴볼까요?

💡 작업 결과물 제출
  • 중간 산출물: 총괄 교수님과 상의 후 팀별로 경과 보고
  • 최종 산출물: 권별.csv, 권별.txt, 권별.xml + 팀별 결과보고서(팀장을 정해서 한 명이 9개 파일 수합 후 이메일로 제출)
  • 권별 파일명: lightuppeople01..., B_jayeonmaeul01...(부산 지역사 도서관 PDF파일명을 따름)
  • 🔑 핵심 필드 설명

    필드명 예시 설명 작업자가 할 일
    id txt_10001 텍스트 고유 번호 필수 반드시 부여 (중복 금지!)
    book_id lightuppeople01 책 식별자 책마다 고정값 사용
    book_title 부산을_빛낸_인물 책 제목 언더바(_)로 연결
    sub_title 20세기_이전_인물편 부제목 있는 경우만 입력
    publisher 부산광역시_문화유산과_시사편찬실 발행처 책 정보 그대로
    pub_date 2004.06 출판일 YYYY.MM 형식
    chapter 001 장 번호 3자리 숫자 (001, 002...)
    page 005 페이지 3자리 숫자 (005, 006...)
    person_id per_10001 인물 고유 번호 필수 새 인물마다 부여
    name_ko 최치원 인물 한글 이름 정확하게 입력
    name_ch 崔致遠 인물 한자 이름 있는 경우만 입력
    topic 해운대의_유래 소주제 섹션 제목 그대로
    author 정경주_경성대교수 글쓴이 이름_소속 형식
    text_original (본문 내용) 원문 텍스트 필수 가장 중요!
    text_type normal/citation 텍스트 유형이 인용문인지 구분 집필자가 기술한 텍스트인지 인용문인지 등을 구별
    relation_note txt_10008 관련 텍스트 ID 연결된 경우만
    img_caption 최치원_영정 이미지 설명 이미지 있을 때만
    remark 번역문 / 원문 비고 필수 2월말에 결과보고서로 제출

    📖 실전 예시로 배우기

    사례 1: 일반 텍스트 처리하기

    PDF 원문 (5페이지)

    해운대의 유래 사람은 땅의 정기를 받아 태어나고, 땅은 사람으로 인하여 이름을 얻게 된다. 한반도 동남쪽 끝 바닷가의 한 모퉁이에 있는 해운대는 천년 전 신라의 학사 최치원이 머물며 자취를 남긴 곳이다.

    스프레드시트 입력 결과

    id book_title chapter page person_id name_ko topic text_type
    txt_10001 부산을_빛낸_인물 001 005 per_10001 최치원 해운대의_유래 normal
    💡 체크포인트
    • id는 연속된 번호: txt_10001, txt_10002, txt_10003...
    • person_id는 새 인물 등장시에만 변경
    • 한 문단 = 한 행: 문단 단위로 나누어 입력
    • text_type은 'normal': 일반 서술 텍스트

    사례 2: 인용문(citation) 처리하기

    PDF 원문 (6페이지)

    제 나이 열 두살 때 집을 떠나 서쪽으로 갔습니다. 배를 탈 적에 돌아가신 아버지께서 타이르시기를, '십 년 안에 진사(進士)에 급제하지 못하면 내 아들이라 하지 말라. 나도 아들을 두었다 아니하리라. 가라! 부지런히 하여 네 힘을 게을리 말라'고 하셨습니다.

    스프레드시트 입력 결과

    id text_original text_type relation_note
    txt_10006 최치원은 857년(헌안왕 원년)에 신라의 서울 경주에서 태어났다 normal
    txt_10007 제 나이 열 두살 때 집을 떠나 서쪽으로 갔습니다.(도서 원본에서는 볼드체로 표시) citation txt_10006
    💡 체크포인트
    • text_type을 'citation'으로: 직접 인용문임을 표시
    • relation_note 활용: 앞 문장(txt_10006)과 연결됨을 표시
    • 따옴표 포함: 원문의 인용 부호 그대로 유지

    사례 3: 시(poem) 처리하기 - 가장 까다로운 부분!

    PDF 원문 (11페이지) - 정서의 시

    狂奔疊石吼重巒 人語難分咫尺間 常恐是非聲到耳 故敎流水盡籠山 (번역) 미친 물 바위 치며 겹겹 산을 뒤흔드니 지척 사이에도 사람 소리 모르겠네.

    스프레드시트 입력 결과 - 원문과 번역문을 분리!

    id person_id name_ko text_original text_type relation_note remark
    txt_10013 per_101_002 정서 狂奔疊石吼重巒 / 人語難分咫尺間 / 常恐是非聲到耳 / 故敎流水盡籠山 poem txt_10014 원문
    txt_10014 per_101_002 정서 미친 물 바위 치며 겹겹 산을 뒤흔드니 / 지척 사이에도 사람 소리 모르겠네. / 세상의 시비 소리 들릴까 두려워서 / 짐짓 흐르는 물로 산을 온통 가두었네. poem txt_10013 번역문
    💡 체크포인트
    • 한문 원문과 번역문 = 2개 행: 별도로 입력!
    • 연(구절) 구분은 슬래시(/): 狂奔疊石吼重巒 / 人語難分咫尺間
    • relation_note로 연결: 원문과 번역이 서로를 가리킴
    • remark에 명시: '원문' 또는 '번역문'

    사례 4: 가사(歌辭) 처리하기

    PDF 원문 (19페이지) - <삼진작 三眞勺>

    내 님믈 그리와 우니다니 山졉동새 난 이슷요이다 아니시며 거츠르신 아으 잔월효성(殘月曉星)이 아시리이다 (번역) 내 임을 그리워하여 울고 있더니 두견새와 나와는 비슷합니다 그려
    💡 체크포인트
    • 고어도 poem으로 처리: 가사는 시(poem)로 분류
    • remark에 작품명: 가사 제목 명시
    • 특수문자 처리: 깨진 부분은 원문 그대로 표시

    🔢 ID 부여 규칙 마스터하기

    1. 텍스트 ID (id) 규칙

    txt_10001, txt_10002, txt_10003...
    규칙
    • 형식: txt_ + 5자리 숫자
    • 시작: 10001부터 시작
    • 연속성: 중간에 번호를 건너뛰지 않음
    • 고유성: 전체 데이터베이스에서 중복되면 안 됨!

    2. 인물 ID (person_id) 규칙

    per_10001, per_10002, per_20001...
    규칙
    • 형식: per_ + 5자리 숫자
    • 책번호:
      • 10001 = 『부산을 빛낸 인물』 권1
      • 20001 = 『부산을 빛낸 인물』 권2
      • 40001 = 『부산의 자연마을』 권1
    • 인물번호: 첫자리수는 권마다 달라지며 등장 순서대로 부여

    실전 예시

    상황 person_id 설명
    최치원이 5페이지에서 처음 등장 per_10001 첫 번째 인물
    정서가 11페이지에서 처음 등장 per_10002 두 번째 인물
    최치원이 다시 15페이지에 등장 per_10001 동일 ID 재사용!
    💡 팁
    • 인물 등장 순서대로 번호 부여: 페이지 순서가 아니라 등장 순서
    • 같은 인물은 같은 ID: 다른 책에 등장해도 같은 인물이라면 ID는 하나
    • 엑셀 필터 활용: 이미 부여된 인물 ID 확인하기

    💻 공동작업용 스프레드시트

    아래는 우리 팀이 실제로 작업하는 구글 시트입니다. 실시간으로 데이터를 확인하고 입력할 수 있어요.

    📊 PNU_DHC 플랫폼 데이터 작업 시트 새 탭에서 열기 →
    💡 스프레드시트 사용 팁
    • 위 임베드 창에서 바로 데이터를 확인할 수 있어요
    • 실제 입력은 "새 탭에서 열기" 버튼을 클릭해서 진행하세요
    • 여러 사람이 동시에 작업할 수 있어요 (실시간 공동 편집)
    • 변경 이력은 자동으로 저장됩니다

    ✅ 최종 체크리스트

    작업 완료 전에 꼭 확인하세요!

    • id가 연속되어 있나요? (txt_10001 → txt_10002 → txt_10003)
    • person_id가 올바르게 부여되었나요?
    • 같은 인물이 여러 곳에 나오면 같은 person_id를 사용했나요?
    • text_type이 정확한가요? (normal/citation)
    • 시의 원문과 번역문을 분리했나요?
    • relation_note로 관련 텍스트를 연결했나요?

    🏷️ XML 태깅: 데이터에 의미 부여하기

    CSV로 정리한 텍스트에 의미론적 태그(Semantic Tags)를 붙여서 컴퓨터가 "누가", "어디서", "언제" 같은 정보를 이해할 수 있게 만드는 작업입니다.

    🎯 왜 XML 태깅이 필요한가요?

    태깅 전 (일반 텍스트)

    최치원은 857년에 경주에서 태어났다.

    → 컴퓨터는 그냥 글자로만 인식

    태깅 후 (XML)

    <persName>최치원</persName>은
    <date when="857">857년</date>에
    <placeName>경주</placeName>에서 태어났다.

    → 인물, 시간, 장소를 구분해서 인식!

    📚 온톨로지 설계 참고: 광주인문도시 사례

    우리 프로젝트는 광주인문도시스토리플랫폼의 온톨로지 설계를 참고합니다:

    🔗 광주 온톨로지 Class 설계 보기

    광주 사례에서는 Person, Place, Event, Organization, Artifact 등의 클래스를 정의했습니다. 우리는 이를 부산 지역 특성에 맞게 적용할 예정입니다.

    🎯 단계별 태깅 전략 (난이도별 접근)

    1

    1차 작업 (필수) - 가장 명확한 요소

    현재 작업 단계

    인명 [P]최치원[/P] 사람 이름 (판단 쉬움)
    지명 [L]영도구[/L] 장소, 지역명 (판단 쉬움)

    💡 추천: 학부생 기초 작업은 인명과 지명만 집중하는 것을 권장합니다!

    • ✅ 판단이 가장 명확
    • ✅ 작업 속도가 빠름
    • ✅ 온톨로지 핵심인 "누가-어디서" 관계망 우선 구축
    2

    2차 작업 (선택) - 조금 더 복잡

    시간 [D]1876년[/D] 날짜, 연도, 시대
    기관명 [O]동래부[/O] 단체, 조직, 관청
    서명 [T]동래부지[/T] 책, 문서, 작품명

    진행 시기: 1차 작업 완료 후 또는 동시 진행 가능

    3

    3차 작업 (고급) - 전문가 검수 필요

    문화유산 [H]동래읍성[/H] 유적, 문화재, 건축물
    사건명 [E]임진왜란[/E] 역사적 사건, 행사
    작품명 [W]해운대가[/W] 시, 그림, 예술작품

    진행 시기: 데이터 분석 및 설계 단계에서

    ※ 문화유산과 지명, 작품명과 서명의 구분이 애매할 수 있어 전문가 판단 필요

    🔍 1차 작업: 인명 + 지명 태깅 실전

    예시 1: 『부산을 빛낸 인물』

    원문:
    최치원은 857년(헌안왕 원년)에 신라의 서울 경주에서 태어났다. 868년(경문왕 8)에 12세의 나이로 당나라에 들어갔다.
    1차 태깅 (인명 + 지명만):
    [P]최치원[/P]은 857년([P]헌안왕[/P] 원년)에 [L]신라[/L]의 서울 [L]경주[/L]에서 태어났다. 868년([P]경문왕[/P] 8)에 12세의 나이로 [L]당나라[/L]에 들어갔다.
    💡 판단 기준
    • 인명: 사람 이름 (최치원, 헌안왕, 경문왕)
    • 지명: 장소/지역 (신라, 경주, 당나라)
    • 제외: 857년, 868년 같은 시간 표현 (2차 작업에서!)

    예시 2: 『부산의 자연마을』

    원문:
    영도구 동삼동은 조선시대에는 절영도의 일부였다. 1876년 개항 이후 일본인들이 거주하기 시작했으며, 1942년 부산부에 편입되었다.
    1차 태깅 (인명 + 지명만):
    [L]영도구[/L] [L]동삼동[/L]은 조선시대에는 [L]절영도[/L]의 일부였다. 1876년 개항 이후 일본인들이 거주하기 시작했으며, 1942년 [L]부산부[/L]에 편입되었다.
    💡 판단 기준
    • 지명: 영도구, 동삼동, 절영도, 부산부 (모두 장소)
    • 인명: 없음
    • 제외: 조선시대, 1876년, 1942년 (2차 작업에서!)

    🔄 작업 도구별 역할 정리

    단계 도구 작업 내용 담당
    1단계 csv Excel / Google Sheets CSV 데이터 입력 (text_original) 전체 팀원
    2단계 txt Notepad++ / VSCode 태깅 마커 표시 (text_tagged) 인문계 학생
    3단계 xml Python 마커 → XML 자동 변환 이공계 학생
    4단계 valid check XML Validation 도구 XML 파일 검수 및 수정 팀 총괄 + 전체
    ⚠️ 태깅 시 주의사항
    • 일관성 유지: 같은 대상은 항상 같은 방식으로 태깅
    • 중첩 금지: [P][L]김해[/L][/P] (X) → 하나만 선택
    • 불확실하면 표시 안 함: 확실한 것만 태깅
    • Excel에서 작업: 익숙한 도구로 빠르게 진행
    • VSCode는 검수용: XML 변환 후 최종 확인에만 사용

    📊 태깅 진도 체크리스트

    • 인명과 지명의 차이를 구분할 수 있나요?
    • 마커 표기법([P], [L])을 이해했나요?
    • Excel에 text_tagged 열을 추가했나요?
    • 샘플 10개 문단을 태깅해보았나요?
    • 팀원들과 태깅 기준을 통일했나요?
    • VSCode를 설치하고 XML Tools 확장을 설치했나요?

    💬 자주 묻는 질문 (Q&A)

    Q1. 인물이 명확하지 않은 경우는?

    A. person_id를 비워두고, remark에 "인물 미상" 표시

    Q2. 여러 인물이 한 문단에 나오면?

    A. 주요 인물의 person_id를 사용하고, remark에 "김철수, 이영희 등장" 메모

    Q3. 페이지 번호가 불분명하면?

    A. 앞뒤 맥락으로 유추하고, remark에 "페이지 추정" 표시

    Q4. 작업 중 막힐 때는?

    A.

    1. 팀 단톡방에 질문
    2. 매주 팀별로 정기 모임(zoom)
    3. 작업 메뉴얼 재확인

    🎯 마무리

    기억해야 할 핵심 3가지

    1. 일관성이 생명: 같은 항목은 항상 같은 방식으로
    2. ID는 신중하게: 한번 부여한 ID는 앞으로도 계속 사용될 예정
    3. 협업이 중요: 막힐 때는 팀원들과 의논하기(논의가 필요하다 생각한 부분을 결과보고서에 기입!!)

    📎 참고 자료

    © 2025 부산대학교 디지털인문학센터 (Digital Humanities Center of Pusan National University)

    PNU 로컬 인문학 데이터 프로젝트

    문의 및 결과물 제출: 김서윤 sy527991@pusan.ac.kr | 051-510-1594 | 최종 업데이트: 2025년 12월