機械判読用に最適化され、グローバルな研究コミュニティで使用できる、COVID-19 およびコロナウイルス関連の学術論文の全文およびメタデータ データセット。
COVID-19 の感染拡大に対応するため、Allen Institute for AI はトップレベルの研究グループと提携し、無料の 47,000 を超える論文リソースから構成される COVID-19 Open Research Dataset (CORD-19) の準備と配布を行っています。COVID-19 およびコロナウイルスのウイルス属に関する 36,000 を超える全文が含まれており、世界中の研究コミュニティが使用できます。
このデータセットは、研究者を動員して自然言語処理における最新の進展状況を適用することで、この感染症との闘いをサポートするための新しい分析情報を生成する目的で作成されています。
全文献は、新しい研究は査読された出版物や bioRxiv、medRxiv などのアーカイブ サービスで公開されると、更新される可能性があります。
ライセンス条項
このデータセットは、Allen Institute of AI および Semantic Scholar により提供されています。 CORD-19 データセットで提供されているコンテンツにアクセスしたりダウンロードしたりすることで、このデータセットの使用に関連するデータセット ライセンスに同意したものとみなされます。 データセット内の個別の記事に関する特定のライセンス情報は、メタデータ ファイルで提供されます。 その他のライセンス情報は、PMC Web サイト、medRxiv Web サイト、bioRxiv Web サイトで提供されています。
ボリュームとデータ保持期間
このデータセットは Json 形式で保存されており、最新のリリースには 36,000 を超える全文記事が含まれています。 各記事は単一の JSON オブジェクトとして表されます。 スキーマはこちらから入手できます。
保存先
このデータセットは、米国東部 Azure リージョンに保存されています。 アフィニティのために、米国東部でコンピューティング リソースを割り当てることをお勧めします。
引用
出版物や再版物に CORD-19 データを含める場合は、次のようにデータセットを引用してください。
参考文献内:
COVID-19 Open Research Dataset (CORD-19)。 2020 年。 バージョン YYYY-MM-DD。 COVID-19 Open Research Dataset (CORD-19) より取得。 YYYY-MM-DD にアクセス。 doi:10.5281/zenodo.3715505
テキスト内: (CORD-19, 2020)
連絡先
このデータセットに関するご質問がある場合は、partnerships@allenai.org にお問い合わせください。
通知
Microsoft は、Azure オープン データセットを “現状有姿” で提供します。 Microsoft は、データセットの使用に関して、明示または黙示を問わず、いかなる保証も行わないものとし、条件を定めることもありません。 現地の法律の下で認められている範囲内で、Microsoft は、データセットの使用に起因する、直接的、派生的、特別、間接的、偶発的、または懲罰的なものを含めたいかなる損害または損失に対しても一切の責任を負わないものとします。
Access
Available in | When to use |
---|---|
Azure Notebooks | Quickly explore the dataset with Jupyter notebooks hosted on Azure or your local machine. |
Select your preferred service:
Azure Notebooks
from azure.storage.blob import BlockBlobService
# storage account details
azure_storage_account_name = "azureopendatastorage"
azure_storage_sas_token = "sv=2019-02-02&ss=bfqt&srt=sco&sp=rlcup&se=2025-04-14T00:21:16Z&st=2020-04-13T16:21:16Z&spr=https&sig=JgwLYbdGruHxRYTpr5dxfJqobKbhGap8WUtKFadcivQ%3D"
# create a blob service
blob_service = BlockBlobService(
account_name=azure_storage_account_name,
sas_token=azure_storage_sas_token,
)
# container housing CORD-19 data
container_name = "covid19temp"
# download metadata.csv
metadata_filename = 'metadata.csv'
blob_service.get_blob_to_path(
container_name=container_name,
blob_name=metadata_filename,
file_path=metadata_filename
)
import pandas as pd
# read metadata.csv into a dataframe
metadata_filename = 'metadata.csv'
metadata = pd.read_csv(metadata_filename)
metadata.head(3)
simple_schema = ['cord_uid', 'source_x', 'title', 'abstract', 'authors', 'full_text_file', 'url']
def make_clickable(address):
'''Make the url clickable'''
return '<a href="{0}">{0}</a>'.format(address)
def preview(text):
'''Show only a preview of the text data.'''
return text[:30] + '...'
format_ = {'title': preview, 'abstract': preview, 'authors': preview, 'url': make_clickable}
metadata[simple_schema].head().style.format(format_)
# let's take a quick look around
num_entries = len(metadata)
print("There are {} many entries in this dataset:".format(num_entries))
metadata_with_text = metadata[metadata['full_text_file'].isna() == False]
with_full_text = len(metadata_with_text)
print("-- {} have full text entries".format(with_full_text))
with_doi = metadata['doi'].count()
print("-- {} have DOIs".format(with_doi))
with_pmcid = metadata['pmcid'].count()
print("-- {} have PubMed Central (PMC) ids".format(with_pmcid))
with_microsoft_id = metadata['Microsoft Academic Paper ID'].count()
print("-- {} have Microsoft Academic paper ids".format(with_microsoft_id))
# choose a random example with pdf parse available
metadata_with_pdf_parse = metadata[metadata['has_pdf_parse']]
example_entry = metadata_with_pdf_parse.iloc[42]
# construct path to blob containing full text
blob_name = '{0}/pdf_json/{1}.json'.format(example_entry['full_text_file'], example_entry['sha']) # note the repetition in the path
print("Full text blob for this entry:")
print(blob_name)
import json
blob_as_json_string = blob_service.get_blob_to_text(container_name=container_name, blob_name=blob_name)
data = json.loads(blob_as_json_string.content)
# in addition to the body text, the metadata is also stored within the individual json files
print("Keys within data:", ', '.join(data.keys()))
from nltk.tokenize import sent_tokenize
# the text itself lives under 'body_text'
text = data['body_text']
# many NLP tasks play nicely with a list of sentences
sentences = []
for paragraph in text:
sentences.extend(sent_tokenize(paragraph['text']))
print("An example sentence:", sentences[0])
# choose a random example with pmc parse available
metadata_with_pmc_parse = metadata[metadata['has_pmc_xml_parse']]
example_entry = metadata_with_pmc_parse.iloc[42]
# construct path to blob containing full text
blob_name = '{0}/pmc_json/{1}.xml.json'.format(example_entry['full_text_file'], example_entry['pmcid']) # note the repetition in the path
print("Full text blob for this entry:")
print(blob_name)
blob_as_json_string = blob_service.get_blob_to_text(container_name=container_name, blob_name=blob_name)
data = json.loads(blob_as_json_string.content)
# the text itself lives under 'body_text'
text = data['body_text']
# many NLP tasks play nicely with a list of sentences
sentences = []
for paragraph in text:
sentences.extend(sent_tokenize(paragraph['text']))
print("An example sentence:", sentences[0])
# get and sort list of available blobs
blobs = blob_service.list_blobs(container_name)
sorted_blobs = sorted(list(blobs), key=lambda e: e.name, reverse=True)
# we can now iterate directly though the blobs
count = 0
for blob in sorted_blobs:
if blob.name[-5:] == ".json":
count += 1
print("There are {} many json files".format(count))
metadata_multiple_shas = metadata[metadata['sha'].str.len() > 40]
print("There are {} many entries with multiple shas".format(len(metadata_multiple_shas)))
metadata_multiple_shas.head(3)
container_name = "covid19temp"
blobs = blob_service.list_blobs(container_name)
sorted_blobs = sorted(list(blobs), key=lambda e: e.name, reverse=True)
import re
dirs = {}
pattern = '([\w]+)\/([\w]+)\/([\w.]+).json'
for blob in sorted_blobs:
m = re.match(pattern, blob.name)
if m:
dir_ = m[1] + '/' + m[2]
if dir_ in dirs:
dirs[dir_] += 1
else:
dirs[dir_] = 1
dirs
import azureml.core
print("Azure ML SDK Version: ", azureml.core.VERSION)
from azureml.core import Dataset
cord19_dataset = Dataset.File.from_files('https://azureopendatastorage.blob.core.windows.net/covid19temp')
mount = cord19_dataset.mount()
import os
COVID_DIR = '/covid19temp'
path = mount.mount_point + COVID_DIR
with mount:
print(os.listdir(path))
import pandas as pd
# create mount context
mount.start()
# specify path to metadata.csv
COVID_DIR = 'covid19temp'
metadata_filename = '{}/{}/{}'.format(mount.mount_point, COVID_DIR, 'metadata.csv')
# read metadata
metadata = pd.read_csv(metadata_filename)
metadata.head(3)
simple_schema = ['cord_uid', 'source_x', 'title', 'abstract', 'authors', 'full_text_file', 'url']
def make_clickable(address):
'''Make the url clickable'''
return '<a href="{0}">{0}</a>'.format(address)
def preview(text):
'''Show only a preview of the text data.'''
return text[:30] + '...'
format_ = {'title': preview, 'abstract': preview, 'authors': preview, 'url': make_clickable}
metadata[simple_schema].head().style.format(format_)
# let's take a quick look around
num_entries = len(metadata)
print("There are {} many entries in this dataset:".format(num_entries))
metadata_with_text = metadata[metadata['full_text_file'].isna() == False]
with_full_text = len(metadata_with_text)
print("-- {} have full text entries".format(with_full_text))
with_doi = metadata['doi'].count()
print("-- {} have DOIs".format(with_doi))
with_pmcid = metadata['pmcid'].count()
print("-- {} have PubMed Central (PMC) ids".format(with_pmcid))
with_microsoft_id = metadata['Microsoft Academic Paper ID'].count()
print("-- {} have Microsoft Academic paper ids".format(with_microsoft_id))
# choose a random example with pdf parse available
metadata_with_pdf_parse = metadata[metadata['has_pdf_parse']]
example_entry = metadata_with_pdf_parse.iloc[42]
# construct path to blob containing full text
filepath = '{0}/{1}/pdf_json/{2}.json'.format(path, example_entry['full_text_file'], example_entry['sha'])
print("Full text filepath:")
print(filepath)
import json
try:
with open(filepath, 'r') as f:
data = json.load(f)
except FileNotFoundError as e:
# in case the mount context has been closed
mount.start()
with open(filepath, 'r') as f:
data = json.load(f)
# in addition to the body text, the metadata is also stored within the individual json files
print("Keys within data:", ', '.join(data.keys()))
from nltk.tokenize import sent_tokenize
# the text itself lives under 'body_text'
text = data['body_text']
# many NLP tasks play nicely with a list of sentences
sentences = []
for paragraph in text:
sentences.extend(sent_tokenize(paragraph['text']))
print("An example sentence:", sentences[0])
# choose a random example with pmc parse available
metadata_with_pmc_parse = metadata[metadata['has_pmc_xml_parse']]
example_entry = metadata_with_pmc_parse.iloc[42]
# construct path to blob containing full text
filename = '{0}/pmc_json/{1}.xml.json'.format(example_entry['full_text_file'], example_entry['pmcid']) # note the repetition in the path
print("Path to file: {}\n".format(filename))
with open(mount.mount_point + '/' + COVID_DIR + '/' + filename, 'r') as f:
data = json.load(f)
# the text itself lives under 'body_text'
text = data['body_text']
# many NLP tasks play nicely with a list of sentences
sentences = []
for paragraph in text:
sentences.extend(sent_tokenize(paragraph['text']))
print("An example sentence:", sentences[0])
metadata_multiple_shas = metadata[metadata['sha'].str.len() > 40]
print("There are {} many entries with multiple shas".format(len(metadata_multiple_shas)))
metadata_multiple_shas.head(3)