세계 최대 규모의 데이터 플랫폼인 Kaggle에서는 인공지능 기반의 코로나 바이러스 연구를 위해 COVID-19 open research dataset (CORD-19)을 공개했다. CORD-19는 COVID-19, SART-CoV-2, 그 외의 관련 코로나 바이러스에 대한 약 135,000개의 문헌을 모아 놓은 dataset이다. CORD-19는 Allen Instutite, Microsoft Research, IBM 등에서 코로나 바이러스 관련 연구를 위해 무료로 공개했으며, Kaggle CORD-19 페이지에서 다운 받을 수 있다.
CORD-19는 코로나 바이러스 관련 문헌들의 metadata와 본문을 JSON의 형태로 제공한다. 다운 받은 CORD-19의 document_parses 폴더를 보면 pdf_json과 pmc_json 하위 폴더가 있으며, 두 폴더에는 수집된 문헌들에 대한 각각의 JSON 파일이 존재한다. 문헌에 대한 JSON 파일은 metadata, abstract, body_text, bib_entries, ref_entries, back_matter의 항목으로 구성된다. 문헌의 내용과는 큰 상관이 없는 back_matter 항목을 제외한 각 항목에 포함된 정보는 아래와 같다.
- metadata: 논문의 제목과 저자들의 이름 및 소속 정보
- abstract: 문헌 요약문의 내용
- body_text: 본문의 내용
- bib_entries: 문헌에서 참조된 다른 문헌들의 제목과 출판 정보
- ref_entries: 문헌에 포함된 그림이나 표에 대한 정보
특히, abstract는 문헌 전체의 내용을 포함하면서도 매우 명료하게 작성된 글이기 때문에 natural language processing (NLP)를 적용하기에 매우 유용하다.
Python의 JSON 라이브러리를 이용하면 CORD-19에 포함된 각 문헌들의 abstract를 손쉽게 추출할 수 있다. 아래의 [코드 1]은 Python을 이용하여 CORD-19의 document_parses/pdf_json 폴더에 포함된 문헌들에서 abstract를 추출하는 코드이다. 추출된 정보는 문헌의 index, title, abstract 순서로 cord19.xlsx라는 엑셀 형태의 파일에 저장된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
index = 0
liter_data = list()
for file_name in glob.glob(os.path.join('CORD-19/document_parses/pdf_json', '*.json')):
file = open(file_name, 'r', encoding='utf-8')
data = json.loads(file.read())
title = data['metadata']['title']
data_abs = data['abstract']
text_abs = data_abs[0]['text']
for i in range(1, len(data_abs)):
text_abs += ' ' + data_abs[i]['text']
liter_data.append([index, title, text_abs])
index += 1
print(index)
df = pandas.DataFrame(liter_data)
df.to_excel('cord19.xlsx', index=False, header=None)
|
cs |
[코드 1] Python을 이용한 CORD-19 데이터셋 전처리.
CORD-19에는 abstract 이외에도 JSON의 형태로 저자 정보, 문헌의 본문, 레퍼런스 등의 다양한 정보를 제공하고 있다. 필요에 따라서는 data['metadata']나 data['abstract']와 같이 data 객체 내에서 필요한 정보를 추출할 수 있다.
'IT' 카테고리의 다른 글
Python을 이용한 이용한 유튜브 (YouTube) 댓글 수집 (11) | 2021.01.17 |
---|---|
머신 러닝 기반의 Scientific Application을 위한 파이썬 라이브러리 (0) | 2020.05.21 |
샘플링 (Sampling), 양자화 (Quantization) 및 부호화 (Coding) (0) | 2016.10.24 |
정보이론과 엔트로피 (0) | 2016.10.20 |
Java에서 문자열을 XML 파일로 변환하기 (0) | 2016.02.19 |