下载神经影像文章并提取文本和立体定位坐标。
项目描述
NeuroQuery数据收集
nqdc
是一个命令行工具,用于收集用于大规模坐标神经影像荟萃分析的数据。它公开了一些用于创建neuroquery数据集的机制,该数据集为neuroquery.org提供动力。
nqdc
从PubMed Central下载全文文章并提取其文本和立体定位坐标。它还计算提取文本的TFIDF特征。
除了命令行界面外,nqdc
的功能也通过其Python API公开。
安装
您可以通过运行以下命令来安装nqdc
:
pip install nqdc
这将安装nqdc
Python包以及nqdc
命令。
快速入门
一旦安装了nqdc
,我们就可以下载和处理神经影像文章,以便我们稍后可以使用它们进行荟萃分析。
nqdc run ./nqdc_data -q "fMRI[title]"
请参阅nqdc run --help
以了解此命令的描述。特别是,--n_jobs
选项允许并行运行一些步骤。
用法
创建数据集分为四个步骤
- 从PMC API批量下载文章。
- 从批量下载中提取文章
- 从文章中提取文本、立体定位坐标和元数据,并将这些信息存储在CSV文件中。
- 将文本矢量化:将其转换为TFIDF特征向量。
每个步骤都将其输出存储在单独的目录中。通常,您可以通过调用nqdc run
命令来运行整个过程。然而,也提供了单独运行每个步骤的命令。下面,我们将描述每个步骤及其输出。使用nqdc -h
查看所有可用命令,使用nqdc run -h
查看主命令的所有选项。
所有由nqdc
下载的文章均来自PubMed Central,因此以其PubMed Central ID(pmcid
)标识。请注意,这与PubMed ID(pmid
)不同。并非所有PMC中的文章都有pmid
。
步骤 1:从PMC下载文章
此步骤由nqdc download
命令执行。下载文章可以通过两种方式选择:使用查询搜索PMC数据库,或提供文章PMCID的显式列表。要使用PMCID列表,我们必须传递包含ID的文件的路径作为--pmcids_file
参数。每行必须包含一个ID,例如
8217889
7518235
7500239
7287136
7395771
7154153
注意,这些必须是PubMedCentral ID,不是PubMed ID。此外,一些文章可以在PubMedCentral网站上查看,但不在开放获取子集中。这些文章的出版商禁止以XML形式下载其全文。因此,对于此类文章,只能提供摘要和元数据。当我们使用PMCID列表而不是查询时,仅考虑开放获取子集中的文章。
如果我们使用查询,我们不需要使用--pmcids_file
选项,而是使用--query
或--query_file
。其余部分与之前相同,本文档的其余部分依赖于使用查询的示例。
我们首先必须定义我们的查询,PubMed Central将根据此查询搜索文章。它可以很简单,如fMRI
,也可以更具体,如fMRI[Abstract] AND (2000[PubDate] : 2022[PubDate])
。您可以使用PMC高级搜索界面构建查询。更多信息请参阅E-Utilities帮助。一些示例在nqdc
git存储库中的docs/example_queries
提供。
查询可以通过命令行上的字符串-q
或--query
传递,或者通过传递包含查询的文本文件的路径-f
或--query_file
传递。
如果我们有Entrez API密钥(详情见E-utilities文档),我们可以通过NQDC_API_KEY
环境变量或通过命令行参数--api_key
提供它(后者的优先级更高)。
我们还必须指定所有nqdc
数据将存储的目录。它可以作为命令行参数提供(如下面的示例所示),或者通过导出NQDC_DATA_DIR
环境变量。将为每个不同的查询创建子目录。以下假设我们将数据存储在名为nqdc_data
的目录中。
因此,我们可以通过运行以下命令下载所有标题中包含“fMRI”并发表于2019年的文章
nqdc download -q "fMRI[Title] AND (2019[PubDate] : 2019[PubDate])" nqdc_data
注意:将查询写入文件而不是作为参数传递对于复杂查询更方便,例如包含空格、换行符或引号的查询。通过将其存储在文件中,我们不需要注意转义由shell解释的字符。在这种情况下,我们将查询存储在一个文件中,例如query.txt
fMRI[Title] AND (2019[PubDate] : 2019[PubDate])
并运行
nqdc download -f query.txt nqdc_data
运行此命令后,这是我们数据目录的内容
· nqdc_data
└── query_3c0556e22a59e7d200f00ac8219dfd6c
└── articlesets
├── articleset_00000.xml
└── info.json
nqdc
为此次查询创建了一个子目录。如果为同一查询再次运行下载,将重用相同的子目录(3c0556e22a59e7d200f00ac8219dfd6c
是查询的 md5 校验和)。如果我们使用 PMCID 列表而不是查询,子目录名称将以前缀 pmcidList_
开头,而不是 query_
。
在查询目录内,批量下载的结果存储在 articlesets
目录中。文章本身存储在 XML 文件中,每个文件最多包含 500 篇文章,文件名为 articleset_*.xml
。这里只有一个,因为搜索结果少于 500 篇文章。
有关下载的一些信息存储在 info.json
中。特别是,is_complete
指示是否已下载所有匹配搜索的文章。如果下载中断,某些批次的下载失败,或者通过使用 --n_docs
参数限制了结果数量,则 is_complete
将为 false
,程序的退出状态将为 1。如果下载不完整,在继续下一步之前可能需要重新运行命令。
如果使用查询,则存储在 articlesets/query.txt
中,如果使用 PMCID 列表,则存储在 articlesets/requested_pmcids.txt
中。
如果我们再次运行相同的查询,只下载缺失的批次。如果我们想强制重新运行搜索并下载整个数据,需要删除 articlesets
目录。
步骤 2:从批量下载中提取文章
此步骤由 nqdc extract_articles
命令执行。
一旦下载完成,我们将提取文章并将它们分别存储在单独的目录中。为此,我们将步骤 1 中由 nqdc download
命令创建的 articlesets
目录传递给命令。
nqdc extract_articles nqdc_data/query_3c0556e22a59e7d200f00ac8219dfd6c/articlesets
这将在查询目录中创建一个 articles
子目录,包含文章。为了避免在有很多文章时单个目录中有大量文件(在某些文件系统上可能存在问题),文章分散在多个子目录中。这些子目录的名称从 000
到 fff
,文章存储在与其 pmcid
的 md5 哈希的前 3 个十六进制数字匹配的子目录中。
我们的数据目录现在看起来像这样(为了简洁省略了许多文章)
· nqdc_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 文件和一个提供如表标签、id、标题和
n_header_rows
(CSV 中应视为表头的行数)等信息的 JSON 文件。
如果成功运行了下载和文章提取,并且再次运行相同的查询,将跳过文章提取。如果我们想强制重新运行文章提取,需要删除 articles
目录(或其中包含的 info.json
文件)。
步骤 3:从文章中提取数据
此步骤由 nqdc extract_data
命令执行。
它创建另一个目录,其中包含包含从所有文章中提取的文本、元数据和坐标的 CSV 文件。
如果我们使用 --articles_with_coords_only
选项,则仅保留 nqdc
找到立体坐标的文章。结果目录的名称将反映这一选择。
我们将步骤 1 中由 nqdc extract_articles
命令创建的 articles
目录的路径传递给 nqdc extract_data
命令。
nqdc extract_data --articles_with_coords_only nqdc_data/query_3c0556e22a59e7d200f00ac8219dfd6c/articles/
我们的数据目录现在包含(省略了前几步的内容)
· nqdc_data
└── query_3c0556e22a59e7d200f00ac8219dfd6c
├── articles
├── articlesets
└── subset_articlesWithCoords_extractedData
├── authors.csv
├── coordinates.csv
├── coordinate_space.csv
├── info.json
├── links.csv
├── metadata.csv
└── text.csv
如果我们没有使用--articles_with_coords_only
,新的子目录将被命名为subset_allArticles_extractedData
。
metadata.csv
包含每篇文章一行,其中包含一些元数据:pmcid
(PubMed Central 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)。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
文件)。
步骤4:向量化(计算TFIDF特征)
此步骤由nqdc vectorize
命令执行。
像neurosynth和neuroquery这样的某些大规模元分析方法依赖于TFIDF特征来表示文章的文本。因此,在我们可以应用这些方法之前,我们需要从我们在上一步中获得的文本中提取TFIDF特征的最后一步。
TFIDF特征依赖于一个预定义的词汇表(术语或短语集合)。特征向量的每个维度都对应于词汇表中的一个术语,并代表该术语在编码文本中的重要性。这种重要性是术语频率(术语在文本中出现的次数除以文本长度)的一个递增函数,并且是文档频率(术语在整个语料库或数据集中出现的总次数)的一个递减函数。
因此,要提取TFIDF特征,我们必须选择一个词汇表。
- 默认情况下,
nqdc
将下载并使用neuroquery.org使用的词汇表。 - 如果我们使用
--extract_vocabulary
选项,将创建一个新的词汇表,该词汇表从下载的文本中创建,并用于计算TFIDF特征(见下文“提取新词汇”)。 - 如果我们想使用不同的词汇表,我们可以使用
--vocabulary_file
选项指定它。该文件将被解析为没有标题的CSV文件,其第一列包含术语。其他列将被忽略。
我们还向nqdc vectorize
传递了我们想要向量化包含的文本的目录,该目录由步骤3中的nqdc extract_data
创建(这里我们使用默认词汇表)。
nqdc vectorize nqdc_data/query_3c0556e22a59e7d200f00ac8219dfd6c/subset_articlesWithCoords_extractedData/
这会创建一个新目录,其名称反映数据源(是否保留所有文章或仅保留带坐标的文章)和所选词汇(e6f7a7e9c6ebc4fb81118ccabfee8bd7
是词汇文件内容的 md5 校验和,与词汇映射文件的 md5 校验和连接,参见下文的“词汇映射”)。
· nqdc_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”的出现。为了被 nqdc
找到,这个词汇映射文件必须与词汇文件在同一目录中,并且其名称必须是词汇文件名称加上 _voc_mapping_identity.json
:例如 vocabulary.csv
,vocabulary.csv_voc_mapping_identity.json
。
因此,当提供词汇映射时,通过删除冗余单词创建一个较短的词汇表。由 nqdc
计算的 TFIDF 和词频对应于较短的词汇表,它与文档频率一起存储在 feature_names.csv
中。
vocabulary.csv
包含原始(完整、较长的)词汇的文档频率。总是由 nqdc
创建一个 vocabulary.csv_voc_mapping_identity.json
文件,但如果未使用词汇映射,该文件包含一个空映射({}
),并且 vocabulary.csv
和 feature_names.csv
是相同的。
词汇映射主要用于 neuroquery
包及其分词管道,您可以安全地忽略此信息 - 只需记住,提供 TFIDF 特征对应术语的文件是 feature_names.csv
。
可选步骤:提取新的词汇
此步骤由 nqdc extract_vocabulary
命令执行。在运行完整管道时,此步骤是可选的:我们必须使用 --extract_vocabulary
选项才能执行它。
它构建一个词汇表,其中包含下载的文本中出现的所有单词和 2-gram(两个单词的组合)以及它们的文档频率(术语出现在文档中的比例)。
nqdc extract_vocabulary nqdc_data/query_3c0556e22a59e7d200f00ac8219dfd6c/subset_articlesWithCoords_extractedData
词汇表存储在新的目录中的 csv 文件中。没有标题,两列分别是术语和它的文档频率。
· nqdc_data
└── query_3c0556e22a59e7d200f00ac8219dfd6c
├── articles
├── articlesets
├── subset_articlesWithCoords_extractedData
├── subset_articlesWithCoords_extractedVocabulary
│ ├── info.json
│ └── vocabulary.csv
└── subset_articlesWithCoords-voc_e6f7a7e9c6ebc4fb81118ccabfee8bd7_vectorizedText
在运行整个流程(nqdc run
)时,如果我们使用--extract_vocabulary
选项,并且没有为--vocabulary_file
提供明确的值,则会使用新提取的词汇表,而不是默认的neuroquery
词汇表来计算TFIDF特征。
可选步骤:拟合NeuroQuery编码模型
此步骤由nqdc fit_neuroquery
命令执行。当运行完整流程时,此步骤是可选的:我们必须使用--fit_neuroquery
选项才能执行。
在此步骤中,一旦从下载的文章中提取了TFIDF特征和坐标,就使用它们来训练NeuroQuery编码模型——与在neuroquery.org上公开的模型类型相同。有关此模型的详细信息,请参阅NeuroQuery论文和neuroquery包的文档。
注意:为了使此模型给出良好的结果,需要一个大型数据集,理想情况下接近10,000篇文章(带有坐标)。
我们传递由nqdc vectorize
创建的_vectorizedText
目录
nqdc fit_neuroquery nqdc_data/query_3c0556e22a59e7d200f00ac8219dfd6c/subset_articlesWithCoords-voc_e6f7a7e9c6ebc4fb81118ccabfee8bd7_vectorizedText
这会创建一个以_neuroqueryModel
结尾的目录
· nqdc_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
文档提供了有关如何使用此模型的信息和示例。
在交互式网页中可视化新训练的模型
通过一个小型Web(Flask)应用程序与模型交互很容易。在[...]_neuroqueryModel
目录内,只需运行pip install -r requirements.txt
来安装flask
、nilearn
和neuroquery
。然后运行flask run
并将您的网页浏览器指向https://localhost:5000
:您可以使用我们刚刚下载的数据构建的本地简化版neuroquery.org进行操作。
可选步骤:运行NeuroSynth元分析
此步骤由nqdc fit_neurosynth
命令执行。当运行完整流程时,此步骤是可选的:我们必须使用--fit_neurosynth
选项才能执行。
在此步骤中,一旦从下载的文章中提取了TFIDF特征和坐标,就使用它们来运行使用NeuroSynth的“关联测试”方法的元分析:对体素激活与术语出现之间的独立性进行卡方检验。请参阅NeuroSynth论文和neurosynth.org,以及neurosynth和NiMARE的文档页面以获取更多信息。
我们传递由nqdc vectorize
创建的_vectorizedText
目录
nqdc fit_neurosynth nqdc_data/query_3c0556e22a59e7d200f00ac8219dfd6c/subset_articlesWithCoords-voc_e6f7a7e9c6ebc4fb81118ccabfee8bd7_vectorizedText
这会创建一个以_neurosynthResults
结尾的目录
· nqdc_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
子目录中找到所有词汇的元分析图。
在交互式网页中可视化元分析图
通过一个小型Web(Flask)应用程序与NeuroSynth图交互很容易。在[...]_neurosynthResults
目录内,只需运行pip install -r requirements.txt
来安装flask
和其他依赖项。然后运行flask run
并将您的网页浏览器指向https://localhost:5000
:您可以通过搜索一个术语并查看相应的脑图和提及该术语的文档来进行操作。
可选步骤:使用labelbuddy
准备文章进行注释
此步骤由nqdc extract_labelbuddy_data
命令执行。当运行完整流程时,此步骤是可选的:我们必须使用--labelbuddy
或--labelbuddy_part_size
选项才能执行。
它准备了用于用labelbuddy进行注释的数据提取文章。
我们传递由nqdc extract_data
创建的_extractedData
目录
nqdc extract_labelbuddy_data nqdc_data/query_3c0556e22a59e7d200f00ac8219dfd6c/subset_articlesWithCoords_extractedData
这会创建一个以labelbuddyData
结尾的目录,其中包含JSONL格式的文档批次(在这种情况下有一个单一的批次)
· nqdc_data
└── query_3c0556e22a59e7d200f00ac8219dfd6c
├── articles
├── articlesets
├── subset_articlesWithCoords_extractedData
├── subset_articlesWithCoords_labelbuddyData
│ ├── documents_00001.jsonl
│ └── info.json
└── subset_articlesWithCoords-voc_e6f7a7e9c6ebc4fb81118ccabfee8bd7_vectorizedText
可以使用图形用户界面或以下方式将文档导入到labelbuddy
中
labelbuddy mydb.labelbuddy --import-docs documents_00001.jsonl
有关详细信息,请参阅labelbuddy文档。
可选步骤:创建NiMARE数据集
此步骤由nqdc extract_nimare_data
命令执行。当运行完整流程时,此步骤是可选的:我们必须使用--nimare
选项才能执行它。
它为提取的数据创建一个JSON格式的NiMARE数据集。有关详细信息,请参阅NiMARE 文档。
我们传递由nqdc vectorize
创建的_vectorizedText
目录
nqdc extract_nimare_data nqdc_data/query_3c0556e22a59e7d200f00ac8219dfd6c/subset_articlesWithCoords-voc_e6f7a7e9c6ebc4fb81118ccabfee8bd7_vectorizedText
生成的目录包含一个nimare_dataset.json
文件,该文件可用于初始化一个nimare.Dataset
。
· nqdc_data
└── query_3c0556e22a59e7d200f00ac8219dfd6c
├── articles
├── articlesets
├── subset_articlesWithCoords_extractedData
├── subset_articlesWithCoords-voc_e6f7a7e9c6ebc4fb81118ccabfee8bd7_nimareDataset
│ ├── info.json
│ └── nimare_dataset.json
└── subset_articlesWithCoords-voc_e6f7a7e9c6ebc4fb81118ccabfee8bd7_vectorizedText
使用此选项需要安装NiMARE,它不是默认与nqdc
一起安装的。要使用此选项,请单独使用以下命令安装NiMARE
pip install nimare
或使用以下命令安装nqdc
pip install "nqdc[nimare]"
完整流程
我们可以通过使用nqdc run
在一个命令中运行所有步骤。
上述完整流程可以通过执行以下命令来运行
nqdc run -q "fMRI[Title] AND (2019[PubDate] : 2019[PubDate])" \
--articles_with_coords_only \
nqdc_data
(输出目录nqdc_data
也可以通过导出NQDC_DATA_DIR
环境变量而不是通过命令行传递来提供。)
如果我们还想要应用可选步骤
nqdc run -q "fMRI[Title] AND (2019[PubDate] : 2019[PubDate])" \
--articles_with_coords_only \
--fit_neuroquery \
--labelbuddy \
--nimare \
nqdc_data
(请记住,--nimare
需要安装NiMARE)。
在这里,已完成的步骤也会被跳过;如果我们想强制重新运行这些步骤,我们需要删除相应的目录。
有关所有选项的描述,请参阅nqdc run --help
。
日志记录
默认情况下,nqdc
命令通过写入标准流来报告其进度。此外,如果提供--log_dir
命令行参数或定义NQDC_LOG_DIR
环境变量(命令行参数具有更高的优先级),它们还可以写入日志文件。如果指定了此日志目录,则创建一个新的带时间戳的日志文件,并将所有输出写入其中。
编写插件
可以编写插件并定义入口点,以便在运行nqdc
时自动执行功能。
入口点的名称应该是nqdc.plugin_actions
。它必须是一个不接受任何参数并返回字典的函数,该字典具有键pipeline_steps
和commands
。相应的值必须是处理步骤对象的列表,这些对象必须实现由nqdc.PipelineStep
和nqdc.Command
定义的接口(它们的类型不需要继承自这些类)。
pipeline_steps
中的所有步骤将在使用nqdc run
时运行。所有在standalone_steps
中的步骤都将添加为额外的nqdc命令;例如,如果独立步骤的name
是my_plugin
,则将可用nqdc my_plugin
命令。
在nqdc
git存储库中提供了一个可以作为模板使用的示例插件以及更多详细信息,位于docs/example_plugin
。
贡献
欢迎反馈和贡献。开发在nqdc GitHub存储库中进行。要从您克隆nqdc
的目录安装开发所需的依赖项,请运行
pip install -e ".[dev]"
可以使用make test_all
运行测试,或使用make test_coverage
来报告测试覆盖率。可以使用make doc
生成文档。make run_full_pipeline
在返回具有现实数量结果的查询(fMRI[title]
)上运行完整的nqdc
流程。
Python API
nqdc
主要用作命令行工具。然而,它也是一个 Python 包,其功能可以用于 Python 程序中。Python API 紧密反映了上述的命令行程序。
Python API 的描述可以在 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 进行注释的文档。
- 提取新词汇表。
- 拟合 neuroquery。
- 运行 neurosynth 分析。
- 创建插件的可能性。
-
并行化数据提取;文本和坐标提取的几个改进
0.0.1
第一个版本;下载 PMC 数据、提取文章、提取数据和向量化文本的尝试性 API。
MIT 许可证
版权所有 (c) 2022 Jérôme Dockès
在此,任何人获得此软件及其相关文档文件(“软件”)的副本(以下称为“软件”),免费允许其在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许向软件提供者提供软件的人员执行上述操作,前提是遵守以下条件:
上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和无侵权性保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任负责,无论该责任是基于合同、侵权或其他原因,无论该责任产生于、源于或与软件或软件的使用或其他方式有关。
项目详情
下载文件
下载适合您平台的应用程序文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。