下载神经影像文章并提取文本和立体坐标。
项目描述
pubget
pubget
是一个用于收集生物医学文本挖掘数据的命令行工具,特别是在大规模坐标基础神经影像元分析方面。它公开了一些用于创建neuroquery数据集的机制,该数据集为neuroquery.org提供动力。
pubget
从PubMed Central下载全文文章,并提取其文本、元数据和立体坐标。它还可以计算提取文本的TFIDF特征,拟合NeuroQuery或NeuroSynth,并为NiMARE或labelbuddy格式化其输出。它可以通过插件进行扩展。
除了命令行界面外,pubget
的功能也通过其 Python API 提供。
安装
您可以通过运行以下命令安装 pubget
pip install pubget
这将安装 pubget
Python 包,以及 pubget
命令。
快速入门
一旦安装了 pubget
,我们就可以下载和处理生物医学出版物,以便我们可以在以后用于文本挖掘或元分析。
pubget run ./pubget_data -q "fMRI[title]"
有关此命令的说明,请参阅 pubget run --help
。例如,--n_jobs
选项允许并行运行一些步骤。
用法
数据集的创建分为3步
- 从 PMC API 批量下载文章。
- 从批量下载中提取文章
- 从文章中提取文本、立体坐标和元数据,并将这些信息存储在CSV文件中。
之后,还可以运行一些可选步骤,例如:
- 将文本向量化:将其转换为TFIDF特征向量。
- 运行与NeuroSynth或NeuroQuery相同的分析。
- 准备与labelbuddy或NiMARE一起使用的数据。
每个步骤都会将输出存储在不同的目录中。通常,您可以通过调用pubget run
来在一个命令中运行整个程序。然而,也提供了单独的命令来单独运行每个步骤。下面,我们将描述每个步骤及其输出。使用pubget -h
查看所有可用命令,使用pubget run -h
查看主命令的所有选项。
pubget
下载的所有文章均来自PubMed Central,因此通过其PubMed Central ID (pmcid
) 进行识别。请注意,这不同于PubMed ID (pmid
)。并非所有PMC中的文章都有pmid
。
pubget
仅从PMC的开放获取子集中下载文章。开放获取论文是那些许可允许下载其文本进行文本挖掘或其他再使用的论文(Creative Commons或类似许可)。要限制搜索结果以仅包含PMC网站上的开放获取子集(并查看pubget
将下载的论文),请在“文章属性”列表中选择“开放获取”。
步骤1:从PMC下载文章
此步骤由pubget download
命令执行。可以以两种不同的方式选择要下载的文章:使用查询搜索PMC数据库,或提供显式的文章PMCID列表。要使用PMCID列表,我们必须通过--pmcids_file
参数传递包含ID的文件的路径。它必须每行包含一个ID,例如
8217889
7518235
7500239
7287136
7395771
7154153
请注意,这些必须是PubMedCentral ID,不是PubMed ID。此外,一些文章可以在PubMedCentral网站上查看,但不在开放获取子集中。这些文章的出版商禁止以XML形式下载其全文。pubget
会过滤PMCID列表,并仅下载那些在开放获取子集中的文章。当我们使用PMCID列表而不是查询时,只考虑开放获取子集中的文章。
如果我们使用查询,我们不需要使用--pmcids_file
选项,但可以使用--query
或--query_file
。其余的工作方式相同,本指南的其余部分依赖于使用查询的示例。
我们首先必须定义我们的查询,PubMed Central将使用该查询搜索文章。它可以很简单,例如fMRI
,或者更具体,例如fMRI[Abstract] AND (2000[PubDate] : 2022[PubDate])
。您可以使用PMC高级搜索界面构建查询。有关更多信息,请参阅E-Utilities帮助。一些示例在pubget
的git存储库中提供,在docs/example_queries
中。
查询可以通过命令行上的字符串-q
或--query
传递,或者通过传递包含查询的文本文件的路径-f
或--query_file
传递。
如果我们有NCBI API密钥(有关详细信息,请参阅E-utilities文档),我们可以通过NCBI_API_KEY
环境变量或通过命令行参数--api_key
提供(后者具有更高的优先级)。
我们还必须指定所有pubget
数据的存储目录。它可以作为命令行参数提供(如下例所示),或者通过导出PUBGET_DATA_DIR
环境变量。将为每个不同的查询创建子目录。以下假设我们将数据存储在一个名为pubget_data
的目录中。
因此,我们可以通过运行以下命令下载2019年发表的所有包含“fMRI”标题的文章:
pubget download -q "fMRI[Title] AND (2019[PubDate] : 2019[PubDate])" pubget_data
注意:将查询写入文件而不是作为参数传递对于复杂的查询更为方便,例如包含空格、换行或引号的查询。通过将其存储在文件中,我们不需要担心在shell中被解释的字符的引号或转义。在这种情况下,我们将查询存储在文件中,例如query.txt
。
fMRI[Title] AND (2019[PubDate] : 2019[PubDate])
然后运行
pubget download -f query.txt pubget_data
运行此命令后,我们的数据目录内容如下
· pubget_data
└── query_3c0556e22a59e7d200f00ac8219dfd6c
├── articlesets
│ ├── articleset_00000.xml
│ └── info.json
└── query.txt
pubget
为该查询创建了一个目录,query_3c0556e22a59e7d200f00ac8219dfd6c
—— 在以下内容中我们将称之为“查询目录”。其名称包含查询(或PMCID列表)的md5校验和,这对于pubget
在再次运行相同的查询时重用相同的目录很有用,但对于我们人类来说并不是非常有帮助。因此,我们可以使用--alias
命令行参数为该查询提供一个别名,pubget
将为我们创建一个符号链接。例如,如果我们运行上面添加了选项--alias "fMRI-2019"
的查询,我们的pubget_data
目录将如下所示:
· pubget_data
├── fMRI-2019 -> query_3c0556e22a59e7d200f00ac8219dd6c
└── query_3c0556e22a59e7d200f00ac8219dd6c
如果我们使用了PMCID列表而不是查询,目录名称将以pmcidList_
开头,而不是以query_
开头。
如果使用了查询,它将存储在query.txt
中,如果使用了PMCIDs列表,则在查询目录中的requested_pmcids.txt
中。
在查询目录内部,批量下载的结果存储在articlesets
子目录中。文章本身以XML文件的形式捆绑,每个文件最多包含500篇文章,称为articleset_*.xml
。这里只有一个,因为搜索返回的文章少于500篇。
有关下载的一些信息存储在info.json
中。特别是,is_complete
指示是否已下载所有匹配搜索的文章。如果下载中断,某些批次的下载失败,或者使用--n_docs
参数限制了结果的数量,则is_complete
将为false
,并且程序的退出状态将为1。如果下载不完整,您可能需要在进行下一步之前重新运行命令。
如果我们再次运行相同的查询,仅下载缺失的批次。如果我们想强制重新运行搜索并下载所需的所有数据,则需要删除articlesets
目录。
步骤2:从批量下载中提取文章
此步骤由pubget extract_articles
命令执行。
一旦下载完成,我们将提取文章并将每个文章存储在单独的目录中。为此,我们将步骤1中由pubget download
命令创建的articlesets
目录传递给命令。
pubget extract_articles pubget_data/query_3c0556e22a59e7d200f00ac8219dfd6c/articlesets
这将在查询目录中创建一个articles
子目录,包含文章。为了避免在有很多文章的情况下在一个目录中有大量文件,这可能在某些文件系统中引起问题,文章被分散到许多子目录中。这些子目录的名称从000
到fff
不等,一个文章将被放在匹配其pmcid
的md5哈希的前3个十六进制数字的子目录中。
我们的数据目录现在看起来像这样(为了简洁省略了很多文章)
· pubget_data
└── query_3c0556e22a59e7d200f00ac8219dfd6c
├── articles
│ ├── 019
│ │ └── pmcid_6759467
│ │ ├── article.xml
│ │ └── tables
│ │ └── tables.xml
│ ├── 01f
│ │ └── pmcid_6781806
│ │ ├── article.xml
│ │ └── tables
│ │ ├── table_000.csv
│ │ ├── table_000_info.json
│ │ ├── table_001.csv
│ │ ├── table_001_info.json
│ │ └── tables.xml
│ ├── ...
│ └── info.json
└── articlesets
请注意,如articles/01f
之类的子目录可以包含一个或多个文章,尽管这里显示的示例中只包含一个。
每个文章目录,如articles/01f/pmcid_6781806
,包含以下内容:
article.xml
:包含完整文章的原始格式的XML文件。- 一个
tables
子目录,包含:tables.xml
:文章的所有表格,每个表格以两种格式提供:原始版本和转换为使用DocBook样式的XHTML。- 对于每个表格,都会生成一个包含提取数据的CSV文件和一个JSON文件,该文件提供表格标签、ID、标题以及
n_header_rows
的信息,即CSV文件开头应视为表头的行数。
如果下载和文章提取成功运行,并且我们再次运行相同的查询,则文章提取将被跳过。如果我们想强制重新运行文章提取,我们需要删除articles
目录(或其中包含的info.json
文件)。
步骤3:从文章中提取数据
此步骤由pubget extract_data
命令执行。
它创建另一个目录,其中包含CSV文件,包含从所有文章中提取的文本、元数据和坐标。
如果我们使用--articles_with_coords_only
选项,只有pubget
找到立体坐标的文章才会被保留。结果目录的名称将反映这一选择。
我们将前一步由pubget extract_articles
创建的articles
目录的路径传递给pubget extract_data
命令。
pubget extract_data --articles_with_coords_only pubget_data/query_3c0556e22a59e7d200f00ac8219dfd6c/articles/
我们的数据目录现在包含(省略之前步骤的内容)
· pubget_data
└── query_3c0556e22a59e7d200f00ac8219dfd6c
├── articles
├── articlesets
└── subset_articlesWithCoords_extractedData
├── authors.csv
├── coordinates.csv
├── coordinate_space.csv
├── info.json
├── links.csv
├── neurovault_collections.csv
├── neurovault_images.csv
├── metadata.csv
└── text.csv
如果我们没有使用--articles_with_coords_only
,新的子目录将被命名为subset_allArticles_extractedData
。
metadata.csv
包含每篇文章的一行,其中包含一些元数据:pmcid
(PubMed中央ID)、pmid
(PubMed ID)、doi
、title
、journal
、publication_year
和license
。注意,某些值可能缺失(例如,并非所有文章都有pmid
或doi
)。authors.csv
包含每篇文章的每位作者的一行。字段包括pmcid
、surname
和given-names
。text.csv
包含每篇文章的一行。第一字段是pmcid
,其他字段是title
、keywords
、abstract
和body
,其中包含从这些文章部分提取的文本。links.csv
包含文章中找到的外部链接。字段包括pmcid
、ext-link-type
(链接类型,例如“uri”、“doi”)和href
(通常是URL)。neurovault_collections.csv
和neurovault_images.csv
:从文章链接中提取的NeuroVault集合和图像ID(如果有)。coordinates.csv
包含每个在文章中找到的(x, y, z)
立体坐标的一行。其字段是文章的pmcid
、坐标来源的表标签和ID以及x
、y
和z
。coordinate_space.csv
有字段pmcid
和coordinate_space
。它包含一个猜测,即基于从neurosynth推导出的启发式算法,立体坐标空间坐标是如何报告的。空间的可能值是neurosynth
使用的术语:“MNI”、“TAL”(Talairach空间)和“UNKNOWN”。
不同的文件可以根据pmcid
字段进行连接。
如果所有步骤直到数据提取都成功运行,并且我们再次运行相同的查询,则数据提取将被跳过。如果我们想强制重新运行数据提取,我们需要删除相应的目录(或其中包含的info.json
文件)。
可选步骤:提取新的词汇表
此步骤由pubget extract_vocabulary
命令执行。当运行完整流程时,此步骤是可选的:必须使用--extract_vocabulary
选项才能执行。
它构建一个词汇表,包含下载文本中出现的所有单词和2-gram(两个单词的组合)及其文档频率(一个术语出现在文档中的比例)。
pubget extract_vocabulary pubget_data/query_3c0556e22a59e7d200f00ac8219dfd6c/subset_articlesWithCoords_extractedData
词汇表存储在一个新的目录中的csv文件中。没有标题,两列是术语及其文档频率。
· pubget_data
└── query_3c0556e22a59e7d200f00ac8219dfd6c
├── articles
├── articlesets
├── subset_articlesWithCoords_extractedData
└── subset_articlesWithCoords_extractedVocabulary
├── info.json
└── vocabulary.csv
当运行整个流程(pubget run
)时,如果我们使用--extract_vocabulary
选项,并且没有为--vocabulary_file
提供显式值,那么将使用新提取的词汇表代替默认的neuroquery
,用于计算TFIDF特征(见下一步)。
可选步骤:向量化(计算TFIDF特征)
此步骤由pubget vectorize
命令执行。在运行完整流程时,此步骤是可选的:我们必须使用--vectorize_text
选项才能执行。然而,如果请求后续的任何依赖TFIDF特征(NeuroQuery、NeuroSynth或NiMARE步骤,见下文)的步骤,则此步骤总是运行,且忽略--vectorize_text
。每当使用--vocabulary_file
选项时,也会运行此步骤。
一些大规模元分析方法,如NeuroSynth和NeuroQuery,依赖于TFIDF特征来表示文章文本。因此,在我们可以应用这些方法之前,最后一个步骤是从前一步骤中获取的文本中提取TFIDF特征。
TFIDF特征依赖于一个预定义的词汇表(术语或短语的集合)。特征向量的每个维度都对应于词汇表中的一个术语,并代表该术语在编码文本中的重要性。这种重要性是词频(术语在文本中出现的次数除以文本长度)的增函数,是文档频率(术语在整个语料库或数据集中出现的总次数)的减函数。
因此,为了提取TFIDF特征,我们必须选择一个词汇表。
- 默认情况下,
pubget
将下载并使用neuroquery.org使用的词汇表。 - 如果我们使用
--extract_vocabulary
选项,将从下载的文本中创建一个新的词汇表,并用于计算TFIDF特征(见下文“提取新词汇”)。 - 如果我们想使用不同的词汇表,可以使用
--vocabulary_file
选项指定它。此文件将被解析为没有标题的CSV文件,其第一列包含术语。其他列被忽略。
我们还向pubget vectorize
传递包含要向量化文本的目录,该目录由步骤3中的pubget extract_data
创建(这里我们使用默认词汇表)
pubget vectorize pubget_data/query_3c0556e22a59e7d200f00ac8219dfd6c/subset_articlesWithCoords_extractedData/
这会创建一个新的目录,其名称反映数据源(是否保留所有文章或仅保留带坐标的文章)和所选词汇表(e6f7a7e9c6ebc4fb81118ccabfee8bd7
是词汇表文件内容的md5校验和,与词汇映射文件的内容连接,见下文“词汇映射”)
· pubget_data
└── query_3c0556e22a59e7d200f00ac8219dfd6c
├── articles
├── articlesets
├── subset_articlesWithCoords_extractedData
└── subset_articlesWithCoords-voc_e6f7a7e9c6ebc4fb81118ccabfee8bd7_vectorizedText
├── abstract_counts.npz
├── abstract_tfidf.npz
├── body_counts.npz
├── body_tfidf.npz
├── feature_names.csv
├── info.json
├── keywords_counts.npz
├── keywords_tfidf.npz
├── merged_tfidf.npz
├── pmcid.txt
├── title_counts.npz
├── title_tfidf.npz
├── vocabulary.csv
└── vocabulary.csv_voc_mapping_identity.json
提取的特征存储在.npz
文件中,可以用例如scipy.sparse.load_npz
来读取。
这些文件包含形状为(n_docs, n_features)
的矩阵,其中n_docs
是文档数量,n_features
是词汇表中的术语数量。与每行对应的pmcid
可以在pmcid.txt
中找到,与每列对应的术语可以在feature_names.csv
的第一列中找到。
feature_names.csv
没有标题;第一列包含术语,第二列包含它们的文档频率。
对于每篇文章部分(“标题”、“关键词”、“摘要”和“正文”),我们得到counts
,它包含原始计数(每个单词在该部分中出现的次数),和tfidf
,它包含TFIDF特征(计数除以文章长度和对数文档频率)。此外,merged_tfidf
包含跨所有文章部分的平均TFIDF。
如果所有直到向量化步骤都成功运行,并且我们再次运行相同的查询,则会跳过向量化。如果我们想强制重新运行向量化,我们需要删除相应的目录(或包含的 info.json
文件)。
词汇映射:合并同义词
可以指示分词器(从文本中提取单词)合并一些具有相同含义但拼写不同的术语对,例如“brainstem”和“brain stem”。
这是通过包含形式为 {term: replacement}
的映射的 JSON 文件来完成的。例如,如果它包含 {"brain stem": "brainstem"}
,则“brain stem”将从词汇中删除,并且“brain stem”的所有出现都将被计算为“brainstem”的出现。为了被 pubget
找到,这个词汇映射文件必须位于词汇文件相同的目录中,并且其名称必须是词汇文件名称后附加 _voc_mapping_identity.json
:例如 vocabulary.csv
,vocabulary.csv_voc_mapping_identity.json
。
因此,当提供词汇映射时,通过删除冗余单词创建了一个更短的词汇。由 pubget
计算的 TFIDF 和单词计数对应于更短的词汇,它与文档频率一起存储在 feature_names.csv
中。
vocabulary.csv
包含原始(完整、更长的)词汇的文档频率。vocabulary.csv_voc_mapping_identity.json
文件总是由 pubget
创建,但如果未使用词汇映射,则该文件包含一个空映射({}
),并且 vocabulary.csv
和 feature_names.csv
相同。
词汇映射主要用于 neuroquery
包及其分词管道,您可以安全地忽略此信息 - 只需记住提供 TFIDF 特征 对应的术语的文件是 feature_names.csv
。
可选步骤:拟合 NeuroQuery 编码模型
此步骤由 pubget fit_neuroquery
命令执行。在运行完整管道时,此步骤是可选的:我们必须使用 --fit_neuroquery
选项来执行它。
在此步骤中,一旦从下载的文章中提取了 TFIDF 特征和坐标,就使用它们来训练一个 NeuroQuery 编码模型——与在 neuroquery.org 中公开的模型相同类型的模型。有关此模型的详细信息,请参阅 NeuroQuery 论文 和 neuroquery 包 的文档。
注意:为了使此模型给出良好的结果,需要一个大型数据集,理想情况下接近 10,000 篇文章(带坐标)。
我们将通过 pubget vectorize
创建的 _vectorizedText
目录传递
pubget fit_neuroquery pubget_data/query_3c0556e22a59e7d200f00ac8219dfd6c/subset_articlesWithCoords-voc_e6f7a7e9c6ebc4fb81118ccabfee8bd7_vectorizedText
这创建了一个以 _neuroqueryModel
结尾的目录名
· pubget_data
└── query_3c0556e22a59e7d200f00ac8219dfd6c
├── articles
├── articlesets
├── subset_articlesWithCoords_extractedData
├── subset_articlesWithCoords-voc_e6f7a7e9c6ebc4fb81118ccabfee8bd7_neuroqueryModel
│ ├── app.py
│ ├── info.json
│ ├── neuroquery_model
│ │ ├── corpus_metadata.csv
│ │ ├── corpus_tfidf.npz
│ │ ├── mask_img.nii.gz
│ │ ├── regression
│ │ │ ├── coef.npy
│ │ │ ├── intercept.npy
│ │ │ ├── M.npy
│ │ │ ├── original_n_features.npy
│ │ │ ├── residual_var.npy
│ │ │ └── selected_features.npy
│ │ ├── smoothing
│ │ │ ├── smoothing_weight.npy
│ │ │ └── V.npy
│ │ ├── vocabulary.csv
│ │ └── vocabulary.csv_voc_mapping_identity.json
│ ├── README.md
│ └── requirements.txt
└── subset_articlesWithCoords-voc_e6f7a7e9c6ebc4fb81118ccabfee8bd7_vectorizedText
您不需要关注 neuroquery_model
子目录的内容,这是 neuroquery
包使用的数据。只需知道它可以用来使用以下内容初始化一个 neuroquery.NeuroQueryModel
from neuroquery import NeuroQueryModel
model = NeuroQueryModel.from_data_dir("neuroquery_model")
neuroquery
文档提供了有关如何使用此模型的信息和示例。
在交互式网页中可视化新训练的模型
可以通过一个小型网络(Flask)应用程序与模型交互。在 [...]
__neuroqueryModel
目录内,只需运行 pip install -r requirements.txt
来安装 flask
、nilearn
和 neuroquery
。然后运行 flask run
并将您的网络浏览器指向 https://localhost:5000
:您可以使用我们刚刚下载的数据构建的本地、简化的 neuroquery.org 版本进行操作。
可选步骤:运行 NeuroSynth 元分析
此步骤由 pubget fit_neurosynth
命令执行。在运行完整管道时,此步骤是可选的:我们必须使用 --fit_neurosynth
选项来执行它。
在这个步骤中,一旦从下载的文章中提取了TFIDF特征和坐标,它们就被用来使用NeuroSynth的“关联测试”方法进行元分析:对体素激活和术语出现之间的独立性进行卡方检验。请参阅NeuroSynth论文和neurosynth.org,以及neurosynth和NiMARE的文档页面以获取更多信息。
我们将通过 pubget vectorize
创建的 _vectorizedText
目录传递
pubget fit_neurosynth pubget_data/query_3c0556e22a59e7d200f00ac8219dfd6c/subset_articlesWithCoords-voc_e6f7a7e9c6ebc4fb81118ccabfee8bd7_vectorizedText
这将创建一个以_neurosynthResults
结尾的目录。
· pubget_data
└── query_3c0556e22a59e7d200f00ac8219dfd6c
├── articles
├── articlesets
├── subset_articlesWithCoords_extractedData
├── subset_articlesWithCoords-voc_e6f7a7e9c6ebc4fb81118ccabfee8bd7_neurosynthResults
│ ├── app.py
│ ├── info.json
│ ├── metadata.csv
│ ├── neurosynth_maps
│ │ ├── aberrant.nii.gz
│ │ ├── abilities.nii.gz
│ │ ├── ability.nii.gz
│ │ └── ...
│ ├── README.md
│ ├── requirements.txt
│ ├── terms.csv
│ └── tfidf.npz
└── subset_articlesWithCoords-voc_e6f7a7e9c6ebc4fb81118ccabfee8bd7_vectorizedText
词汇表中所有术语的元分析图可以在neurosynth_maps
子目录中找到。
在交互式网页中可视化元分析图
通过一个小型网络(Flask)应用可以轻松与NeuroSynth地图进行交互。在[...]_neurosynthResults
目录内部,只需运行pip install -r requirements.txt
来安装flask
和其他依赖项。然后运行flask run
并将您的网络浏览器指向https://localhost:5000
:您可以搜索一个术语并查看相应的脑图和提及该术语的文档。
可选步骤:使用labelbuddy
准备文章进行注释
此步骤由pubget extract_labelbuddy_data
命令执行。当运行完整流程时,此步骤是可选的:我们必须使用--labelbuddy
或--labelbuddy_batch_size
选项才能执行。
它准备了用于与labelbuddy注释的数据提取文章。
我们传递由pubget extract_data
创建的_extractedData
目录
pubget extract_labelbuddy_data pubget_data/query_3c0556e22a59e7d200f00ac8219dfd6c/subset_articlesWithCoords_extractedData
这将在包含批次的文档的JSONL格式(在这种情况下有一个批次)的目录中创建一个以labelbuddyData
结尾的目录
· pubget_data
└── query_3c0556e22a59e7d200f00ac8219dfd6c
├── articles
├── articlesets
├── subset_articlesWithCoords_extractedData
├── subset_articlesWithCoords_labelbuddyData
│ ├── batch_info.csv
│ ├── documents_00001.jsonl
│ └── info.json
└── subset_articlesWithCoords-voc_e6f7a7e9c6ebc4fb81118ccabfee8bd7_vectorizedText
可以使用GUI或以下方式将文档导入到labelbuddy
labelbuddy mydb.labelbuddy --import-docs documents_00001.jsonl
有关详细信息,请参阅labelbuddy文档
CSV文件batch_info.csv
提供了每个文章在.jsonl
文件中的位置:其列是pmcid
,file_name
(包含该文章的.jsonl
文件的名称)和line
(包含该文章的行号,第一行是0)。
可选步骤:创建NiMARE数据集
此步骤由pubget extract_nimare_data
命令执行。当运行完整流程时,此步骤是可选的:我们必须使用--nimare
选项才能执行。
它为提取的数据创建一个JSON格式的NiMARE数据集。有关详细信息,请参阅NiMARE文档。
我们将通过 pubget vectorize
创建的 _vectorizedText
目录传递
pubget extract_nimare_data pubget_data/query_3c0556e22a59e7d200f00ac8219dfd6c/subset_articlesWithCoords-voc_e6f7a7e9c6ebc4fb81118ccabfee8bd7_vectorizedText
结果目录包含一个nimare_dataset.json
文件,可用于初始化nimare.Dataset
。
· pubget_data
└── query_3c0556e22a59e7d200f00ac8219dfd6c
├── articles
├── articlesets
├── subset_articlesWithCoords_extractedData
├── subset_articlesWithCoords-voc_e6f7a7e9c6ebc4fb81118ccabfee8bd7_nimareDataset
│ ├── info.json
│ └── nimare_dataset.json
└── subset_articlesWithCoords-voc_e6f7a7e9c6ebc4fb81118ccabfee8bd7_vectorizedText
使用此选项需要安装NiMARE,它不是默认与pubget
一起安装的。要使用此选项,请使用以下命令单独安装NiMARE
pip install nimare
或使用以下命令安装pubget
pip install "pubget[nimare]"
完整流程
我们可以通过使用pubget run
命令来在一个命令中运行所有步骤。
上述完整程序可以通过执行以下命令来运行
pubget run -q "fMRI[Title] AND (2019[PubDate] : 2019[PubDate])" \
--articles_with_coords_only \
pubget_data
(输出目录pubget_data
也可以通过导出PUBGET_DATA_DIR
环境变量而不是在命令行上传递来提供。)
如果我们还想要应用可选步骤
pubget run -q "fMRI[Title] AND (2019[PubDate] : 2019[PubDate])" \
--articles_with_coords_only \
--fit_neuroquery \
--labelbuddy \
--nimare \
pubget_data
(请记住,--nimare
需要安装NiMARE)。
在这里,也跳过了已经完成的步骤;如果我们想要强制再次运行这些步骤,则需要删除相应的目录。
有关所有选项的描述,请参阅pubget run --help
日志记录
默认情况下,pubget
命令通过写入标准流来报告其进度。此外,如果提供了--log_dir
命令行参数,或者定义了PUBGET_LOG_DIR
环境变量(命令行参数的优先级更高),它们还可以写入日志文件。如果指定了此日志目录,则会创建一个带时间戳的新日志文件,并将所有输出都写入其中。
编写插件
可以编写插件并定义入口点,以便在运行pubget
时自动执行功能。
入口点的名称应为pubget.plugin_actions
。它必须是一个不接受任何参数并返回包含键pipeline_steps
和commands
的字典的函数。相应的值必须是处理步骤对象的列表,这些对象必须分别实现pubget.PipelineStep
和pubget.Command
定义的接口(它们的类型不需要从这些类继承)。
在pipeline_steps
中的所有步骤将在使用pubget run
时运行。在standalone_steps
中的所有步骤将被添加为额外的pubget命令;例如,如果独立步骤的name
为my_plugin
,则将可用pubget my_plugin
命令。
可以在pubget
git仓库中的docs/example_plugin
找到可用的模板插件示例,以及更多详细信息。
贡献
欢迎反馈和贡献。开发在pubget GitHub仓库进行。要从您克隆pubget
的目录中安装开发所需的依赖项,请运行
pip install -e ".[dev]"
可以使用make test_all
运行测试,或使用make test_coverage
报告测试覆盖率。可以使用make doc
生成文档。make run_full_pipeline
将运行完整的pubget
管道,返回一个具有现实结果数量(fMRI[title]
)的查询。
Python API
pubget
主要被设计为命令行工具。然而,它也是一个Python包,其功能可以在Python程序中使用。Python API紧密反映了上面描述的命令行程序。
Python API的描述在pubget
网站上。
pubget
发布
0.0.8
- NeuroVault图像和集合ID被提取并存储在
extractedData
目录中。 - 当请求失败时,请求和响应(如果有的话)将被转储在
articlesets/failed_requests_dumps/
目录中,以便更容易地诊断Entrez的问题。 - 下载步骤现在对由efetch.fcgi发送的格式不正确的XML文件更健壮。
- 已添加
--alias
命令行选项,用于创建一个具有可读名称的符号链接到查询的输出目录。
0.0.7
query.txt
和requested_pmcids.txt
已从articlesets/
子目录移动到查询或pmcid列表目录的根目录。labelbuddy
的输出现在包含一个提供每个pmcid
的.jsonl
文件和行位置的batch_info.csv
文件。- 提供NCBI API密钥的环境变量已从
PUBGET_API_KEY
重命名为NCBI_API_KEY
。 - 当使用
--pmcids_file
选项下载PMCIDs列表时,现在将列表过滤以仅保留位于PMC开放获取子集中的文章。
0.0.6
- 文本向量化(TFIDF)步骤现在是可选的。它在使用选项
--vectorize_text
或--vocabulary_file
时运行,或者在后续需要TFIDF(neurosynth,neuroquery,nimare)的步骤请求时运行。
0.0.5
nqdc
已重命名为pubget
;所有符号、路径、环境变量等均已相应调整。
nqdc
版本发布
pubget
之前被称为nqdc
。现在已经弃用了nqdc
包,不应再使用。
0.0.3
- 现在下载文章批量下载功能更健壮,因为响应内容将被检查,如果请求失败,
nqdc
将重试最多4次。 - 查询输出目录的命名已从query-更改为query_,以遵循类似bids的约定。
- 现在可以下载显式的PMCID列表,而不是使用PMC查询来选择要下载的文章。请参阅
--pmcids_file
参数或文档的“用法/步骤1”部分。 query_dir/articles
中的文章现在每个都存储在单独的子目录中;该子目录还包含一个包含从文章中提取的表格的tables
子目录。- 现在在
extract_data
步骤中,外部链接将从文章中提取并存储在links.csv
中。
0.0.2
-
命令行界面有所变化;现在所有操作都在一个命令
nqdc
中完成;nqdc_full_pipeline
变为nqdc run
。 -
添加了几个命令/步骤
- 创建NiMARE数据集。
- 使用labelbuddy准备注释文档。
- 提取新词汇表。
- 拟合神经查询。
- 运行神经合成分析。
- 创建插件的可能性。
-
并行化数据提取;文本和坐标提取的几个改进
0.0.1
第一个版本;下载PMC数据、提取文章、提取数据和文本向量的实验性API。
MIT许可证
版权(c)2022 Jérôme Dockès
特此授予任何获得此软件和相关文档副本(“软件”)的人,免费使用该软件的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许将软件提供给他人使用,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和非侵权性保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是基于合同、侵权或其他方式,无论是源于、因之或与此软件或软件的使用或其他交易有关。
项目详细信息
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。