(디지털)인문학 연구를 위한 공공데이터 활용 –21)
XML의 이해
앞선 글에서는 (디지털)인문학 연구를 위한 공공데이터의 중요성과 공공데이터 포털(data.go.kr)을 소개하였다. 3단계 이상의 기계 가독형(machine readable) 파일 포맷의 사례로 CSV, JSON, XML을 예시로 들었다. 오늘은 이 중에 인문 데이터에 많이 활용되는 XML(eXtensible Markup Language)2)을 설명하려 한다. XML은 인터넷상의 데이터를 쉽게 주고받을 수 있게 만든 마크업(Markup) 언어이다. 여기서 마크업3)이란 문서나 데이터의 구조를 명기하는 방식으로, 컴퓨터에서 어디서부터 어디까지가 데이터의 속성값인지 의미를 부여할 수 있다. 예컨대 아래 그림에서 ‘한산이씨’라는 텍스트만 있다면 해당 데이터의 성격은 알 수 없다. 하지만 ‘한산이씨’라는 요솟값을 규정하는 요소(Element)인 ‘인명’을 추가하고, ‘인명’의 속성(Attribute)인 ‘유형’과 그 속성값인 ‘성씨’를 추가함으로써 ‘한산이씨’라는 데이터에 의미를 부여하는 메타(Meta)데이터를 기술할 수 있다. 이와 같은 데이터의 요소와 속성을 태그(Tag)라고 부르며 하나의 데이터는 여러 개의 태그를 소유할 수 있다.
삼일운동 데이터베이스 격문 XML
이제 실제 한국사데이터베이스의 삼일운동 데이터베이스4)에서 격문 XML 파일을 살펴보면서 XML 파일 구조를 다시 확인한다. 아래는 삼일운동 데이터베이스 사이트의 격문/선언서 메뉴이다. 삼일운동 관련 총 221건의 격문/선언서가 있고 클릭을 통해 확인할 수 있다. 아래 데이터베이스의 밑단에는 XML 파일이 존재하고 아래 웹사이트는 XML을 시각적으로 구현한 것이다.
공공데이터 포털에서 삼일운동 데이터베이스 격문 XML 파일5)을 제공한다. <level1> 부터 본격적인 본문이 시작된다. ‘3·1독립선언서’라는 텍스트가 <title>과 <mainTitle>이라는 태그로 감싸져 있는 것을 확인할 수 있다. 또한 텍스트의 저자와 번역자 등의 서지정보를 확인할 수 있다.
본격적인 텍스트는 <text> 태그부터 시작이다. 아래 예시에서는 ’type’ 속성을 활용해 어디서부터 어디까지 주 제목인지 구분했으며, 별다른 속성이 없는 경우 본문임을 알 수 있다. 또한 <paragraph> 태그로 문단 단위로 텍스트가 분절화된 것을 확인할 수 있다.
XML 파싱
앞에서 XML의 구조를 파악했다면 이제는 연구자가 원하는 요소만 따로 뽑아 꺼내쓰는 과정이 필요하다. 이 과정을 파싱(Parsing)이라 부르는데 이는 언어학에서 발원한 단어로 ‘구문 분석’을 뜻한다. 전산학에서는 문자열 데이터의 구성 성분을 분해하고 관계를 분석하는 행위를 말하는 데 파싱을 하는 프로그램을 파서(Parser)라고 부른다. 아래 예시는 웹 기반 XML 파서로, 왼쪽에 XML 파일을 붙여 넣거나 로드하고 가운데 XML Parser 버튼을 누르면 오른쪽처럼 텍스트 구조를 파악해서 나무 형태로 보여준다.
하지만 수천, 수만 개의 XML 파일을 한꺼번에 파싱해서 본문만 꺼내거나 저자 정보만 추출하고 싶다면 프로그래밍 언어를 활용하는 것을 추천한다. Python, R 등 여러 프로그래밍 언어에서는 XML 파싱 패키지를 제공한다. Python의 경우 ElementTree XML API6) 이미 내장하고 있으며, 추가 lxml7) 같은 라이브러리도 존재한다. 또한 Pandas8) 파이썬의 대표적인 데이터 분석 및 핸들링 패키지의 경우도 read_xml같이 xml 파일을 바로 읽어서 테이블 형태로 변환하는 함수가 내장돼 있다. XML 파싱을 자유롭게 할 수 있다면 텍스트 내에서 있는 여러 태그를 인문학 연구에 적극적으로 활용할 수 있을 것이다. 예컨대 저번 시간에 언급했던 인명이나 지명 등이 태깅돼 있다면 인명/지명만 따로 파싱을 통해 손쉽게 추출할 수 있다.
1) 이 글은 2023 디지털인문학(DH) 겨울학교의 공동 세션, <디지털인문학을 위한 공공데이터 활용(김병준)>의 강의안의 내용을 일부 가져온 것입니다. 겨울학교 안내 : https://dhcss.kaist.ac.kr/boards/view/board_news/87 발표자료 링크 : https://docs.google.com/presentation/d/1TRlCIdNWecV8_a0_-1GVe5UMUYhEX1m0F6ApykzEHDY/edit?usp=sharing
4) https://db.history.go.kr/samil/home/manifesto/select_manifesto_list.do
5) https://www.data.go.kr/data/15080861/fileData.do
6) https://docs.python.org/ko/3/library/xml.etree.elementtree.html
7) https://lxml.de/
9) https://pandas.pydata.org/docs/reference/api/pandas.read_xml.html
Comments