"Busan Data Guide"의 두 판 사이의 차이
| 1번째 줄: | 1번째 줄: | ||
| − | + | <!DOCTYPE html> | |
<html lang="ko"> | <html lang="ko"> | ||
<head> | <head> | ||
| 463번째 줄: | 463번째 줄: | ||
<li><a href="#intro">들어가며</a></li> | <li><a href="#intro">들어가며</a></li> | ||
<li><a href="#roadmap">전체 로드맵</a></li> | <li><a href="#roadmap">전체 로드맵</a></li> | ||
| + | <li><a href="#structure">데이터 구조(Excel)</a></li> | ||
<li><a href="#xml-tagging">XML 태깅</a></li> | <li><a href="#xml-tagging">XML 태깅</a></li> | ||
| − | |||
<li><a href="#examples">실전 예시</a></li> | <li><a href="#examples">실전 예시</a></li> | ||
<li><a href="#id-rules">ID 규칙</a></li> | <li><a href="#id-rules">ID 규칙</a></li> | ||
| 491번째 줄: | 491번째 줄: | ||
<div class="roadmap" style="margin-top: 20px;"> | <div class="roadmap" style="margin-top: 20px;"> | ||
| − | <h4 style="color: #2b5a7a; margin-bottom: 15px;">👥 팀 구성 (총 24명)</h4> | + | <h4 style="color: #2b5a7a; margin-bottom: 15px;">👥 팀 구성 (총 24명: 인문계 18명 + 이공계 6명)</h4> |
<div class="roadmap-step"> | <div class="roadmap-step"> | ||
| 498번째 줄: | 498번째 줄: | ||
<h3 style="margin-top: 0;">자연마을 1팀</h3> | <h3 style="margin-top: 0;">자연마을 1팀</h3> | ||
<ul> | <ul> | ||
| − | <li><strong>인원:</strong> 9명 (인문계 | + | <li><strong>인원:</strong> 9명 (인문계 7명 + 이공계 2명)</li> |
<li><strong>담당:</strong> 『부산의 자연마을』 1,200페이지</li> | <li><strong>담당:</strong> 『부산의 자연마을』 1,200페이지</li> | ||
<li><strong>총괄:</strong> 디지털인문학센터 운영위원</li> | <li><strong>총괄:</strong> 디지털인문학센터 운영위원</li> | ||
| + | <li><strong>역할:</strong> 인문계-데이터 편찬 및 태깅 / 이공계-기술 지원 및 자동화</li> | ||
</ul> | </ul> | ||
</div> | </div> | ||
| 510번째 줄: | 511번째 줄: | ||
<h3 style="margin-top: 0;">자연마을 2팀</h3> | <h3 style="margin-top: 0;">자연마을 2팀</h3> | ||
<ul> | <ul> | ||
| − | <li><strong>인원:</strong> 9명 (인문계 | + | <li><strong>인원:</strong> 9명 (인문계 7명 + 이공계 2명)</li> |
<li><strong>담당:</strong> 『부산의 자연마을』 1,200페이지</li> | <li><strong>담당:</strong> 『부산의 자연마을』 1,200페이지</li> | ||
<li><strong>총괄:</strong> 디지털인문학센터 계약교수</li> | <li><strong>총괄:</strong> 디지털인문학센터 계약교수</li> | ||
| + | <li><strong>역할:</strong> 인문계-데이터 편찬 및 태깅 / 이공계-기술 지원 및 자동화</li> | ||
</ul> | </ul> | ||
</div> | </div> | ||
| 522번째 줄: | 524번째 줄: | ||
<h3 style="margin-top: 0;">부산을 빛낸 인물 팀</h3> | <h3 style="margin-top: 0;">부산을 빛낸 인물 팀</h3> | ||
<ul> | <ul> | ||
| − | <li><strong>인원:</strong> 6명 (인문계 | + | <li><strong>인원:</strong> 6명 (인문계 4명 + 이공계 2명)</li> |
<li><strong>담당:</strong> 『부산을 빛낸 인물』 800페이지</li> | <li><strong>담당:</strong> 『부산을 빛낸 인물』 800페이지</li> | ||
<li><strong>총괄:</strong> 디지털인문학센터 운영위원</li> | <li><strong>총괄:</strong> 디지털인문학센터 운영위원</li> | ||
| + | <li><strong>역할:</strong> 인문계-데이터 편찬 및 태깅 / 이공계-기술 지원 및 자동화</li> | ||
</ul> | </ul> | ||
</div> | </div> | ||
</div> | </div> | ||
| − | <div class=" | + | <div class="tip-box" style="margin-top: 20px;"> |
| − | <strong> | + | <strong>💻 이공계 학생 (각 팀 2명씩, 총 6명) 주요 역할</strong> |
| − | < | + | <ul> |
| + | <li>파이썬 스크립트 개발 (태깅 마커 → XML 자동 변환)</li> | ||
| + | <li>데이터 검증 및 오류 체크 자동화</li> | ||
| + | <li>팀 내 기술적 문제 실시간 지원</li> | ||
| + | <li>VSCode, Git 등 도구 활용 교육</li> | ||
| + | </ul> | ||
</div> | </div> | ||
</div> | </div> | ||
| 556번째 줄: | 564번째 줄: | ||
<div class="roadmap-number">1</div> | <div class="roadmap-number">1</div> | ||
<div class="roadmap-content"> | <div class="roadmap-content"> | ||
| − | <h3>데이터 편찬 | + | <h3>데이터 편찬</h3> |
<p><span class="badge badge-primary">현재 단계</span></p> | <p><span class="badge badge-primary">현재 단계</span></p> | ||
<ul> | <ul> | ||
| 570번째 줄: | 578번째 줄: | ||
<div class="roadmap-number">2</div> | <div class="roadmap-number">2</div> | ||
<div class="roadmap-content"> | <div class="roadmap-content"> | ||
| − | <h3>데이터 분석 | + | <h3>데이터 분석</h3> |
<ul> | <ul> | ||
<li>빈도 분석 & 키워드 추출</li> | <li>빈도 분석 & 키워드 추출</li> | ||
| 583번째 줄: | 591번째 줄: | ||
<div class="roadmap-number">3</div> | <div class="roadmap-number">3</div> | ||
<div class="roadmap-content"> | <div class="roadmap-content"> | ||
| − | <h3>데이터 설계 | + | <h3>데이터 설계</h3> |
<ul> | <ul> | ||
<li>온톨로지 설계</li> | <li>온톨로지 설계</li> | ||
| 602번째 줄: | 610번째 줄: | ||
<section id="xml-tagging"> | <section id="xml-tagging"> | ||
<h2>🏷️ XML 태깅: 데이터에 의미 부여하기</h2> | <h2>🏷️ XML 태깅: 데이터에 의미 부여하기</h2> | ||
| + | |||
| + | <div class="warning-box"> | ||
| + | <strong>⚠️ 작업 순서 확인!</strong> | ||
| + | <p>이 섹션은 <strong>"📊 우리 팀 데이터 구조 이해하기"</strong> 섹션을 먼저 완료한 후에 진행합니다.</p> | ||
| + | <p style="margin-top: 10px;"> | ||
| + | <strong>1단계:</strong> Excel에서 CSV 데이터 입력 완료 → | ||
| + | <strong>2단계:</strong> Excel에서 XML 태깅 마커 표시 → | ||
| + | <strong>3단계:</strong> VSCode에서 XML 검수 | ||
| + | </p> | ||
| + | </div> | ||
<p>CSV로 정리한 텍스트에 <strong>의미론적 태그(Semantic Tags)</strong>를 붙여서 컴퓨터가 "누가", "어디서", "언제" 같은 정보를 이해할 수 있게 만드는 작업입니다.</p> | <p>CSV로 정리한 텍스트에 <strong>의미론적 태그(Semantic Tags)</strong>를 붙여서 컴퓨터가 "누가", "어디서", "언제" 같은 정보를 이해할 수 있게 만드는 작업입니다.</p> | ||
| 624번째 줄: | 642번째 줄: | ||
</div> | </div> | ||
| − | <h3> | + | <h3>📚 온톨로지 설계 참고: 광주인문도시 사례</h3> |
<div class="info-box"> | <div class="info-box"> | ||
| − | <p> | + | <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> | </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> | |
| − | </div> | + | <tr> |
| − | + | <td><strong>기관명</strong></td> | |
| − | <h3>🔍 태깅 실전 | + | <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> | ||
| + | |||
| + | <div class="success-box"> | ||
| + | <strong>🎯 우리 팀 결정사항</strong> | ||
| + | <p><strong>1차 작업 범위:</strong> 인명(persName) + 지명(placeName) <strong>2가지만</strong> 태깅</p> | ||
| + | <p style="margin-top: 5px; font-size: 0.95em;">→ 빠르고 정확한 작업으로 핵심 온톨로지 구축 우선!</p> | ||
| + | </div> | ||
| + | |||
| + | <h3>🔍 1차 작업: 인명 + 지명 태깅 실전</h3> | ||
<div class="example"> | <div class="example"> | ||
| 698번째 줄: | 750번째 줄: | ||
</div> | </div> | ||
| − | <strong>태깅 | + | <strong>1차 태깅 (인명 + 지명만):</strong> |
<div class="code-block"> | <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> | </div> | ||
| 724번째 줄: | 776번째 줄: | ||
</div> | </div> | ||
| − | <strong>태깅 | + | <strong>1차 태깅 (인명 + 지명만):</strong> |
<div class="code-block"> | <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> | ||
</div> | </div> | ||
| − | <h3>👥 역할 분담: | + | <h3>👥 역할 분담: 3단계 워크플로우</h3> |
<div class="roadmap"> | <div class="roadmap"> | ||
<div class="roadmap-step"> | <div class="roadmap-step"> | ||
| − | <div class="roadmap-number"> | + | <div class="roadmap-number">1</div> |
<div class="roadmap-content"> | <div class="roadmap-content"> | ||
| − | <h3 style="margin-top: 0;">인문계 학생 | + | <h3 style="margin-top: 0;">인문계 학생 - Excel/구글 시트에서 태깅</h3> |
| − | <p><strong> | + | <p><strong>도구:</strong> Excel 또는 Google Sheets</p> |
<p><strong>방법:</strong></p> | <p><strong>방법:</strong></p> | ||
<ol> | <ol> | ||
| − | <li> | + | <li><code class="code-inline">text_original</code> 열의 텍스트 읽기</li> |
| − | <li> | + | <li>새 열 <code class="code-inline">text_tagged</code> 추가</li> |
| + | <li>인명과 지명에 마커 표시: | ||
<ul> | <ul> | ||
| − | <li> | + | <li>인명: [P]최치원[/P]</li> |
| − | <li> | + | <li>지명: [L]경주[/L]</li> |
| − | |||
| − | |||
| − | |||
</ul> | </ul> | ||
</li> | </li> | ||
| − | |||
</ol> | </ol> | ||
<p><strong>예시:</strong></p> | <p><strong>예시:</strong></p> | ||
<div class="code-block" style="font-size: 0.85em;"> | <div class="code-block" style="font-size: 0.85em;"> | ||
| − | [P]최치원[/P]은 | + | [P]최치원[/P]은 857년에 [L]경주[/L]에서 태어났다. |
</div> | </div> | ||
| + | <p style="margin-top: 10px;"><strong>⏱️ 예상 소요 시간:</strong> 문단당 2~3분</p> | ||
</div> | </div> | ||
</div> | </div> | ||
<div class="roadmap-step"> | <div class="roadmap-step"> | ||
| − | <div class="roadmap-number"> | + | <div class="roadmap-number">2</div> |
<div class="roadmap-content"> | <div class="roadmap-content"> | ||
| − | <h3 style="margin-top: 0;">이공계 학생 | + | <h3 style="margin-top: 0;">이공계 학생 - 파이썬으로 XML 자동 변환</h3> |
| − | <p><strong> | + | <p><strong>도구:</strong> Python + pandas + re (정규식)</p> |
<p><strong>방법:</strong></p> | <p><strong>방법:</strong></p> | ||
<ol> | <ol> | ||
| − | <li>CSV | + | <li>CSV 파일의 <code class="code-inline">text_tagged</code> 열 읽기</li> |
| − | <li> | + | <li>정규식으로 마커 → XML 태그 변환</li> |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
<li>XML 파일로 출력</li> | <li>XML 파일로 출력</li> | ||
</ol> | </ol> | ||
| 795번째 줄: | 841번째 줄: | ||
# [L]...[/L] → <placeName>...</placeName> | # [L]...[/L] → <placeName>...</placeName> | ||
text = re.sub(r'\[L\](.*?)\[/L\]', r'<placeName>\1</placeName>', text) | text = re.sub(r'\[L\](.*?)\[/L\]', r'<placeName>\1</placeName>', text) | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
return text | return text | ||
| − | + | ||
| − | # CSV 읽기 | + | # CSV 읽기 |
| − | df = pd.read_csv('busan_data.csv') | + | df = pd.read_csv('busan_data.csv') |
| − | + | df['text_xml'] = df['text_tagged'].apply(convert_to_xml) | |
| − | + | ||
| − | df['text_xml'] = df['text_tagged'].apply(convert_to_xml) | + | # XML 파일 저장 |
| − | + | with open('busan_output.xml', 'w', encoding='utf-8') as f: | |
| − | # XML 파일 저장 | + | f.write('<?xml version="1.0" encoding="UTF-8"?>\n<teiCorpus>\n') |
| − | with open(' | + | for _, row in df.iterrows(): |
| − | f.write('<?xml version="1.0" encoding="UTF-8"?>\n | + | f.write(f' <p id="{row["id"]}">{row["text_xml"]}</p>\n') |
| − | + | f.write('</teiCorpus>') | |
| − | for _, row in df.iterrows(): | + | </div> |
| − | f.write(f' <p id="{row["id"]}">{row["text_xml"]}</p>\n') | + | <p style="margin-top: 10px;"><strong>⏱️ 예상 소요 시간:</strong> 전체 데이터 1~2일</p> |
| − | f.write('</teiCorpus>') | + | </div> |
| − | </div> | + | </div> |
| − | </div> | + | |
| − | </div> | + | <div class="roadmap-step"> |
| − | + | <div class="roadmap-number">3</div> | |
| − | + | <div class="roadmap-content"> | |
| − | + | <h3 style="margin-top: 0;">전체 팀 - VSCode로 XML 검수 및 수정</h3> | |
| − | + | <p><strong>도구:</strong> Visual Studio Code (VSCode)</p> | |
| − | + | <p><strong>왜 VSCode인가?</strong></p> | |
| − | + | <ul> | |
| − | + | <li>✅ XML 구문 하이라이팅 (오류를 쉽게 발견)</li> | |
| − | + | <li>✅ 태그 자동 완성</li> | |
| − | + | <li>✅ 검색 & 일괄 치환 기능</li> | |
| − | + | <li>✅ 확장 프로그램으로 XML 검증 가능</li> | |
| − | + | </ul> | |
| − | + | <p><strong>VSCode 설치 및 설정:</strong></p> | |
| − | + | <ol> | |
| − | + | <li><a href="https://code.visualstudio.com/" target="_blank">VSCode 다운로드</a> 및 설치</li> | |
| − | </div> | + | <li>확장 프로그램 설치: "XML Tools" 검색 후 설치</li> |
| − | + | <li>생성된 XML 파일 열기</li> | |
| − | <div class=" | + | <li>Ctrl+Shift+P → "Format Document" 실행 (자동 정렬)</li> |
| − | <strong>3단계 | + | </ol> |
| − | + | <p><strong>검수 체크리스트:</strong></p> | |
| − | + | <div class="checklist"> | |
| + | <ul> | ||
| + | <li>태그가 올바르게 닫혔는가? (<persName>...</persName>)</li> | ||
| + | <li>잘못된 마커가 남아있지 않은가? ([P] → <persName>)</li> | ||
| + | <li>중첩된 태그가 있는가? (수정 필요)</li> | ||
| + | <li>인명/지명 구분이 올바른가?</li> | ||
| + | </ul> | ||
| + | </div> | ||
| + | </div> | ||
| + | </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단계</strong></td> | ||
| + | <td>Excel / Google Sheets</td> | ||
| + | <td>CSV 데이터 입력 (text_original)</td> | ||
| + | <td>전체 팀원</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><strong>2단계</strong></td> | ||
| + | <td>Excel / Google Sheets</td> | ||
| + | <td>태깅 마커 표시 (text_tagged)</td> | ||
| + | <td>인문계 학생</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><strong>3단계</strong></td> | ||
| + | <td>Python</td> | ||
| + | <td>마커 → XML 자동 변환</td> | ||
| + | <td>이공계 학생</td> | ||
| + | </tr> | ||
| + | <tr> | ||
| + | <td><strong>4단계</strong></td> | ||
| + | <td>VSCode</td> | ||
| + | <td>XML 파일 검수 및 수정</td> | ||
| + | <td>팀 총괄 + 전체</td> | ||
| + | </tr> | ||
| + | </tbody> | ||
| + | </table> | ||
</div> | </div> | ||
| 847번째 줄: | 937번째 줄: | ||
<li><strong>중첩 금지:</strong> [P][L]김해[/L][/P] (X) → 하나만 선택</li> | <li><strong>중첩 금지:</strong> [P][L]김해[/L][/P] (X) → 하나만 선택</li> | ||
<li><strong>불확실하면 표시 안 함:</strong> 확실한 것만 태깅</li> | <li><strong>불확실하면 표시 안 함:</strong> 확실한 것만 태깅</li> | ||
| − | <li><strong> | + | <li><strong>Excel에서 작업:</strong> 익숙한 도구로 빠르게 진행</li> |
| + | <li><strong>VSCode는 검수용:</strong> XML 변환 후 최종 확인에만 사용</li> | ||
</ul> | </ul> | ||
</div> | </div> | ||
| 855번째 줄: | 946번째 줄: | ||
<div class="checklist"> | <div class="checklist"> | ||
<ul> | <ul> | ||
| − | <li> | + | <li>인명과 지명의 차이를 구분할 수 있나요?</li> |
| − | <li>마커 표기법([P], [L | + | <li>마커 표기법([P], [L])을 이해했나요?</li> |
| − | <li> | + | <li>Excel에 text_tagged 열을 추가했나요?</li> |
<li>샘플 10개 문단을 태깅해보았나요?</li> | <li>샘플 10개 문단을 태깅해보았나요?</li> | ||
<li>팀원들과 태깅 기준을 통일했나요?</li> | <li>팀원들과 태깅 기준을 통일했나요?</li> | ||
| + | <li>VSCode를 설치하고 XML Tools 확장을 설치했나요?</li> | ||
</ul> | </ul> | ||
</div> | </div> | ||
| 1,658번째 줄: | 1,750번째 줄: | ||
<li><strong>광주인문도시스토리플랫폼:</strong> 사례 참고</li> | <li><strong>광주인문도시스토리플랫폼:</strong> 사례 참고</li> | ||
</ul> | </ul> | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
</div> | </div> | ||
</section> | </section> | ||
| 1,672번째 줄: | 1,755번째 줄: | ||
<footer> | <footer> | ||
| − | <p>© 2025 부산대학교 디지털인문학센터 ( | + | <p>© 2025 부산대학교 디지털인문학센터 (Digital Humanities Center of Pusan National University)</p> |
| − | <p> | + | <p>PNU 로컬 인문학 데이터 편찬 프로젝트</p> |
<p style="margin-top: 10px; font-size: 0.9em;"> | <p style="margin-top: 10px; font-size: 0.9em;"> | ||
| − | 문의: | + | 문의: sy527991@pusan.ac.kr | 최종 업데이트: 2025년 12월 |
</p> | </p> | ||
</footer> | </footer> | ||
2025년 12월 19일 (금) 19:20 판
<!DOCTYPE html>
📚 부산 지역 인문학 데이터 편찬 입문 가이드
『부산을 빛낸 인물』·『부산의 자연마을』 디지털 아카이브 구축
📖 들어가며: 우리가 만들 디지털 지식 창고
안녕하세요! 오늘은 『부산을 빛낸 인물』과 『부산의 자연마을』이라는 소중한 부산의 문화유산을 디지털 데이터로 변환하는 첫걸음을 함께 시작하려고 합니다.
📚 프로젝트 규모 및 팀 구성
- 『부산의 자연마을』: 총 2,400페이지 (1,200페이지 × 2권)
- 『부산을 빛낸 인물』: 총 800페이지
👥 팀 구성 (총 24명: 인문계 18명 + 이공계 6명)
자연마을 1팀
- 인원: 9명 (인문계 7명 + 이공계 2명)
- 담당: 『부산의 자연마을』 1,200페이지
- 총괄: 디지털인문학센터 운영위원
- 역할: 인문계-데이터 편찬 및 태깅 / 이공계-기술 지원 및 자동화
자연마을 2팀
- 인원: 9명 (인문계 7명 + 이공계 2명)
- 담당: 『부산의 자연마을』 1,200페이지
- 총괄: 디지털인문학센터 계약교수
- 역할: 인문계-데이터 편찬 및 태깅 / 이공계-기술 지원 및 자동화
부산을 빛낸 인물 팀
- 인원: 6명 (인문계 4명 + 이공계 2명)
- 담당: 『부산을 빛낸 인물』 800페이지
- 총괄: 디지털인문학센터 운영위원
- 역할: 인문계-데이터 편찬 및 태깅 / 이공계-기술 지원 및 자동화
- 파이썬 스크립트 개발 (태깅 마커 → XML 자동 변환)
- 데이터 검증 및 오류 체크 자동화
- 팀 내 기술적 문제 실시간 지원
- VSCode, Git 등 도구 활용 교육
왜 이 작업이 필요할까요?
책장에 꽂혀 있는 책은 한 번에 한 사람만 읽을 수 있지만, 디지털 데이터로 변환된 지식은:
- 💡 검색 가능: "1950년대 부산 영도구"라고 검색하면 관련된 모든 내용이 한눈에!
- 🔗 연결 가능: 인물과 장소, 사건이 서로 연결되어 새로운 통찰 발견
- 📊 분석 가능: 빈도, 패턴, 관계를 통해 보이지 않던 역사적 의미 발견
- 🌐 공유 가능: 전 세계 연구자들과 부산의 이야기를 나눌 수 있어요
🔥 전체 로드맵: 3단계 여정
데이터 편찬
현재 단계
- PDF → 텍스트 추출
- 구조화 → CSV 정리
- 태깅 → XML 변환
목표: 원천 자료를 DB에 업로드 가능한 형태로 구조화
데이터 분석
- 빈도 분석 & 키워드 추출
- 관계 파악
- 의미 해석
목표: 구축된 데이터에서 학문적 의미와 패턴 도출
데이터 설계
- 온톨로지 설계
- 지식 그래프 구상
- 활용 방안 기획
목표: 플랫폼 구축을 위한 데이터 모델링
🏷️ XML 태깅: 데이터에 의미 부여하기
이 섹션은 "📊 우리 팀 데이터 구조 이해하기" 섹션을 먼저 완료한 후에 진행합니다.
1단계: Excel에서 CSV 데이터 입력 완료 → 2단계: Excel에서 XML 태깅 마커 표시 → 3단계: VSCode에서 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차 작업 범위: 인명(persName) + 지명(placeName) 2가지만 태깅
→ 빠르고 정확한 작업으로 핵심 온톨로지 구축 우선!
🔍 1차 작업: 인명 + 지명 태깅 실전
예시 1: 『부산을 빛낸 인물』
원문:- 인명: 사람 이름 (최치원, 헌안왕, 경문왕)
- 지명: 장소/지역 (신라, 경주, 당나라)
- 제외: 857년, 868년 같은 시간 표현 (2차 작업에서!)
예시 2: 『부산의 자연마을』
원문:- 지명: 영도구, 동삼동, 절영도, 부산부 (모두 장소)
- 인명: 없음
- 제외: 조선시대, 1876년, 1942년 (2차 작업에서!)
👥 역할 분담: 3단계 워크플로우
인문계 학생 - Excel/구글 시트에서 태깅
도구: Excel 또는 Google Sheets
방법:
text_original열의 텍스트 읽기- 새 열
text_tagged추가 - 인명과 지명에 마커 표시:
- 인명: [P]최치원[/P]
- 지명: [L]경주[/L]
예시:
⏱️ 예상 소요 시간: 문단당 2~3분
이공계 학생 - 파이썬으로 XML 자동 변환
도구: Python + pandas + re (정규식)
방법:
- CSV 파일의
text_tagged열 읽기 - 정규식으로 마커 → XML 태그 변환
- XML 파일로 출력
파이썬 스크립트 예시:
⏱️ 예상 소요 시간: 전체 데이터 1~2일
전체 팀 - VSCode로 XML 검수 및 수정
도구: Visual Studio Code (VSCode)
왜 VSCode인가?
- ✅ XML 구문 하이라이팅 (오류를 쉽게 발견)
- ✅ 태그 자동 완성
- ✅ 검색 & 일괄 치환 기능
- ✅ 확장 프로그램으로 XML 검증 가능
VSCode 설치 및 설정:
- VSCode 다운로드 및 설치
- 확장 프로그램 설치: "XML Tools" 검색 후 설치
- 생성된 XML 파일 열기
- Ctrl+Shift+P → "Format Document" 실행 (자동 정렬)
검수 체크리스트:
- 태그가 올바르게 닫혔는가? (<persName>...</persName>)
- 잘못된 마커가 남아있지 않은가? ([P] → <persName>)
- 중첩된 태그가 있는가? (수정 필요)
- 인명/지명 구분이 올바른가?
🔄 작업 도구별 역할 정리
| 단계 | 도구 | 작업 내용 | 담당 |
|---|---|---|---|
| 1단계 | Excel / Google Sheets | CSV 데이터 입력 (text_original) | 전체 팀원 |
| 2단계 | Excel / Google Sheets | 태깅 마커 표시 (text_tagged) | 인문계 학생 |
| 3단계 | Python | 마커 → XML 자동 변환 | 이공계 학생 |
| 4단계 | VSCode | XML 파일 검수 및 수정 | 팀 총괄 + 전체 |
- 일관성 유지: 같은 대상은 항상 같은 방식으로 태깅
- 중첩 금지: [P][L]김해[/L][/P] (X) → 하나만 선택
- 불확실하면 표시 안 함: 확실한 것만 태깅
- Excel에서 작업: 익숙한 도구로 빠르게 진행
- VSCode는 검수용: XML 변환 후 최종 확인에만 사용
📊 태깅 진도 체크리스트
- 인명과 지명의 차이를 구분할 수 있나요?
- 마커 표기법([P], [L])을 이해했나요?
- Excel에 text_tagged 열을 추가했나요?
- 샘플 10개 문단을 태깅해보았나요?
- 팀원들과 태깅 기준을 통일했나요?
- VSCode를 설치하고 XML Tools 확장을 설치했나요?
📊 우리 팀 데이터 구조 이해하기
우리가 사용하는 구글 시트는 18개의 필드(열)로 구성되어 있어요. 각 필드가 왜 필요한지 함께 살펴볼까요?
- 1단계 (기본 입력): id, book_title, person_id, text_original, text_type
- 2단계 (XML 태깅): text_tagged (새로 추가!)
- 3단계 (자동화): 이공계 학생이 text_tagged → XML 변환
🔑 핵심 필드 설명
| 필드명 | 예시 | 설명 | 작업자가 할 일 |
|---|---|---|---|
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_101_001 | 인물 고유 번호 | 필수 새 인물마다 부여 |
name_ko |
최치원 | 인물 한글 이름 | 정확하게 입력 |
name_ch |
崔致遠 | 인물 한자 이름 | 있는 경우만 입력 |
topic |
해운대의_유래 | 소주제 | 섹션 제목 그대로 |
author |
정경주_경성대교수 | 글쓴이 | 이름_소속 형식 |
text_original |
(본문 내용) | 원문 텍스트 | 필수 가장 중요! |
text_type |
normal / citation / poem | 텍스트 유형 | 필수 반드시 구분 |
relation_note |
txt_10008 | 관련 텍스트 ID | 연결된 경우만 |
img_caption |
최치원_영정 | 이미지 설명 | 이미지 있을 때만 |
remark |
번역문 / 원문 | 비고 | 필요시 메모 |
📖 실전 예시로 배우기
사례 1: 일반 텍스트 처리하기
PDF 원문 (5페이지)
스프레드시트 입력 결과
| id | book_title | chapter | page | person_id | name_ko | topic | text_type |
|---|---|---|---|---|---|---|---|
| txt_10001 | 부산을_빛낸_인물 | 001 | 005 | per_101_001 | 최치원 | 해운대의_유래 | 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 | (최치원이 쓴 글 중에서) | 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부터 시작
- 연속성: 중간에 번호를 건너뛰지 않음
- 고유성: 전체 데이터베이스에서 중복되면 안 됨!
- txt_1 (자릿수 부족)
- txt_100001 (자릿수 초과)
- txt_10001을 두 번 사용 (중복)
- txt_10001
- txt_10002
- txt_10003
2. 인물 ID (person_id) 규칙
- 형식:
per_+ 책번호(3자리) +_+ 인물번호(3자리) - 책번호:
- 101 = 『부산을 빛낸 인물』 권1
- 102 = 『부산을 빛낸 인물』 권2
- 201 = 『부산의 자연마을』 권1
- 인물번호: 책 내에서 등장 순서대로 001부터 부여
실전 예시
| 상황 | person_id | 설명 |
|---|---|---|
| 최치원이 5페이지에서 처음 등장 | per_101_001 |
첫 번째 인물 |
| 정서가 11페이지에서 처음 등장 | per_101_002 |
두 번째 인물 |
| 최치원이 다시 15페이지에 등장 | per_101_001 |
동일 ID 재사용! |
- 📌 인물 등장 순서대로 번호 부여: 페이지 순서가 아니라 등장 순서
- 📌 같은 인물은 같은 ID: 여러 페이지에 등장해도 ID는 하나
- 📌 엑셀 필터 활용: 이미 부여된 인물 ID 확인하기
🛠️ 단계별 작업 프로세스
STEP 1: PDF에서 텍스트 추출
방법 1: Adobe Acrobat (추천)
- PDF 파일 열기
- 편집 → 복사할 텍스트 선택
- 마우스 드래그로 문단 선택
- Ctrl+C (복사)
- 메모장/VS Code에 붙여넣기
방법 2: 온라인 도구
- Smallpdf: https://smallpdf.com/kr/pdf-to-text
- iLovePDF: https://www.ilovepdf.com/ko/pdf_to_text
- 한자가 깨지지 않았나요?
- 줄바꿈이 이상하지 않나요?
- 특수문자(◦, ●, ※)가 제대로 나왔나요?
STEP 2: 텍스트 전처리
해야 할 일
- 문단 나누기: Enter로 문단 구분
- 공백 정리: 불필요한 띄어쓰기 제거
- 페이지 번호 제거: -5-, [5] 같은 표시 삭제
- 각주 처리: 1), 2) 같은 각주 번호 처리
예시: 전처리 전후
STEP 3: 스프레드시트 입력
입력 순서
- 메타데이터 먼저: book_title, publisher, pub_date, chapter
- 페이지 확인: page 필드에 정확한 페이지 입력
- 인물 정보: person_id, name_ko, name_ch 확인
- 본문 입력: text_original에 텍스트 붙여넣기
- 유형 지정: text_type 선택 (normal/citation/poem)
- Ctrl+D: 위 셀 내용 복사 (같은 값 반복 입력시 유용)
- Ctrl+Enter: 셀 내 줄바꿈
- F2: 셀 편집 모드
📝 text_type 판단 가이드
| text_type | 사용 시점 | 예시 키워드 |
|---|---|---|
| normal | 일반 서술 텍스트 | "~이다", "~되었다", "~라고 한다" |
| citation | 직접 인용문 | "~하셨습니다", 따옴표(' " ") 있음 |
| poem | 시, 가사, 한시 | 4행시, 율문, 운문 |
💻 실습 스프레드시트
아래는 우리 팀이 실제로 작업하는 구글 시트입니다. 실시간으로 데이터를 확인하고 입력할 수 있어요.
- 위 임베드 창에서 바로 데이터를 확인할 수 있어요
- 실제 입력은 "새 탭에서 열기" 버튼을 클릭해서 진행하세요
- 여러 사람이 동시에 작업할 수 있어요 (실시간 공동 편집)
- 변경 이력은 자동으로 저장됩니다
✅ 최종 체크리스트
작업 완료 전에 꼭 확인하세요!
- id가 연속되어 있나요? (txt_10001 → txt_10002 → txt_10003)
- person_id가 올바르게 부여되었나요?
- 같은 인물이 여러 곳에 나오면 같은 person_id를 사용했나요?
- text_type이 정확한가요? (normal/citation/poem)
- 시의 원문과 번역문을 분리했나요?
- relation_note로 관련 텍스트를 연결했나요?
- 한자 이름이 있는 경우 name_ch에 입력했나요?
- 띄어쓰기와 문장부호가 원문과 일치하나요?
🔧 자주 발생하는 오류와 해결법
오류 1: ID 중복
❌ 문제: txt_10005가 두 개 있어요!
✅ 해결: 전체 열을 선택 → 데이터 → 중복 항목 삭제
오류 2: person_id 혼동
❌ 문제: 최치원이 등장할 때마다 새 ID를 부여했어요
✅ 해결: 같은 인물은 첫 등장시의 ID를 계속 사용 (per_101_001)
오류 3: 시 처리 실수
❌ 문제: 원문과 번역을 한 행에 넣었어요
✅ 해결: 두 개 행으로 분리하고 relation_note로 연결
오류 4: text_type 오입력
❌ 문제: citation을 citaion으로 오타
✅ 해결: 드롭다운 메뉴 만들기
- 열 선택 → 데이터 → 데이터 확인
- 조건: 목록(항목) → normal, citation, poem
💬 자주 묻는 질문 (Q&A)
Q1. 인물이 명확하지 않은 경우는?
A. person_id를 비워두고, remark에 "인물 미상" 표시
Q2. 여러 인물이 한 문단에 나오면?
A. 주요 인물의 person_id를 사용하고, remark에 "김철수, 이영희 등장" 메모
Q3. 페이지 번호가 불분명하면?
A. 앞뒤 맥락으로 유추하고, remark에 "페이지 추정" 표시
Q4. 작업 중 막힐 때는?
A.
- 팀 슬랙 채널에 질문
- 매주 화요일 오후 2시 정기 모임
- 작업 메뉴얼 재확인
📊 작업 일정 계획 (2026년 1월~2월)
- 『부산을 빛낸 인물』: 총 800여 페이지 → 1개 팀 (6명) 담당
- 『부산의 자연마을』: 총 2,400여 페이지 → 2개 팀 (각 9명) 분담
- 1팀: 1,200페이지
- 2팀: 1,200페이지
※ 각 팀원은 담당 권/장을 선정하여 2개월간 데이터 편찬 작업을 진행합니다.
| 기간 | 목표 | 세부 과제 |
|---|---|---|
| 1월 1~2주 (1/1~1/14) |
작업 준비 및 기초 입력 |
|
| 1월 3~4주 (1/15~1/31) |
본격 데이터 입력 + XML 태깅 시작 |
|
| 2월 1~2주 (2/1~2/14) |
복잡한 텍스트 처리 + 본격 XML 태깅 |
|
| 2월 3~4주 (2/15~2/28) |
완료 및 품질 검수 + XML 변환 |
|
- 일일 목표: 하루 10~15개 문단 입력 (약 1시간)
- 주간 목표: 주 5일 기준 50~75개 문단
- 정기 모임: 매주 화요일 오후 2시 진도 점검 및 질의응답
- 비상 연락: 팀 슬랙 채널 실시간 지원
🎯 마무리
기억해야 할 핵심 3가지
- 일관성이 생명: 같은 항목은 항상 같은 방식으로
- ID는 신중하게: 한번 부여한 ID는 계속 사용
- 협업이 중요: 막힐 때는 팀원에게 물어보기
다음 교육 예고
- 2주차: XML 태깅과 TEI 표준
- 3주차: Neo4j 그래프 데이터베이스 입문
- 4주차: 데이터 시각화 실습
📎 참고 자료
- 작업 스프레드시트: 구글 시트 바로가기
- TEI 가이드라인: https://tei-c.org/guidelines/
- 광주인문도시스토리플랫폼: 사례 참고