"Busan Data Guide"의 두 판 사이의 차이
| 1번째 줄: | 1번째 줄: | ||
| + | <html lang="ko"> | ||
| + | <head> | ||
| + | <meta charset="UTF-8"> | ||
| + | <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||
| + | <title>부산 지역 인문학 데이터 편찬 입문 가이드</title> | ||
| + | <style> | ||
| + | * { | ||
| + | margin: 0; | ||
| + | padding: 0; | ||
| + | box-sizing: border-box; | ||
| + | } | ||
| − | + | body { | |
| − | + | font-family: 'Noto Sans KR', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; | |
| − | + | line-height: 1.7; | |
| − | + | color: #2c3e50; | |
| − | + | background-color: #f8f9fa; | |
| − | + | padding: 20px; | |
| + | } | ||
| − | + | .container { | |
| − | + | max-width: 1200px; | |
| − | + | margin: 0 auto; | |
| + | background-color: white; | ||
| + | box-shadow: 0 2px 10px rgba(0,0,0,0.1); | ||
| + | border-radius: 10px; | ||
| + | overflow: hidden; | ||
| + | } | ||
| + | /* Header - PNU DHC 스타일 */ | ||
| + | header { | ||
| + | background: linear-gradient(135deg, #2b5a7a 0%, #3d6b8f 100%); | ||
| + | color: white; | ||
| + | padding: 40px; | ||
| + | text-align: center; | ||
| + | } | ||
| + | header h1 { | ||
| + | font-size: 2.2em; | ||
| + | margin-bottom: 10px; | ||
| + | font-weight: 700; | ||
| + | color: white; | ||
| + | } | ||
| + | header p { | ||
| + | font-size: 1.1em; | ||
| + | opacity: 0.95; | ||
| + | } | ||
| + | /* Navigation */ | ||
| + | nav { | ||
| + | background-color: #1e4a66; | ||
| + | padding: 15px 40px; | ||
| + | position: sticky; | ||
| + | top: 0; | ||
| + | z-index: 100; | ||
| + | } | ||
| + | nav ul { | ||
| + | list-style: none; | ||
| + | display: flex; | ||
| + | flex-wrap: wrap; | ||
| + | gap: 25px; | ||
| + | } | ||
| + | nav a { | ||
| + | color: white; | ||
| + | text-decoration: none; | ||
| + | font-weight: 500; | ||
| + | transition: color 0.3s; | ||
| + | } | ||
| − | + | nav a:hover { | |
| + | color: #ff6b35; | ||
| + | } | ||
| − | + | nav a:visited { | |
| + | color: white; | ||
| + | } | ||
| + | /* Main Content */ | ||
| + | main { | ||
| + | padding: 40px; | ||
| + | } | ||
| + | section { | ||
| + | margin-bottom: 60px; | ||
| + | scroll-margin-top: 70px; | ||
| + | } | ||
| − | + | h2 { | |
| − | + | font-size: 2em; | |
| − | + | color: #2b5a7a; | |
| − | + | margin-bottom: 20px; | |
| − | + | padding-bottom: 10px; | |
| − | + | border-bottom: none; | |
| − | + | } | |
| − | + | h3 { | |
| + | font-size: 1.5em; | ||
| + | color: #1e4a66; | ||
| + | margin: 30px 0 15px 0; | ||
| + | } | ||
| − | + | h4 { | |
| + | font-size: 1.2em; | ||
| + | color: #555; | ||
| + | margin: 20px 0 10px 0; | ||
| + | } | ||
| − | + | p { | |
| + | margin-bottom: 15px; | ||
| + | } | ||
| − | + | /* Info Boxes - 차분한 색상 */ | |
| + | .info-box { | ||
| + | background-color: #e8f2f7; | ||
| + | border-left: 4px solid #2b5a7a; | ||
| + | padding: 20px; | ||
| + | margin: 20px 0; | ||
| + | border-radius: 5px; | ||
| + | } | ||
| − | + | .warning-box { | |
| + | background-color: #fff8e6; | ||
| + | border-left: 4px solid #ff9f43; | ||
| + | padding: 20px; | ||
| + | margin: 20px 0; | ||
| + | border-radius: 5px; | ||
| + | } | ||
| − | + | .success-box { | |
| + | background-color: #e8f5e9; | ||
| + | border-left: 4px solid #4caf50; | ||
| + | padding: 20px; | ||
| + | margin: 20px 0; | ||
| + | border-radius: 5px; | ||
| + | } | ||
| − | + | .tip-box { | |
| + | background-color: #fff4e6; | ||
| + | border-left: 4px solid #ff6b35; | ||
| + | padding: 20px; | ||
| + | margin: 20px 0; | ||
| + | border-radius: 5px; | ||
| + | } | ||
| − | + | /* Tables */ | |
| + | .table-wrapper { | ||
| + | overflow-x: auto; | ||
| + | margin: 20px 0; | ||
| + | } | ||
| − | + | table { | |
| + | width: 100%; | ||
| + | border-collapse: collapse; | ||
| + | background-color: white; | ||
| + | box-shadow: 0 2px 5px rgba(0,0,0,0.1); | ||
| + | } | ||
| − | + | th { | |
| + | background-color: #2b5a7a; | ||
| + | color: white; | ||
| + | padding: 12px; | ||
| + | text-align: left; | ||
| + | font-weight: 600; | ||
| + | } | ||
| − | + | td { | |
| + | padding: 12px; | ||
| + | border-bottom: 1px solid #ddd; | ||
| + | } | ||
| − | + | tr:hover { | |
| + | background-color: #f5f5f5; | ||
| + | } | ||
| − | + | /* Code Blocks */ | |
| + | .code-block { | ||
| + | background-color: #2c3e50; | ||
| + | color: #ecf0f1; | ||
| + | padding: 20px; | ||
| + | border-radius: 5px; | ||
| + | overflow-x: auto; | ||
| + | margin: 20px 0; | ||
| + | font-family: 'Courier New', monospace; | ||
| + | line-height: 1.5; | ||
| + | } | ||
| − | + | .code-inline { | |
| − | + | background-color: #e8f2f7; | |
| + | padding: 2px 6px; | ||
| + | border-radius: 3px; | ||
| + | font-family: 'Courier New', monospace; | ||
| + | color: #2b5a7a; | ||
| + | font-weight: 600; | ||
| + | } | ||
| − | + | /* Example Sections */ | |
| + | .example { | ||
| + | background-color: white; | ||
| + | border: 2px solid #2b5a7a; | ||
| + | padding: 20px; | ||
| + | border-radius: 8px; | ||
| + | margin: 20px 0; | ||
| + | box-shadow: 0 2px 5px rgba(0,0,0,0.08); | ||
| + | } | ||
| − | + | .example h4 { | |
| + | color: #ff6b35; | ||
| + | margin-top: 0; | ||
| + | } | ||
| − | + | /* Before/After Comparison */ | |
| + | .comparison { | ||
| + | display: grid; | ||
| + | grid-template-columns: 1fr 1fr; | ||
| + | gap: 20px; | ||
| + | margin: 20px 0; | ||
| + | } | ||
| − | + | .comparison-item { | |
| − | + | padding: 15px; | |
| − | + | border-radius: 5px; | |
| − | + | } | |
| − | + | .before { | |
| + | background-color: #fff5f5; | ||
| + | border: 2px solid #ff6b6b; | ||
| + | } | ||
| − | + | .after { | |
| − | + | background-color: #f0f9f4; | |
| − | + | border: 2px solid #51cf66; | |
| − | + | } | |
| − | + | /* Checklist */ | |
| + | .checklist { | ||
| + | background-color: #fafafa; | ||
| + | padding: 20px; | ||
| + | border-radius: 8px; | ||
| + | margin: 20px 0; | ||
| + | } | ||
| − | + | .checklist li { | |
| − | + | margin: 10px 0; | |
| − | + | padding-left: 30px; | |
| − | + | position: relative; | |
| + | } | ||
| − | + | .checklist li:before { | |
| + | content: "☐"; | ||
| + | position: absolute; | ||
| + | left: 0; | ||
| + | font-size: 1.2em; | ||
| + | color: #2b5a7a; | ||
| + | } | ||
| − | * | + | /* Spreadsheet Embed */ |
| − | + | .spreadsheet-container { | |
| − | + | margin: 30px 0; | |
| − | + | border: 3px solid #2b5a7a; | |
| + | border-radius: 8px; | ||
| + | overflow: hidden; | ||
| + | } | ||
| − | + | .spreadsheet-header { | |
| + | background-color: #2b5a7a; | ||
| + | color: white; | ||
| + | padding: 15px; | ||
| + | font-weight: 600; | ||
| + | display: flex; | ||
| + | justify-content: space-between; | ||
| + | align-items: center; | ||
| + | } | ||
| − | + | .spreadsheet-link { | |
| − | + | background-color: white; | |
| − | + | color: #2b5a7a; | |
| − | + | padding: 8px 16px; | |
| + | border-radius: 5px; | ||
| + | text-decoration: none; | ||
| + | font-size: 0.9em; | ||
| + | transition: all 0.3s; | ||
| + | font-weight: 600; | ||
| + | } | ||
| − | + | .spreadsheet-link:hover { | |
| + | background-color: #f0f0f0; | ||
| + | transform: translateY(-2px); | ||
| + | } | ||
| − | + | .spreadsheet-embed { | |
| + | width: 100%; | ||
| + | height: 600px; | ||
| + | border: none; | ||
| + | } | ||
| − | * | + | /* Roadmap */ |
| − | + | .roadmap { | |
| − | + | background-color: #f8fafb; | |
| − | + | padding: 30px; | |
| + | border-radius: 10px; | ||
| + | margin: 30px 0; | ||
| + | border: 1px solid #e0e0e0; | ||
| + | } | ||
| − | + | .roadmap-step { | |
| + | display: flex; | ||
| + | align-items: flex-start; | ||
| + | margin: 20px 0; | ||
| + | padding: 20px; | ||
| + | background-color: white; | ||
| + | border-radius: 8px; | ||
| + | box-shadow: 0 2px 5px rgba(0,0,0,0.08); | ||
| + | } | ||
| − | + | .roadmap-number { | |
| + | background-color: #2b5a7a; | ||
| + | color: white; | ||
| + | width: 50px; | ||
| + | height: 50px; | ||
| + | border-radius: 50%; | ||
| + | display: flex; | ||
| + | align-items: center; | ||
| + | justify-content: center; | ||
| + | font-size: 1.5em; | ||
| + | font-weight: bold; | ||
| + | margin-right: 20px; | ||
| + | flex-shrink: 0; | ||
| + | } | ||
| − | + | .roadmap-content h3 { | |
| − | + | margin-top: 0; | |
| − | + | color: #2b5a7a; | |
| + | } | ||
| − | + | /* Lists */ | |
| + | ul, ol { | ||
| + | margin: 15px 0 15px 30px; | ||
| + | } | ||
| − | + | li { | |
| + | margin: 8px 0; | ||
| + | } | ||
| − | * | + | /* Badges */ |
| − | + | .badge { | |
| − | + | display: inline-block; | |
| − | + | padding: 5px 12px; | |
| + | border-radius: 20px; | ||
| + | font-size: 0.85em; | ||
| + | font-weight: 600; | ||
| + | margin: 5px; | ||
| + | } | ||
| − | + | .badge-primary { | |
| + | background-color: #2b5a7a; | ||
| + | color: white; | ||
| + | } | ||
| − | + | .badge-success { | |
| + | background-color: #4caf50; | ||
| + | color: white; | ||
| + | } | ||
| − | + | .badge-warning { | |
| − | + | background-color: #ff9f43; | |
| − | + | color: white; | |
| − | + | } | |
| − | + | .badge-danger { | |
| + | background-color: #e74c3c; | ||
| + | color: white; | ||
| + | } | ||
| − | * | + | /* Fire Emoji Style for emphasis */ |
| − | + | .fire-emoji { | |
| − | + | color: #ff6b35; | |
| − | + | font-size: 1.2em; | |
| + | } | ||
| − | + | /* Footer */ | |
| + | footer { | ||
| + | background-color: #1e4a66; | ||
| + | color: white; | ||
| + | padding: 30px; | ||
| + | text-align: center; | ||
| + | } | ||
| − | * | + | /* Responsive */ |
| − | + | @media (max-width: 768px) { | |
| − | + | body { | |
| − | + | padding: 10px; | |
| + | } | ||
| − | + | main { | |
| + | padding: 20px; | ||
| + | } | ||
| − | + | header h1 { | |
| + | font-size: 1.6em; | ||
| + | } | ||
| − | + | nav ul { | |
| + | flex-direction: column; | ||
| + | gap: 10px; | ||
| + | } | ||
| − | + | .comparison { | |
| − | + | grid-template-columns: 1fr; | |
| − | + | } | |
| − | + | .spreadsheet-header { | |
| + | flex-direction: column; | ||
| + | gap: 10px; | ||
| + | } | ||
| − | + | .spreadsheet-embed { | |
| + | height: 400px; | ||
| + | } | ||
| + | } | ||
| − | + | /* Print Styles */ | |
| + | @media print { | ||
| + | nav { | ||
| + | display: none; | ||
| + | } | ||
| − | + | .spreadsheet-embed { | |
| + | display: none; | ||
| + | } | ||
| − | + | section { | |
| − | + | page-break-inside: avoid; | |
| − | + | } | |
| − | + | } | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | /* Highlight Important Text */ | |
| + | strong { | ||
| + | color: #2b5a7a; | ||
| + | } | ||
| − | + | /* Links */ | |
| + | a { | ||
| + | color: #2b5a7a; | ||
| + | text-decoration: none; | ||
| + | transition: color 0.3s; | ||
| + | } | ||
| − | + | a:hover { | |
| + | color: #ff6b35; | ||
| + | text-decoration: underline; | ||
| + | } | ||
| + | </style> | ||
| + | </head> | ||
| + | <body> | ||
| + | <div class="container"> | ||
| + | <header> | ||
| + | <h1>📚 부산 지역 인문학 자료 데이터화 입문 가이드</h1> | ||
| + | <p>『부산을 빛낸 인물』과 『부산의 자연마을』의 디지털 데이터 변환 </p> | ||
| + | </header> | ||
| − | + | <nav> | |
| − | + | <ul> | |
| − | + | <li><a href="#intro">들어가며</a></li> | |
| − | + | <li><a href="#roadmap">전체 로드맵</a></li> | |
| + | <li><a href="#structure">데이터 구조화</a></li> | ||
| + | <li><a href="#examples">실전 예시</a></li> | ||
| + | <li><a href="#id-rules">ID 규칙</a></li> | ||
| + | <li><a href="#process">작업 프로세스</a></li> | ||
| + | <li><a href="#spreadsheet">작업 스프레드시트</a></li> | ||
| + | <li><a href="#xml-tagging">XML 태깅</a></li> | ||
| + | <li><a href="#qa">Q&A</a></li> | ||
| + | </ul> | ||
| + | </nav> | ||
| − | = | + | <main> |
| + | <!-- 들어가며 --> | ||
| + | <section id="intro"> | ||
| + | <h2>📖 들어가며: 부산 인문 자료의 디지털화 </h2> | ||
| + | |||
| + | <p>본 프로젝트는 부산광역시 문화유산과 시사편찬실에서 발간한 『부산을 빛낸 인물』과 『부산의 자연마을』이라는 부산의 인문 자료를 디지털 데이터로 변환하는 기초 작업입니다.</p> | ||
| − | + | <h3>📚 프로젝트 규모 및 팀 구성</h3> | |
| + | |||
| + | <div class="info-box"> | ||
| + | <p> <strong>작업 대상 자료</strong>: 부산광역시사편찬위원회 자료실 및 부산 지역사 도서관에서 PDF 확인 가능</p> | ||
| + | <ul> | ||
| + | <li><strong> <a href="https://busandabom.net/index.nm?menuCd=105">『부산의 자연마을』전 6권</a> </strong>: 약 2,400페이지</li> | ||
| + | <li><strong> <a href="https://busandabom.net/index.nm?menuCd=110">『부산을 빛낸 인물』전 3권</a> </strong>: 약 800페이지</li> | ||
| + | </ul> | ||
| + | </div> | ||
| − | + | <div class="roadmap" style="margin-top: 20px;"> | |
| − | + | <h4 style="color: #2b5a7a; margin-bottom: 15px;">👥 팀 구성 (총 24명: 인문계 18명 + 이공계 6명)</h4> | |
| − | + | <p><strong>역할:</strong> 인문계-데이터 편찬 및 태깅 / 이공계-기술 지원 및 자동화</p> | |
| − | + | ||
| − | + | <div class="roadmap-step"> | |
| − | + | <div class="roadmap-number">A팀</div> | |
| + | <div class="roadmap-content"> | ||
| + | <h3 style="margin-top: 0;"> 부산을 빛낸 인물 전 3권(총 800페이지)</h3> | ||
| + | <ul> | ||
| + | <li><strong>인원:</strong> 6명 (인문계 4명 + 이공계 2명)</li> | ||
| + | <li><strong>담당:</strong> 『부산을 빛낸 인물』 800페이지</li> | ||
| + | <li><strong>총괄:</strong> 디지털인문학센터 연구전략부장</li> | ||
| + | </ul> | ||
| + | </div> | ||
| + | </div> | ||
| − | === | + | <div class="roadmap-step"> |
| + | <div class="roadmap-number">B팀</div> | ||
| + | <div class="roadmap-content"> | ||
| + | <h3 style="margin-top: 0;">부산의 자연마을 제1, 2, 6권(총 1,200페이지)</h3> | ||
| + | <ul> | ||
| + | <li><strong>인원:</strong> 9명 (인문계 7명 + 이공계 2명)</li> | ||
| + | <li><strong>담당:</strong> 『부산의 자연마을』 1,200페이지</li> | ||
| + | <li><strong>총괄:</strong> 디지털인문학센터 겸직교수</li> | ||
| + | </ul> | ||
| + | </div> | ||
| + | </div> | ||
| − | + | <div class="roadmap-step"> | |
| − | + | <div class="roadmap-number">C팀</div> | |
| − | + | <div class="roadmap-content"> | |
| − | + | <h3 style="margin-top: 0;">부산의 자연마을 제3, 4, 5권(총 1,200페이지)</h3> | |
| − | + | <ul> | |
| + | <li><strong>인원:</strong> 9명 (인문계 7명 + 이공계 2명)</li> | ||
| + | <li><strong>담당:</strong> 『부산의 자연마을』 1,200페이지</li> | ||
| + | <li><strong>총괄:</strong> 디지털인문학센터 계약교수</li> | ||
| + | </ul> | ||
| + | </div> | ||
| + | </div> | ||
| − | + | <div class="tip-box" style="margin-top: 20px;"> | |
| + | <strong>📊 인문계 학생 (각 팀 4~7명씩, 총 18명) 주요 역할</strong> | ||
| + | <ul> | ||
| + | <li>PDF에서 추출한 텍스트를 Excel/구글 시트에 입력</li> | ||
| + | <li>텍스트 유형 판단 (분류 작업)</li> | ||
| + | <li>의미 요소 식별 (XML 태깅을 위한 준비 작업)</li> | ||
| + | <li>대학원생: 메타데이터(페이지, 장 번호 등 서지 정보 기록) 관리 및 검수</li> | ||
| + | </ul> | ||
| + | </div> | ||
| − | + | <div class="tip-box" style="margin-top: 20px;"> | |
| + | <strong>💻 이공계 학생 (각 팀 2명씩, 총 6명) 주요 역할</strong> | ||
| + | <ul> | ||
| + | <li>파이썬 스크립트 개발 (태깅 마커 [P][/P] → XML 자동 변환)</li> | ||
| + | <li>데이터 검증 및 오류 체크 자동화</li> | ||
| + | <li>팀 내 기술적 문제 실시간 지원</li> | ||
| + | <li>VScode, Git 등 도구 활용 교육</li> | ||
| + | </ul> | ||
| + | </div> | ||
| + | </div> | ||
| − | + | <h3> 이제 책 속의 자료를 시맨틱 데이터로 변환하는 기초 작업을 진행할 예정입니다. 왜 이 작업이 필요할까요?</h3> | |
| + | |||
| + | <div class="info-box"> | ||
| + | <p>부산광역시사편찬위원회 자료실에 PDF로 제공되는 도서는 한 번에 한 사람만 읽을 수 있지만, 디지털 데이터로 변환된 지식은:</p> | ||
| + | <ul> | ||
| + | <li>💡 <strong>검색 가능</strong>: "1950년대 부산 영도구"라고 검색하면 관련된 모든 내용이 한눈에 보이게 만들 수 있습니다!</li> | ||
| + | <li>🔗 <strong>연결 가능</strong>: 인물과 장소, 사건이 서로 연결되어 새로운 통찰을 발견할 수 있습니다!</li> | ||
| + | <li>📊 <strong>분석 가능</strong>: 빈도, 패턴, 관계를 통해 보이지 않던 역사적 의미를 발견할 수 있습니다!</li> | ||
| + | <li>🌐 <strong>공유 가능</strong>: 전 세계 연구자들과 부산의 이야기를 나눌 수 있어요</li> | ||
| + | </ul> | ||
| + | </div> | ||
| + | </section> | ||
| − | == | + | <!-- 전체 로드맵 --> |
| + | <section id="roadmap"> | ||
| + | <h2><span class="fire-emoji">🔥</span> 전체 로드맵: 3단계 여정</h2> | ||
| + | |||
| + | <div class="roadmap"> | ||
| + | <div class="roadmap-step"> | ||
| + | <div class="roadmap-number">1</div> | ||
| + | <div class="roadmap-content"> | ||
| + | <h3>기초 데이터 작업<p style="display: inline-block; padding: 5px 12px; border-radius: 20px; font-size: 0.85em; font-weight: 600; background-color: #ff6b35; color: white; margin: 5px;">현재 단계</p></h3> | ||
| + | <ul> | ||
| + | <li>PDF → 텍스트 추출</li> | ||
| + | <li>구조화 → CSV 정리</li> | ||
| + | <li>태깅 → XML 변환</li> | ||
| + | </ul> | ||
| + | <p><strong>목표:</strong> 원천 자료를 DB에 업로드 가능한 형태로 구조화</p> | ||
| + | </div> | ||
| + | </div> | ||
| − | === | + | <div class="roadmap-step"> |
| + | <div class="roadmap-number">2</div> | ||
| + | <div class="roadmap-content"> | ||
| + | <h3>데이터 분석(Data Analysis)</h3> | ||
| + | <ul> | ||
| + | <li>빈도 분석 & 키워드 추출</li> | ||
| + | <li>관계 파악</li> | ||
| + | <li>의미 해석</li> | ||
| + | </ul> | ||
| + | <p><strong>목표:</strong> 구축된 데이터에서 학문적 의미와 패턴 도출</p> | ||
| + | </div> | ||
| + | </div> | ||
| − | + | <div class="roadmap-step"> | |
| − | + | <div class="roadmap-number">3</div> | |
| − | + | <div class="roadmap-content"> | |
| − | + | <h3>데이터 설계(Data Modeling)</h3> | |
| − | + | <ul> | |
| − | + | <li>온톨로지 설계</li> | |
| + | <li>지식 그래프 구상</li> | ||
| + | <li>활용 방안 기획</li> | ||
| + | </ul> | ||
| + | <p><strong>목표:</strong> 플랫폼 구축을 위한 데이터 모델링</p> | ||
| + | </div> | ||
| + | </div> | ||
| + | </div> | ||
| − | + | </section> | |
| − | + | ||
| + | <!-- 주차별 작업 계획 --> | ||
| + | <section id="schedule"> | ||
| + | <h2>📊 작업 일정 계획 (2026년 1월~2월)</h2> | ||
| − | + | <div class="info-box"> | |
| − | + | <strong>📚 전체 분량</strong> | |
| + | <ul> | ||
| + | <li><strong>『부산을 빛낸 인물』</strong>: 총 800여 페이지 → 1개 팀 (6명) 담당</li> | ||
| + | <li><strong>『부산의 자연마을』</strong>: 총 2,400여 페이지 → 2개 팀 (각 9명) 분담 | ||
| + | <ul> | ||
| + | <li>1팀: 1,200페이지</li> | ||
| + | <li>2팀: 1,200페이지</li> | ||
| + | </ul> | ||
| + | </li> | ||
| + | </ul> | ||
| + | <p style="margin-top: 10px;">※ 각 팀원은 담당 권/장을 선정하여 2개월간 데이터 편찬 작업을 진행합니다.</p> | ||
| + | </div> | ||
| − | + | <div class="table-wrapper"> | |
| + | <table> | ||
| + | <thead> | ||
| + | <tr> | ||
| + | <th> 기간 </th> | ||
| + | <th>목표</th> | ||
| + | <th>세부 과제</th> | ||
| + | </tr> | ||
| + | </thead> | ||
| + | <tbody> | ||
| + | <tr> | ||
| + | <td><strong> 1월 16일 </strong> </td> | ||
| + | <td> | ||
| + | csv 작업 파일 및 txt 원본 제출 | ||
| + | </td> | ||
| + | <td> | ||
| + | <div class="checklist"> | ||
| + | <ul> | ||
| + | <li>XML 태깅 교육 및 연습 </li> | ||
| + | <li>팀장 및 담당 역할 선정</li> | ||
| + | <li>PDF 텍스트 추출 연습</li> | ||
| + | <li>검토 후 스프레드시트 작업 시작</li> | ||
| + | <li>검수자는 매주 일정 분량씩 받아서 작업</li> | ||
| + | </ul> | ||
| + | </div> | ||
| + | </td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><strong> 1월 23일 </strong> </td> | ||
| + | <td>txt 전처리 파일 및 기본 구조화 작업 파일 제출</td> | ||
| + | <td> | ||
| + | <div class="checklist"> | ||
| + | <ul> | ||
| + | <li>원본에서 병기된 한자 및 부호 제거 후 본문만 남기기</li> | ||
| + | <li>간단한 분석 테스트(형태소분석 등)</li> | ||
| + | <li>전처리 파일에 기본 구조화 작업(편장 구분 등)</li> | ||
| + | <li>1차 중간 점검 및 피드백</li> | ||
| + | </ul> | ||
| + | </div> | ||
| + | </td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><strong> 1월 30일 </strong></td> | ||
| + | <td>XML 마커 연습 파일 제출</td> | ||
| + | <td> | ||
| + | <div class="checklist"> | ||
| + | <ul> | ||
| + | <li>담당 분량의 10%를 연습 작업물로 제출</li> | ||
| + | <li><strong>인문계: text_tagged 열 작업 진행</strong></li> | ||
| + | <li><strong>이공계: 파이썬 스크립트 개발 시작</strong></li> | ||
| + | <li>2차 중간 점검 및 오류 수정</li> | ||
| + | </ul> | ||
| + | </div> | ||
| + | </td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><strong> 2월 27일 </strong></td> | ||
| + | <td>완료 및 품질 검수 + XML 변환</td> | ||
| + | <td> | ||
| + | <div class="checklist"> | ||
| + | <ul> | ||
| + | <li>담당 분량 100% 완료 작업물 제출</li> | ||
| + | <li><strong>인문계: 전체 text_tagged 완성</strong></li> | ||
| + | <li><strong>이공계: XML 자동 변환 실행</strong></li> | ||
| + | <li>전체 데이터 통합</li> | ||
| + | <li>팀원 간 교차 최종 오류 검토</li> | ||
| + | <li>최종 결과물 및 결과보고서 제출</li> | ||
| + | </ul> | ||
| + | </div> | ||
| + | </td> | ||
| + | </tr> | ||
| + | </tbody> | ||
| + | </table> | ||
| + | </div> | ||
| − | |||
| − | |||
| − | |||
| − | + | </section> | |
| − | + | <!-- 데이터 구조 --> | |
| + | <section id="structure"> | ||
| + | <h2>📊 우리 팀 데이터 구조 이해하기</h2> | ||
| − | + | <p>우리가 사용하는 구글 시트는 <strong>18개의 필드(열)</strong>로 구성되어 있어요. 각 필드가 왜 필요한지 함께 살펴볼까요?</p> | |
| − | = | + | <div class="tip-box"> |
| + | <strong>💡 작업 결과물 제출</strong> | ||
| + | |||
| + | <li><strong>중간 산출물</strong>: 총괄 교수님과 상의 후 팀별로 경과 보고 </li> | ||
| + | <li><strong>최종 산출물</strong>: 권별.csv, 권별.txt, 권별.xml + 팀별 결과보고서(팀장을 정해서 한 명이 9개 파일 수합 후 이메일로 제출)</li> | ||
| + | <li><strong>권별 파일명</strong>: lightuppeople01..., B_jayeonmaeul01...(부산 지역사 도서관 PDF파일명을 따름)</li> | ||
| + | </div> | ||
| − | + | <h3>🔑 핵심 필드 설명</h3> | |
| − | + | <div class="table-wrapper"> | |
| − | + | <table> | |
| − | + | <thead> | |
| − | + | <tr> | |
| − | + | <th>필드명</th> | |
| − | + | <th>예시</th> | |
| − | + | <th>설명</th> | |
| − | + | <th>작업자가 할 일</th> | |
| − | + | </tr> | |
| − | + | </thead> | |
| + | <tbody> | ||
| + | <tr> | ||
| + | <td><code class="code-inline">id</code></td> | ||
| + | <td>txt_10001</td> | ||
| + | <td>텍스트 고유 번호</td> | ||
| + | <td><span class="badge badge-danger">필수</span> 반드시 부여 (중복 금지!)</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><code class="code-inline">book_id</code></td> | ||
| + | <td>lightuppeople01</td> | ||
| + | <td>책 식별자</td> | ||
| + | <td>책마다 고정값 사용</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><code class="code-inline">book_title</code></td> | ||
| + | <td>부산을_빛낸_인물</td> | ||
| + | <td>책 제목</td> | ||
| + | <td>언더바(_)로 연결</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><code class="code-inline">sub_title</code></td> | ||
| + | <td>20세기_이전_인물편</td> | ||
| + | <td>부제목</td> | ||
| + | <td>있는 경우만 입력</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><code class="code-inline">publisher</code></td> | ||
| + | <td>부산광역시_문화유산과_시사편찬실</td> | ||
| + | <td>발행처</td> | ||
| + | <td>책 정보 그대로</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><code class="code-inline">pub_date</code></td> | ||
| + | <td>2004.06</td> | ||
| + | <td>출판일</td> | ||
| + | <td>YYYY.MM 형식</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><code class="code-inline">chapter</code></td> | ||
| + | <td>001</td> | ||
| + | <td>장 번호</td> | ||
| + | <td>3자리 숫자 (001, 002...)</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><code class="code-inline">page</code></td> | ||
| + | <td>005</td> | ||
| + | <td>페이지</td> | ||
| + | <td>3자리 숫자 (005, 006...)</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><code class="code-inline">person_id</code></td> | ||
| + | <td>per_10001</td> | ||
| + | <td>인물 고유 번호</td> | ||
| + | <td><span class="badge badge-danger">필수</span> 새 인물마다 부여</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><code class="code-inline">name_ko</code></td> | ||
| + | <td>최치원</td> | ||
| + | <td>인물 한글 이름</td> | ||
| + | <td>정확하게 입력</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><code class="code-inline">name_ch</code></td> | ||
| + | <td>崔致遠</td> | ||
| + | <td>인물 한자 이름</td> | ||
| + | <td>있는 경우만 입력</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><code class="code-inline">topic</code></td> | ||
| + | <td>해운대의_유래</td> | ||
| + | <td>소주제</td> | ||
| + | <td>섹션 제목 그대로</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><code class="code-inline">author</code></td> | ||
| + | <td>정경주_경성대교수</td> | ||
| + | <td>글쓴이</td> | ||
| + | <td>이름_소속 형식</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><code class="code-inline">text_original</code></td> | ||
| + | <td>(본문 내용)</td> | ||
| + | <td>원문 텍스트</td> | ||
| + | <td><span class="badge badge-danger">필수</span> 가장 중요!</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><code class="code-inline">text_type</code></td> | ||
| + | <td>normal/citation</td> | ||
| + | <td>텍스트 유형이 인용문인지 구분 </td> | ||
| + | <td>집필자가 기술한 텍스트인지 인용문인지 등을 구별</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><code class="code-inline">relation_note</code></td> | ||
| + | <td>txt_10008</td> | ||
| + | <td>관련 텍스트 ID</td> | ||
| + | <td>연결된 경우만</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><code class="code-inline">img_caption</code></td> | ||
| + | <td>최치원_영정</td> | ||
| + | <td>이미지 설명</td> | ||
| + | <td>이미지 있을 때만</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><code class="code-inline">remark</code></td> | ||
| + | <td>번역문 / 원문</td> | ||
| + | <td>비고</td> | ||
| + | <td><span class="badge badge-danger">필수</span> 2월말에 결과보고서로 제출</td> | ||
| + | </tr> | ||
| + | </tbody> | ||
| + | </table> | ||
| + | </div> | ||
| + | </section> | ||
| − | + | <!-- 실전 예시 --> | |
| + | <section id="examples"> | ||
| + | <h2>📖 실전 예시로 배우기</h2> | ||
| − | = | + | <div class="example"> |
| + | <h3>사례 1: 일반 텍스트 처리하기</h3> | ||
| + | |||
| + | <h4>PDF 원문 (5페이지)</h4> | ||
| + | <div class="code-block"> | ||
| + | 해운대의 유래 | ||
| − | + | 사람은 땅의 정기를 받아 태어나고, 땅은 사람으로 인하여 이름을 얻게 된다. | |
| + | 한반도 동남쪽 끝 바닷가의 한 모퉁이에 있는 해운대는 천년 전 신라의 학사 | ||
| + | 최치원이 머물며 자취를 남긴 곳이다. | ||
| + | </div> | ||
| − | = | + | <h4>스프레드시트 입력 결과</h4> |
| + | <div class="table-wrapper"> | ||
| + | <table> | ||
| + | <thead> | ||
| + | <tr> | ||
| + | <th>id</th> | ||
| + | <th>book_title</th> | ||
| + | <th>chapter</th> | ||
| + | <th>page</th> | ||
| + | <th>person_id</th> | ||
| + | <th>name_ko</th> | ||
| + | <th>topic</th> | ||
| + | <th>text_type</th> | ||
| + | </tr> | ||
| + | </thead> | ||
| + | <tbody> | ||
| + | <tr> | ||
| + | <td>txt_10001</td> | ||
| + | <td>부산을_빛낸_인물</td> | ||
| + | <td>001</td> | ||
| + | <td>005</td> | ||
| + | <td>per_10001</td> | ||
| + | <td>최치원</td> | ||
| + | <td>해운대의_유래</td> | ||
| + | <td>normal</td> | ||
| + | </tr> | ||
| + | </tbody> | ||
| + | </table> | ||
| + | </div> | ||
| − | + | <div class="tip-box"> | |
| + | <strong>💡 체크포인트</strong> | ||
| + | <ul> | ||
| + | <li>✅ <strong>id는 연속된 번호</strong>: txt_10001, txt_10002, txt_10003...</li> | ||
| + | <li>✅ <strong>person_id는 새 인물 등장시에만 변경</strong></li> | ||
| + | <li>✅ <strong>한 문단 = 한 행</strong>: 문단 단위로 나누어 입력</li> | ||
| + | <li>✅ <strong>text_type은 'normal'</strong>: 일반 서술 텍스트</li> | ||
| + | </ul> | ||
| + | </div> | ||
| + | </div> | ||
| − | + | <div class="example"> | |
| + | <h3>사례 2: 인용문(citation) 처리하기</h3> | ||
| + | |||
| + | <h4>PDF 원문 (6페이지)</h4> | ||
| + | <div class="code-block"> | ||
| + | 제 나이 열 두살 때 집을 떠나 서쪽으로 갔습니다. 배를 탈 적에 돌아가신 | ||
| + | 아버지께서 타이르시기를, '십 년 안에 진사(進士)에 급제하지 못하면 내 아들이라 | ||
| + | 하지 말라. 나도 아들을 두었다 아니하리라. 가라! 부지런히 하여 네 힘을 | ||
| + | 게을리 말라'고 하셨습니다. | ||
| + | </div> | ||
| − | + | <h4>스프레드시트 입력 결과</h4> | |
| + | <div class="table-wrapper"> | ||
| + | <table> | ||
| + | <thead> | ||
| + | <tr> | ||
| + | <th>id</th> | ||
| + | <th>text_original</th> | ||
| + | <th>text_type</th> | ||
| + | <th>relation_note</th> | ||
| + | </tr> | ||
| + | </thead> | ||
| + | <tbody> | ||
| + | <tr> | ||
| + | <td>txt_10006</td> | ||
| + | <td>최치원은 857년(헌안왕 원년)에 신라의 서울 경주에서 태어났다</td> | ||
| + | <td>normal</td> | ||
| + | <td></td> | ||
| + | </tr> | ||
| + | <tr style="background-color: #fff8e6;"> | ||
| + | <td>txt_10007</td> | ||
| + | <td>제 나이 열 두살 때 집을 떠나 서쪽으로 갔습니다.(도서 원본에서는 볼드체로 표시) </td> | ||
| + | <td><strong>citation</strong></td> | ||
| + | <td>txt_10006</td> | ||
| + | </tr> | ||
| + | </tbody> | ||
| + | </table> | ||
| + | </div> | ||
| − | < | + | <div class="tip-box"> |
| − | < | + | <strong>💡 체크포인트</strong> |
| − | < | + | <ul> |
| + | <li>✅ <strong>text_type을 'citation'으로</strong>: 직접 인용문임을 표시</li> | ||
| + | <li>✅ <strong>relation_note 활용</strong>: 앞 문장(txt_10006)과 연결됨을 표시</li> | ||
| + | <li>✅ <strong>따옴표 포함</strong>: 원문의 인용 부호 그대로 유지</li> | ||
| + | </ul> | ||
| + | </div> | ||
| + | </div> | ||
| − | + | <div class="example"> | |
| + | <h3>사례 3: 시(poem) 처리하기 - 가장 까다로운 부분!</h3> | ||
| + | |||
| + | <h4>PDF 원문 (11페이지) - 정서의 시</h4> | ||
| + | <div class="code-block"> | ||
| + | 狂奔疊石吼重巒 | ||
| + | 人語難分咫尺間 | ||
| + | 常恐是非聲到耳 | ||
| + | 故敎流水盡籠山 | ||
| − | + | (번역) | |
| + | 미친 물 바위 치며 겹겹 산을 뒤흔드니 | ||
| + | 지척 사이에도 사람 소리 모르겠네. | ||
| + | </div> | ||
| − | + | <h4>스프레드시트 입력 결과 - 원문과 번역문을 <strong>분리</strong>!</h4> | |
| + | <div class="table-wrapper"> | ||
| + | <table> | ||
| + | <thead> | ||
| + | <tr> | ||
| + | <th>id</th> | ||
| + | <th>person_id</th> | ||
| + | <th>name_ko</th> | ||
| + | <th>text_original</th> | ||
| + | <th>text_type</th> | ||
| + | <th>relation_note</th> | ||
| + | <th>remark</th> | ||
| + | </tr> | ||
| + | </thead> | ||
| + | <tbody> | ||
| + | <tr style="background-color: #fff5f5;"> | ||
| + | <td>txt_10013</td> | ||
| + | <td>per_101_002</td> | ||
| + | <td>정서</td> | ||
| + | <td>狂奔疊石吼重巒 / 人語難分咫尺間 / 常恐是非聲到耳 / 故敎流水盡籠山</td> | ||
| + | <td><strong>poem</strong></td> | ||
| + | <td>txt_10014</td> | ||
| + | <td>원문</td> | ||
| + | </tr> | ||
| + | <tr style="background-color: #f0f9f4;"> | ||
| + | <td>txt_10014</td> | ||
| + | <td>per_101_002</td> | ||
| + | <td>정서</td> | ||
| + | <td>미친 물 바위 치며 겹겹 산을 뒤흔드니 / 지척 사이에도 사람 소리 모르겠네. / 세상의 시비 소리 들릴까 두려워서 / 짐짓 흐르는 물로 산을 온통 가두었네.</td> | ||
| + | <td><strong>poem</strong></td> | ||
| + | <td>txt_10013</td> | ||
| + | <td>번역문</td> | ||
| + | </tr> | ||
| + | </tbody> | ||
| + | </table> | ||
| + | </div> | ||
| − | + | <div class="tip-box"> | |
| + | <strong>💡 체크포인트</strong> | ||
| + | <ul> | ||
| + | <li>✅ <strong>한문 원문과 번역문 = 2개 행</strong>: 별도로 입력!</li> | ||
| + | <li>✅ <strong>연(구절) 구분은 슬래시(/)</strong>: 狂奔疊石吼重巒 / 人語難分咫尺間</li> | ||
| + | <li>✅ <strong>relation_note로 연결</strong>: 원문과 번역이 서로를 가리킴</li> | ||
| + | <li>✅ <strong>remark에 명시</strong>: '원문' 또는 '번역문'</li> | ||
| + | </ul> | ||
| + | </div> | ||
| + | </div> | ||
| − | + | <div class="example"> | |
| + | <h3>사례 4: 가사(歌辭) 처리하기</h3> | ||
| + | |||
| + | <h4>PDF 원문 (19페이지) - <삼진작 三眞勺></h4> | ||
| + | <div class="code-block"> | ||
| + | 내 님믈 그리와 우니다니 | ||
| + | 山졉동새 난 이슷요이다 | ||
| + | 아니시며 거츠르신 아으 | ||
| + | 잔월효성(殘月曉星)이 아시리이다 | ||
| − | + | (번역) | |
| + | 내 임을 그리워하여 울고 있더니 | ||
| + | 두견새와 나와는 비슷합니다 그려 | ||
| + | </div> | ||
| − | = | + | <div class="tip-box"> |
| + | <strong>💡 체크포인트</strong> | ||
| + | <ul> | ||
| + | <li>✅ <strong>고어도 poem으로 처리</strong>: 가사는 시(poem)로 분류</li> | ||
| + | <li>✅ <strong>remark에 작품명</strong>: 가사 제목 명시</li> | ||
| + | <li>✅ <strong>특수문자 처리</strong>: 깨진 부분은 원문 그대로 표시</li> | ||
| + | </ul> | ||
| + | </div> | ||
| + | </div> | ||
| + | </section> | ||
| − | + | <!-- ID 규칙 --> | |
| + | <section id="id-rules"> | ||
| + | <h2>🔢 ID 부여 규칙 마스터하기</h2> | ||
| − | + | <h3>1. 텍스트 ID (id) 규칙</h3> | |
| − | + | ||
| − | + | <div class="code-block"> | |
| − | + | txt_10001, txt_10002, txt_10003... | |
| − | + | </div> | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | <div class="info-box"> | |
| + | <strong>규칙</strong> | ||
| + | <ul> | ||
| + | <li><strong>형식:</strong> <code class="code-inline">txt_</code> + 5자리 숫자</li> | ||
| + | <li><strong>시작:</strong> 10001부터 시작</li> | ||
| + | <li><strong>연속성:</strong> 중간에 번호를 건너뛰지 않음</li> | ||
| + | <li><strong>고유성:</strong> 전체 데이터베이스에서 중복되면 안 됨!</li> | ||
| + | </ul> | ||
| + | </div> | ||
| − | |||
| − | + | <h3>2. 인물 ID (person_id) 규칙</h3> | |
| − | + | ||
| − | + | <div class="code-block"> | |
| − | + | per_10001, per_10002, per_20001... | |
| + | </div> | ||
| − | + | <div class="info-box"> | |
| + | <strong>규칙</strong> | ||
| + | <ul> | ||
| + | <li><strong>형식:</strong> <code class="code-inline">per_</code> + 5자리 숫자</li> | ||
| + | <li><strong>책번호:</strong> | ||
| + | <ul> | ||
| + | <li>10001 = 『부산을 빛낸 인물』 권1</li> | ||
| + | <li>20001 = 『부산을 빛낸 인물』 권2</li> | ||
| + | <li>40001 = 『부산의 자연마을』 권1</li> | ||
| + | </ul> | ||
| + | </li> | ||
| + | <li><strong>인물번호:</strong> 첫자리수는 권마다 달라지며 등장 순서대로 부여</li> | ||
| + | </ul> | ||
| + | </div> | ||
| − | + | <h4>실전 예시</h4> | |
| − | + | <div class="table-wrapper"> | |
| − | + | <table> | |
| − | + | <thead> | |
| − | + | <tr> | |
| − | + | <th>상황</th> | |
| + | <th>person_id</th> | ||
| + | <th>설명</th> | ||
| + | </tr> | ||
| + | </thead> | ||
| + | <tbody> | ||
| + | <tr> | ||
| + | <td>최치원이 5페이지에서 처음 등장</td> | ||
| + | <td><code class="code-inline">per_10001</code></td> | ||
| + | <td>첫 번째 인물</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td>정서가 11페이지에서 처음 등장</td> | ||
| + | <td><code class="code-inline">per_10002</code></td> | ||
| + | <td>두 번째 인물</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td>최치원이 다시 15페이지에 등장</td> | ||
| + | <td><code class="code-inline">per_10001</code></td> | ||
| + | <td>동일 ID 재사용!</td> | ||
| + | </tr> | ||
| + | </tbody> | ||
| + | </table> | ||
| + | </div> | ||
| − | + | <div class="tip-box"> | |
| + | <strong>💡 팁</strong> | ||
| + | <ul> | ||
| + | <li><strong>인물 등장 순서대로 번호 부여</strong>: 페이지 순서가 아니라 등장 순서</li> | ||
| + | <li><strong>같은 인물은 같은 ID</strong>: 다른 책에 등장해도 같은 인물이라면 ID는 하나</li> | ||
| + | <li><strong>엑셀 필터 활용</strong>: 이미 부여된 인물 ID 확인하기</li> | ||
| + | </ul> | ||
| + | </div> | ||
| + | </section> | ||
| − | |||
| − | + | <!-- 작업 스프레드시트 --> | |
| + | <section id="spreadsheet"> | ||
| + | <h2>💻 공동작업용 스프레드시트</h2> | ||
| − | + | <p>아래는 우리 팀이 실제로 작업하는 구글 시트입니다. 실시간으로 데이터를 확인하고 입력할 수 있어요.</p> | |
| − | + | <div class="spreadsheet-container"> | |
| − | + | <div class="spreadsheet-header"> | |
| − | + | <span>📊 PNU_DHC 플랫폼 데이터 작업 시트</span> | |
| − | + | <a href="https://docs.google.com/spreadsheets/d/1beVxX1Q-xRAyHOxjk-u3YLYszGZjftkONu_EtR0n9yM/edit?gid=0#gid=0" | |
| + | target="_blank" | ||
| + | class="spreadsheet-link"> | ||
| + | 새 탭에서 열기 → | ||
| + | </a> | ||
| + | </div> | ||
| + | <iframe class="spreadsheet-embed" | ||
| + | src="https://docs.google.com/spreadsheets/d/1beVxX1Q-xRAyHOxjk-u3YLYszGZjftkONu_EtR0n9yM/edit?gid=0&single=true&widget=true&headers=false&rm=minimal"> | ||
| + | </iframe> | ||
| + | </div> | ||
| − | = | + | <div class="info-box"> |
| + | <strong>💡 스프레드시트 사용 팁</strong> | ||
| + | <ul> | ||
| + | <li>위 임베드 창에서 바로 데이터를 확인할 수 있어요</li> | ||
| + | <li>실제 입력은 "새 탭에서 열기" 버튼을 클릭해서 진행하세요</li> | ||
| + | <li>여러 사람이 동시에 작업할 수 있어요 (실시간 공동 편집)</li> | ||
| + | <li>변경 이력은 자동으로 저장됩니다</li> | ||
| + | </ul> | ||
| + | </div> | ||
| − | + | <h3>✅ 최종 체크리스트</h3> | |
| + | |||
| + | <p>작업 완료 전에 꼭 확인하세요!</p> | ||
| − | + | <div class="checklist"> | |
| + | <ul> | ||
| + | <li>id가 연속되어 있나요? (txt_10001 → txt_10002 → txt_10003)</li> | ||
| + | <li>person_id가 올바르게 부여되었나요?</li> | ||
| + | <li>같은 인물이 여러 곳에 나오면 같은 person_id를 사용했나요?</li> | ||
| + | <li>text_type이 정확한가요? (normal/citation)</li> | ||
| + | <li>시의 원문과 번역문을 분리했나요?</li> | ||
| + | <li>relation_note로 관련 텍스트를 연결했나요?</li> | ||
| + | </ul> | ||
| + | </div> | ||
| + | </section> | ||
| − | |||
| − | |||
| − | + | <!-- XML 태깅 가이드 --> | |
| + | <section id="xml-tagging"> | ||
| + | <h2>🏷️ XML 태깅: 데이터에 의미 부여하기</h2> | ||
| + | <p>CSV로 정리한 텍스트에 <strong>의미론적 태그(Semantic Tags)</strong>를 붙여서 컴퓨터가 "누가", "어디서", "언제" 같은 정보를 이해할 수 있게 만드는 작업입니다.</p> | ||
| − | + | <h3>🎯 왜 XML 태깅이 필요한가요?</h3> | |
| − | + | <div class="comparison"> | |
| + | <div class="comparison-item before"> | ||
| + | <strong>태깅 전 (일반 텍스트)</strong> | ||
| + | <p style="margin-top: 10px;">최치원은 857년에 경주에서 태어났다.</p> | ||
| + | <p style="margin-top: 10px; font-size: 0.9em; color: #666;">→ 컴퓨터는 그냥 글자로만 인식</p> | ||
| + | </div> | ||
| + | <div class="comparison-item after"> | ||
| + | <strong>태깅 후 (XML)</strong> | ||
| + | <p style="margin-top: 10px; font-family: monospace; font-size: 0.9em;"> | ||
| + | <persName>최치원</persName>은<br> | ||
| + | <date when="857">857년</date>에<br> | ||
| + | <placeName>경주</placeName>에서 태어났다. | ||
| + | </p> | ||
| + | <p style="margin-top: 10px; font-size: 0.9em; color: #666;">→ 인물, 시간, 장소를 구분해서 인식!</p> | ||
| + | </div> | ||
| + | </div> | ||
| − | + | <h3>📚 온톨로지 설계 참고: 광주인문도시 사례</h3> | |
| − | === | + | <div class="info-box"> |
| + | <p><strong>우리 프로젝트는 광주인문도시스토리플랫폼의 온톨로지 설계를 참고합니다:</strong></p> | ||
| + | <p>🔗 <a href="https://dh.aks.ac.kr/~gwangju/wiki/index.php/Ontology:EKC_%EA%B4%91%EC%A3%BC:Class" target="_blank"> | ||
| + | 광주 온톨로지 Class 설계 보기 | ||
| + | </a></p> | ||
| + | <p style="margin-top: 10px; font-size: 0.95em;">광주 사례에서는 Person, Place, Event, Organization, Artifact 등의 클래스를 정의했습니다. 우리는 이를 부산 지역 특성에 맞게 적용할 예정입니다.</p> | ||
| + | </div> | ||
| − | + | <h3>🎯 단계별 태깅 전략 (난이도별 접근)</h3> | |
| − | === | + | <div class="roadmap"> |
| + | <div class="roadmap-step" style="background-color: #e8f5e9;"> | ||
| + | <div class="roadmap-number" style="background-color: #4caf50;">1</div> | ||
| + | <div class="roadmap-content"> | ||
| + | <h3 style="margin-top: 0; color: #4caf50;">1차 작업 (필수) - 가장 명확한 요소</h3> | ||
| + | <p><span class="badge badge-success">현재 작업 단계</span></p> | ||
| + | <table style="margin-top: 10px; width: 100%;"> | ||
| + | <tr> | ||
| + | <td><strong>인명</strong></td> | ||
| + | <td><code class="code-inline">[P]최치원[/P]</code></td> | ||
| + | <td>사람 이름 (판단 쉬움)</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><strong>지명</strong></td> | ||
| + | <td><code class="code-inline">[L]영도구[/L]</code></td> | ||
| + | <td>장소, 지역명 (판단 쉬움)</td> | ||
| + | </tr> | ||
| + | </table> | ||
| + | <p style="margin-top: 10px;"><strong>💡 추천:</strong> 학부생 기초 작업은 <strong>인명과 지명만</strong> 집중하는 것을 권장합니다!</p> | ||
| + | <ul style="margin-top: 10px;"> | ||
| + | <li>✅ 판단이 가장 명확</li> | ||
| + | <li>✅ 작업 속도가 빠름</li> | ||
| + | <li>✅ 온톨로지 핵심인 "누가-어디서" 관계망 우선 구축</li> | ||
| + | </ul> | ||
| + | </div> | ||
| + | </div> | ||
| − | < | + | <div class="roadmap-step" style="background-color: #fff8e6;"> |
| + | <div class="roadmap-number" style="background-color: #ff9f43;">2</div> | ||
| + | <div class="roadmap-content"> | ||
| + | <h3 style="margin-top: 0; color: #ff9f43;">2차 작업 (선택) - 조금 더 복잡</h3> | ||
| + | <table style="margin-top: 10px; width: 100%;"> | ||
| + | <tr> | ||
| + | <td><strong>시간</strong></td> | ||
| + | <td><code class="code-inline">[D]1876년[/D]</code></td> | ||
| + | <td>날짜, 연도, 시대</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><strong>기관명</strong></td> | ||
| + | <td><code class="code-inline">[O]동래부[/O]</code></td> | ||
| + | <td>단체, 조직, 관청</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><strong>서명</strong></td> | ||
| + | <td><code class="code-inline">[T]동래부지[/T]</code></td> | ||
| + | <td>책, 문서, 작품명</td> | ||
| + | </tr> | ||
| + | </table> | ||
| + | <p style="margin-top: 10px;"><strong>진행 시기:</strong> 1차 작업 완료 후 또는 동시 진행 가능</p> | ||
| + | </div> | ||
| + | </div> | ||
| − | === | + | <div class="roadmap-step" style="background-color: #f3e5f5;"> |
| + | <div class="roadmap-number" style="background-color: #9c27b0;">3</div> | ||
| + | <div class="roadmap-content"> | ||
| + | <h3 style="margin-top: 0; color: #9c27b0;">3차 작업 (고급) - 전문가 검수 필요</h3> | ||
| + | <table style="margin-top: 10px; width: 100%;"> | ||
| + | <tr> | ||
| + | <td><strong>문화유산</strong></td> | ||
| + | <td><code class="code-inline">[H]동래읍성[/H]</code></td> | ||
| + | <td>유적, 문화재, 건축물</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><strong>사건명</strong></td> | ||
| + | <td><code class="code-inline">[E]임진왜란[/E]</code></td> | ||
| + | <td>역사적 사건, 행사</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><strong>작품명</strong></td> | ||
| + | <td><code class="code-inline">[W]해운대가[/W]</code></td> | ||
| + | <td>시, 그림, 예술작품</td> | ||
| + | </tr> | ||
| + | </table> | ||
| + | <p style="margin-top: 10px;"><strong>진행 시기:</strong> 데이터 분석 및 설계 단계에서</p> | ||
| + | <p style="font-size: 0.9em; color: #666;">※ 문화유산과 지명, 작품명과 서명의 구분이 애매할 수 있어 전문가 판단 필요</p> | ||
| + | </div> | ||
| + | </div> | ||
| + | </div> | ||
| − | + | ||
| − | + | <h3>🔍 1차 작업: 인명 + 지명 태깅 실전</h3> | |
| − | < | + | <div class="example"> |
| + | <h4>예시 1: 『부산을 빛낸 인물』</h4> | ||
| + | |||
| + | <strong>원문:</strong> | ||
| + | <div class="code-block"> | ||
| + | 최치원은 857년(헌안왕 원년)에 신라의 서울 경주에서 태어났다. | ||
| + | 868년(경문왕 8)에 12세의 나이로 당나라에 들어갔다. | ||
| + | </div> | ||
| − | + | <strong>1차 태깅 (인명 + 지명만):</strong> | |
| + | <div class="code-block"> | ||
| + | [P]최치원[/P]은 857년([P]헌안왕[/P] 원년)에 [L]신라[/L]의 서울 [L]경주[/L]에서 태어났다. | ||
| + | 868년([P]경문왕[/P] 8)에 12세의 나이로 [L]당나라[/L]에 들어갔다. | ||
| + | </div> | ||
| − | < | + | <div class="tip-box" style="margin-top: 15px;"> |
| + | <strong>💡 판단 기준</strong> | ||
| + | <ul> | ||
| + | <li><strong>인명:</strong> 사람 이름 (최치원, 헌안왕, 경문왕)</li> | ||
| + | <li><strong>지명:</strong> 장소/지역 (신라, 경주, 당나라)</li> | ||
| + | <li><strong>제외:</strong> 857년, 868년 같은 시간 표현 (2차 작업에서!)</li> | ||
| + | </ul> | ||
| + | </div> | ||
| + | </div> | ||
| − | = | + | <div class="example"> |
| + | <h4>예시 2: 『부산의 자연마을』</h4> | ||
| + | |||
| + | <strong>원문:</strong> | ||
| + | <div class="code-block"> | ||
| + | 영도구 동삼동은 조선시대에는 절영도의 일부였다. | ||
| + | 1876년 개항 이후 일본인들이 거주하기 시작했으며, | ||
| + | 1942년 부산부에 편입되었다. | ||
| + | </div> | ||
| − | < | + | <strong>1차 태깅 (인명 + 지명만):</strong> |
| + | <div class="code-block"> | ||
| + | [L]영도구[/L] [L]동삼동[/L]은 조선시대에는 [L]절영도[/L]의 일부였다. | ||
| + | 1876년 개항 이후 일본인들이 거주하기 시작했으며, | ||
| + | 1942년 [L]부산부[/L]에 편입되었다. | ||
| + | </div> | ||
| − | + | <div class="tip-box" style="margin-top: 15px;"> | |
| + | <strong>💡 판단 기준</strong> | ||
| + | <ul> | ||
| + | <li><strong>지명:</strong> 영도구, 동삼동, 절영도, 부산부 (모두 장소)</li> | ||
| + | <li><strong>인명:</strong> 없음</li> | ||
| + | <li><strong>제외:</strong> 조선시대, 1876년, 1942년 (2차 작업에서!)</li> | ||
| + | </ul> | ||
| + | </div> | ||
| + | </div> | ||
| − | |||
| − | |||
| − | </ | + | <h3>🔄 작업 도구별 역할 정리</h3> |
| − | = | + | <div class="table-wrapper"> |
| + | <table> | ||
| + | <thead> | ||
| + | <tr> | ||
| + | <th>단계</th> | ||
| + | <th>도구</th> | ||
| + | <th>작업 내용</th> | ||
| + | <th>담당</th> | ||
| + | </tr> | ||
| + | </thead> | ||
| + | <tbody> | ||
| + | <tr> | ||
| + | <td><strong>1단계 csv</strong></td> | ||
| + | <td>Excel / Google Sheets</td> | ||
| + | <td>CSV 데이터 입력 (text_original)</td> | ||
| + | <td>전체 팀원</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><strong>2단계 txt</strong></td> | ||
| + | <td>Notepad++ / VSCode</td> | ||
| + | <td>태깅 마커 표시 (text_tagged)</td> | ||
| + | <td>인문계 학생</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><strong>3단계 xml</strong></td> | ||
| + | <td>Python</td> | ||
| + | <td>마커 → XML 자동 변환</td> | ||
| + | <td>이공계 학생</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><strong>4단계 valid check</strong></td> | ||
| + | <td>XML Validation 도구</td> | ||
| + | <td>XML 파일 검수 및 수정</td> | ||
| + | <td>팀 총괄 + 전체</td> | ||
| + | </tr> | ||
| + | </tbody> | ||
| + | </table> | ||
| + | </div> | ||
| − | < | + | <div class="warning-box"> |
| + | <strong>⚠️ 태깅 시 주의사항</strong> | ||
| + | <ul> | ||
| + | <li><strong>일관성 유지:</strong> 같은 대상은 항상 같은 방식으로 태깅</li> | ||
| + | <li><strong>중첩 금지:</strong> [P][L]김해[/L][/P] (X) → 하나만 선택</li> | ||
| + | <li><strong>불확실하면 표시 안 함:</strong> 확실한 것만 태깅</li> | ||
| + | <li><strong>Excel에서 작업:</strong> 익숙한 도구로 빠르게 진행</li> | ||
| + | <li><strong>VSCode는 검수용:</strong> XML 변환 후 최종 확인에만 사용</li> | ||
| + | </ul> | ||
| + | </div> | ||
| − | < | + | <h3>📊 태깅 진도 체크리스트</h3> |
| − | < | + | <div class="checklist"> |
| + | <ul> | ||
| + | <li>인명과 지명의 차이를 구분할 수 있나요?</li> | ||
| + | <li>마커 표기법([P], [L])을 이해했나요?</li> | ||
| + | <li>Excel에 text_tagged 열을 추가했나요?</li> | ||
| + | <li>샘플 10개 문단을 태깅해보았나요?</li> | ||
| + | <li>팀원들과 태깅 기준을 통일했나요?</li> | ||
| + | <li>VSCode를 설치하고 XML Tools 확장을 설치했나요?</li> | ||
| + | </ul> | ||
| + | </div> | ||
| + | </section> | ||
| − | |||
| − | </ | + | <!-- 마무리 --> |
| + | <!-- Q&A --> | ||
| + | <section id="qa"> | ||
| + | <h2>💬 자주 묻는 질문 (Q&A)</h2> | ||
| − | = | + | <div class="info-box"> |
| + | <h4>Q1. 인물이 명확하지 않은 경우는?</h4> | ||
| + | <p><strong>A.</strong> person_id를 비워두고, remark에 "인물 미상" 표시</p> | ||
| + | </div> | ||
| − | < | + | <div class="info-box"> |
| + | <h4>Q2. 여러 인물이 한 문단에 나오면?</h4> | ||
| + | <p><strong>A.</strong> 주요 인물의 person_id를 사용하고, remark에 "김철수, 이영희 등장" 메모</p> | ||
| + | </div> | ||
| − | < | + | <div class="info-box"> |
| + | <h4>Q3. 페이지 번호가 불분명하면?</h4> | ||
| + | <p><strong>A.</strong> 앞뒤 맥락으로 유추하고, remark에 "페이지 추정" 표시</p> | ||
| + | </div> | ||
| − | < | + | <div class="info-box"> |
| + | <h4>Q4. 작업 중 막힐 때는?</h4> | ||
| + | <p><strong>A.</strong></p> | ||
| + | <ol> | ||
| + | <li>팀 단톡방에 질문</li> | ||
| + | <li>매주 팀별로 정기 모임(zoom)</li> | ||
| + | <li>작업 메뉴얼 재확인</li> | ||
| + | </ol> | ||
| + | </div> | ||
| + | </section> | ||
| − | < | + | <section id="conclusion"> |
| + | <h2>🎯 마무리</h2> | ||
| − | = | + | <div class="success-box"> |
| + | <h3>기억해야 할 핵심 3가지</h3> | ||
| + | <ol> | ||
| + | <li><strong>일관성이 생명:</strong> 같은 항목은 항상 같은 방식으로</li> | ||
| + | <li><strong>ID는 신중하게:</strong> 한번 부여한 ID는 앞으로도 계속 사용될 예정</li> | ||
| + | <li><strong>협업이 중요:</strong> 막힐 때는 팀원들과 의논하기(논의가 필요하다 생각한 부분을 결과보고서에 기입!!)</li> | ||
| + | </ol> | ||
| + | </div> | ||
| − | + | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | == | + | <div class="info-box"> |
| + | <h3>📎 참고 자료</h3> | ||
| + | <ul> | ||
| + | <li><strong>작업 스프레드시트:</strong> <a href="https://docs.google.com/spreadsheets/d/1beVxX1Q-xRAyHOxjk-u3YLYszGZjftkONu_EtR0n9yM/edit?gid=0#gid=0" target="_blank">구글 시트 바로가기</a></li> | ||
| + | <li><strong>XML 가이드:</strong> <a href="http://wikidocs.net/234314">XML 설계 입문</a></li> | ||
| + | <li><strong>광주인문도시스토리플랫폼:</strong> <a href="https://dh.aks.ac.kr/~gwangju/wiki/index.php/Ontology:EKC_광주:Class" target="_blank">사례 참고</a></li> | ||
| + | </ul> | ||
| + | </div> | ||
| + | </section> | ||
| + | </main> | ||
| − | + | <footer> | |
| − | + | <p>© 2025 부산대학교 디지털인문학센터 (Digital Humanities Center of Pusan National University)</p> | |
| − | + | <p>PNU 로컬 인문학 데이터 프로젝트</p> | |
| − | + | <p style="margin-top: 10px; font-size: 0.9em;"> | |
| − | + | 문의 및 결과물 제출: 김서윤 sy527991@pusan.ac.kr | 051-510-1594 | 최종 업데이트: 2025년 12월 | |
| − | + | </p> | |
| − | + | </footer> | |
| − | + | </div> | |
| − | + | </body> | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | < | ||
| − | < | ||
| − | |||
| − | </div> | ||
</html> | </html> | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
2025년 12월 24일 (수) 15:11 판
📚 부산 지역 인문학 자료 데이터화 입문 가이드
『부산을 빛낸 인물』과 『부산의 자연마을』의 디지털 데이터 변환
📖 들어가며: 부산 인문 자료의 디지털화
본 프로젝트는 부산광역시 문화유산과 시사편찬실에서 발간한 『부산을 빛낸 인물』과 『부산의 자연마을』이라는 부산의 인문 자료를 디지털 데이터로 변환하는 기초 작업입니다.
📚 프로젝트 규모 및 팀 구성
작업 대상 자료: 부산광역시사편찬위원회 자료실 및 부산 지역사 도서관에서 PDF 확인 가능
- 『부산의 자연마을』전 6권 : 약 2,400페이지
- 『부산을 빛낸 인물』전 3권 : 약 800페이지
👥 팀 구성 (총 24명: 인문계 18명 + 이공계 6명)
역할: 인문계-데이터 편찬 및 태깅 / 이공계-기술 지원 및 자동화
부산을 빛낸 인물 전 3권(총 800페이지)
- 인원: 6명 (인문계 4명 + 이공계 2명)
- 담당: 『부산을 빛낸 인물』 800페이지
- 총괄: 디지털인문학센터 연구전략부장
부산의 자연마을 제1, 2, 6권(총 1,200페이지)
- 인원: 9명 (인문계 7명 + 이공계 2명)
- 담당: 『부산의 자연마을』 1,200페이지
- 총괄: 디지털인문학센터 겸직교수
부산의 자연마을 제3, 4, 5권(총 1,200페이지)
- 인원: 9명 (인문계 7명 + 이공계 2명)
- 담당: 『부산의 자연마을』 1,200페이지
- 총괄: 디지털인문학센터 계약교수
- PDF에서 추출한 텍스트를 Excel/구글 시트에 입력
- 텍스트 유형 판단 (분류 작업)
- 의미 요소 식별 (XML 태깅을 위한 준비 작업)
- 대학원생: 메타데이터(페이지, 장 번호 등 서지 정보 기록) 관리 및 검수
- 파이썬 스크립트 개발 (태깅 마커 [P][/P] → XML 자동 변환)
- 데이터 검증 및 오류 체크 자동화
- 팀 내 기술적 문제 실시간 지원
- VScode, Git 등 도구 활용 교육
이제 책 속의 자료를 시맨틱 데이터로 변환하는 기초 작업을 진행할 예정입니다. 왜 이 작업이 필요할까요?
부산광역시사편찬위원회 자료실에 PDF로 제공되는 도서는 한 번에 한 사람만 읽을 수 있지만, 디지털 데이터로 변환된 지식은:
- 💡 검색 가능: "1950년대 부산 영도구"라고 검색하면 관련된 모든 내용이 한눈에 보이게 만들 수 있습니다!
- 🔗 연결 가능: 인물과 장소, 사건이 서로 연결되어 새로운 통찰을 발견할 수 있습니다!
- 📊 분석 가능: 빈도, 패턴, 관계를 통해 보이지 않던 역사적 의미를 발견할 수 있습니다!
- 🌐 공유 가능: 전 세계 연구자들과 부산의 이야기를 나눌 수 있어요
🔥 전체 로드맵: 3단계 여정
기초 데이터 작업
현재 단계
- PDF → 텍스트 추출
- 구조화 → CSV 정리
- 태깅 → XML 변환
목표: 원천 자료를 DB에 업로드 가능한 형태로 구조화
데이터 분석(Data Analysis)
- 빈도 분석 & 키워드 추출
- 관계 파악
- 의미 해석
목표: 구축된 데이터에서 학문적 의미와 패턴 도출
데이터 설계(Data Modeling)
- 온톨로지 설계
- 지식 그래프 구상
- 활용 방안 기획
목표: 플랫폼 구축을 위한 데이터 모델링
📊 작업 일정 계획 (2026년 1월~2월)
- 『부산을 빛낸 인물』: 총 800여 페이지 → 1개 팀 (6명) 담당
- 『부산의 자연마을』: 총 2,400여 페이지 → 2개 팀 (각 9명) 분담
- 1팀: 1,200페이지
- 2팀: 1,200페이지
※ 각 팀원은 담당 권/장을 선정하여 2개월간 데이터 편찬 작업을 진행합니다.
| 기간 | 목표 | 세부 과제 |
|---|---|---|
| 1월 16일 | csv 작업 파일 및 txt 원본 제출 |
|
| 1월 23일 | txt 전처리 파일 및 기본 구조화 작업 파일 제출 |
|
| 1월 30일 | XML 마커 연습 파일 제출 |
|
| 2월 27일 | 완료 및 품질 검수 + XML 변환 |
|
📊 우리 팀 데이터 구조 이해하기
우리가 사용하는 구글 시트는 18개의 필드(열)로 구성되어 있어요. 각 필드가 왜 필요한지 함께 살펴볼까요?
🔑 핵심 필드 설명
| 필드명 | 예시 | 설명 | 작업자가 할 일 |
|---|---|---|---|
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_+ 5자리 숫자 - 시작: 10001부터 시작
- 연속성: 중간에 번호를 건너뛰지 않음
- 고유성: 전체 데이터베이스에서 중복되면 안 됨!
2. 인물 ID (person_id) 규칙
- 형식:
per_+ 5자리 숫자 - 책번호:
- 10001 = 『부산을 빛낸 인물』 권1
- 20001 = 『부산을 빛낸 인물』 권2
- 40001 = 『부산의 자연마을』 권1
- 인물번호: 첫자리수는 권마다 달라지며 등장 순서대로 부여
실전 예시
| 상황 | person_id | 설명 |
|---|---|---|
| 최치원이 5페이지에서 처음 등장 | per_10001 |
첫 번째 인물 |
| 정서가 11페이지에서 처음 등장 | per_10002 |
두 번째 인물 |
| 최치원이 다시 15페이지에 등장 | per_10001 |
동일 ID 재사용! |
- 인물 등장 순서대로 번호 부여: 페이지 순서가 아니라 등장 순서
- 같은 인물은 같은 ID: 다른 책에 등장해도 같은 인물이라면 ID는 하나
- 엑셀 필터 활용: 이미 부여된 인물 ID 확인하기
💻 공동작업용 스프레드시트
아래는 우리 팀이 실제로 작업하는 구글 시트입니다. 실시간으로 데이터를 확인하고 입력할 수 있어요.
- 위 임베드 창에서 바로 데이터를 확인할 수 있어요
- 실제 입력은 "새 탭에서 열기" 버튼을 클릭해서 진행하세요
- 여러 사람이 동시에 작업할 수 있어요 (실시간 공동 편집)
- 변경 이력은 자동으로 저장됩니다
✅ 최종 체크리스트
작업 완료 전에 꼭 확인하세요!
- id가 연속되어 있나요? (txt_10001 → txt_10002 → txt_10003)
- person_id가 올바르게 부여되었나요?
- 같은 인물이 여러 곳에 나오면 같은 person_id를 사용했나요?
- text_type이 정확한가요? (normal/citation)
- 시의 원문과 번역문을 분리했나요?
- relation_note로 관련 텍스트를 연결했나요?
🏷️ XML 태깅: 데이터에 의미 부여하기
CSV로 정리한 텍스트에 의미론적 태그(Semantic Tags)를 붙여서 컴퓨터가 "누가", "어디서", "언제" 같은 정보를 이해할 수 있게 만드는 작업입니다.
🎯 왜 XML 태깅이 필요한가요?
최치원은 857년에 경주에서 태어났다.
→ 컴퓨터는 그냥 글자로만 인식
<persName>최치원</persName>은
<date when="857">857년</date>에
<placeName>경주</placeName>에서 태어났다.
→ 인물, 시간, 장소를 구분해서 인식!
📚 온톨로지 설계 참고: 광주인문도시 사례
우리 프로젝트는 광주인문도시스토리플랫폼의 온톨로지 설계를 참고합니다:
광주 사례에서는 Person, Place, Event, Organization, Artifact 등의 클래스를 정의했습니다. 우리는 이를 부산 지역 특성에 맞게 적용할 예정입니다.
🎯 단계별 태깅 전략 (난이도별 접근)
1차 작업 (필수) - 가장 명확한 요소
현재 작업 단계
| 인명 | [P]최치원[/P] |
사람 이름 (판단 쉬움) |
| 지명 | [L]영도구[/L] |
장소, 지역명 (판단 쉬움) |
💡 추천: 학부생 기초 작업은 인명과 지명만 집중하는 것을 권장합니다!
- ✅ 판단이 가장 명확
- ✅ 작업 속도가 빠름
- ✅ 온톨로지 핵심인 "누가-어디서" 관계망 우선 구축
2차 작업 (선택) - 조금 더 복잡
| 시간 | [D]1876년[/D] |
날짜, 연도, 시대 |
| 기관명 | [O]동래부[/O] |
단체, 조직, 관청 |
| 서명 | [T]동래부지[/T] |
책, 문서, 작품명 |
진행 시기: 1차 작업 완료 후 또는 동시 진행 가능
3차 작업 (고급) - 전문가 검수 필요
| 문화유산 | [H]동래읍성[/H] |
유적, 문화재, 건축물 |
| 사건명 | [E]임진왜란[/E] |
역사적 사건, 행사 |
| 작품명 | [W]해운대가[/W] |
시, 그림, 예술작품 |
진행 시기: 데이터 분석 및 설계 단계에서
※ 문화유산과 지명, 작품명과 서명의 구분이 애매할 수 있어 전문가 판단 필요
🔍 1차 작업: 인명 + 지명 태깅 실전
예시 1: 『부산을 빛낸 인물』
원문:- 인명: 사람 이름 (최치원, 헌안왕, 경문왕)
- 지명: 장소/지역 (신라, 경주, 당나라)
- 제외: 857년, 868년 같은 시간 표현 (2차 작업에서!)
예시 2: 『부산의 자연마을』
원문:- 지명: 영도구, 동삼동, 절영도, 부산부 (모두 장소)
- 인명: 없음
- 제외: 조선시대, 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.
- 팀 단톡방에 질문
- 매주 팀별로 정기 모임(zoom)
- 작업 메뉴얼 재확인
🎯 마무리
기억해야 할 핵심 3가지
- 일관성이 생명: 같은 항목은 항상 같은 방식으로
- ID는 신중하게: 한번 부여한 ID는 앞으로도 계속 사용될 예정
- 협업이 중요: 막힐 때는 팀원들과 의논하기(논의가 필요하다 생각한 부분을 결과보고서에 기입!!)
📎 참고 자료
- 작업 스프레드시트: 구글 시트 바로가기
- XML 가이드: XML 설계 입문
- 광주인문도시스토리플랫폼: 사례 참고