본문 바로가기
IT

CORD-19: 인공지능 기반의 COVID-19 연구

by CHML 2020. 6. 8.
COVID-19 Open Research Dataset (CORD-19)

세계 최대 규모의 데이터 플랫폼인 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을 이용한 데이터 전처리

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(1len(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 객체 내에서 필요한 정보를 추출할 수 있다.