:]
EDirect自动从系统获取用户的电子邮件地址,以便有人在失控脚本导致Entrez服务器出现问题时通知,但是如果需要其他联系地址(例如,系统管理员或软件开发人员)可以在管道或脚本的开头显式设置:
|
|
这样,如果脚本中的无限循环意外滥用NCBI资源,NCBI就会有关于联系人的信息。 (为方便起见,还可以在所有电子实用程序调用操作中设置首选电子邮件地址和软件工具名称。)
下面列出了EDirect功能的参数:
使用esearch在索引条款上开始新的Entrez搜索:
查询规范
|
|
文件订单
|
|
日期
|
|
按现场限制
|
|
拼写检查
|
|
杂项参数
|
|
elink函数查找相关文章或相关记录:
目标数据库
|
|
直接记录选择
|
|
高级控制
|
|
批量处理
|
|
杂项参数
|
|
使用efilter通过索引术语限制搜索或链接结果:
查询规范
|
|
文件订单
|
|
日期
|
|
按现场限制
|
|
拼写检查
|
|
出版过滤器
|
|
序列过滤器
|
|
基因过滤器
SNP过滤器
|
|
杂项参数
|
|
记录检索功能是efetch:
格式选择
|
|
直接记录选择
|
|
序列范围
|
|
基因范围
|
|
序列标志
|
|
杂
|
|
xtract函数用于处理XML数据:
处理标志
|
|
数据源
|
|
探索参数层次结构
|
|
勘探建筑
|
|
条件执行
|
|
字符串约束
|
|
数字约束
|
|
格式定制
|
|
元素选择
|
|
-element Constructs
|
|
特殊元素操作
|
|
数字处理
|
|
字符串处理
|
|
文字处理
|
|
序列处理
|
|
序列坐标
|
|
命令生成器
|
|
-insd参数顺序
|
|
杂
|
|
重新格式化
|
|
修改
|
|
验证
|
|
摘要
|
|
文档
|
|
einfo函数返回有关Entrez索引字段的信息:
数据库选择
|
|
数据摘要
|
|
EDirect提供了几个附加功能:
epost
|
|
eproxy
|
|
econtact
|
|
nquire
|
|
此外,-email和-tool在所有E-utilities调用函数中都可用于覆盖默认值,-http get将强制使用GET而不是POST,-alias将指定快捷键关键字和查询字符串或URL的文件sections和-help将打印每个函数的参数列表。
对于调试,-silent将禁止链接失败重试消息,-verbose将在每一步显示
每个数据库的EFetch -format和-mode值如下所示:
下面列出了几个数据库的ESearch -sort值:
ELink -cmd选项生成结果为LinkSet XML:
-cmd | Result |
---|---|
neighbor | Neighbors or links |
neighbor_score | Neighbors with computed similarity scores |
acheck | All links available |
ncheck | Existence of neighbors |
lcheck | Existence of external links (LinkOuts) |
llinks | Non-library LinkOut providers |
llinkslib | All LinkOut providers |
prlinks | Primary LinkOut provider,or URL for single UID with -mode ref |
EInfo数据
EInfo字段数据包含多个术语列表索引属性的状态标志:
|
|
下面介绍了几个有用的UNIX文本处理过滤器类,带有选定的参数:
按内容处理:
sort | Sorts lines of text |
---|---|
-f | Ignore case |
-n | Numeric comparison |
-r | Reverse result order |
-k | Field key (start,stop or first)
-u | Unique lines with identical keys
-b | Ignore leading blanks
-s | Stable sort
-t | Specify field separator
uniq | Removes repeated lines
-c | Count occurrences
-i | Ignore case
-f | Ignore first n fields
-s | Ignore first n characters
-d | Only output repeated lines
-u | Only output non-repeated lines
grep | Matches patterns using regular expressions
-i | Ignore case
-v | Invert search
-w | Search expression as a word
-x | Search expression as whole line
-e | Specify individual pattern
-c | Only count number of matches
-n | Print line numbers
常用表达:
|
|
修改内容:
|
|
格式内容:
列按内容宽度对齐列
|
|
expand将列对齐到指定位置
|
|
fold以特定宽度包裹线条
|
|
按位置筛选:
cut删除部分线条
|
|
head打印第一行
|
|
tail打印最后一行
|
|
杂:
wc计算单词,行或字符
|
|
xargs构造参数
|
|
文件压缩:
tar存档文件
|
|
gzip压缩文件
|
|
解压缩.zip存档
|
|
gzcat解压缩.gz归档和管道到stdout
目录和文件导航:
cd更改目录
|
|
ls列出文件名
|
|
pwd打印工作目录路径
通过键入“man”后跟命令名称,可以获得包含详细说明和示例的其他文档。
可以在终端会话中使用控制和转义序列来浏览命令历史记录并移动光标以编辑当前输入的命令:
命令历史:
Ctrl-n 下一个命令
Ctrl-p 上一个命令
向前移动光标:
Ctrl-e 到行尾
Ctrl-f 由一个字符组成
Esc-f 一个论点
向后移动光标:
Ctrl-a 到行首
Ctrl-b 一个字符
Esc-b 一个论点
删除:
Esc-Del以前的论点上一个角色
Ctrl-d 下一个字符
Ctrl-k 到行尾
Ctrl-u 整行
Ctrl-w 上一个单词
Esc-Del 以前的论点
Esc-d 下一个参数
自动完成:
Tab 选项卡完成目录或文件名
程序控制:
Ctrl-c 退出正在运行的程序
^x^y 运行最后一个命令将x替换为y
(注意,通过按住Control,按下另一个键并释放Control来键入控制序列,同时通过按Escape然后按另一个键来键入Escape序列。)
除了-first和-last命令之外,xtract还有其他元素变体,它们返回所选数据值的变换版本。它还有一些方法可以很容易地将提取的值包装在XML标记中,以便通过xtract进行进一步处理。
数字评估命令使用具有相同标签名称的一组数据。例如,-num将计算命名对象的数量(将-element“#Author”快捷方式转换为-num Author)。可以使用-sum添加XML对象中的整数值,并且可以使用-avg计算其算术平均值。选定内容中的字符数由-len返回(-element“%Title”实现为-len Title)。
文本和字符串命令适用于单个字符串值。使用-words将句子分隔为标点符号,或使用-upper将句子转换为大写。 -year命令返回数据中遇到的第一个四位数令牌,因此它可以使用整数Year或半结构化MedlineDate字符串正常工作。将-year应用于“PubDate/*”将检查所有内部对象的值,无论标记名称如何,并且是获取PubMed出版年份的一般解决方案。
通过运行xtract -help可以看到完整的元素变体集。
数据分析经常涉及文本或数字处理的几个连续步骤。例如,检查PubMed摘要随时间的增长需要隔离每个摘要的单个单词,计算每篇文章的单词,按年度过滤结果,然后计算每年的平均单词数。各个操作都受到xtract函数的支持,因此将中间值包装在XML中可以消除对单独脚本执行计算的需要。
对选定日记中发布的文章运行搜索查询,将结果限制为带有摘要的文章,获取单个PMID,以及从本地数据缓存中获取记录:
|
|
返回一个XML PubmedArticleSet,其中包含超过115,000个PubmedArticle记录。下一步将提取出版年份和文章摘要中的单个词。原始XML中的所需字段是:
|
|
将PubmedArticleSet管道化为提取命令的初始版本:
|
|
在单独的行上打印年份和每个单独的抽象单词:
|
|
自定义参数使得可以将中间值(例如,每个抽象的单个单词和每篇文章的单词计数)包装回XML格式,因此可以将它们发送到另一个xtract命令以进行下一个处理步骤。将PubmedArticleSet管道化为:
|
|
允许将提取的值写为结构化XML片段(显示为重新格式化以便于阅读):
|
|
-wrp参数是一个方便,它只设置XML对象名称,设置所有适当的自定义参数,如上所示:
|
|
使包装中间值变得容易。
然后将结果传送到下一步,使用-num计算每篇文章摘要中的单词数:
|
|
再次将结果包装为结构化XML:
|
|
使用“>countsByYear.xml”重定向输出会将结果保存在文件中,以用于所有后续处理。
xtract -select参数允许按数据值记录子集,例如发布年份。它充当“-if”语句,后跟条件语句,但没有 - 元素,因为它的目的是传递满足条件的所有记录的全部内容。
这比每年运行单独的esearch查询更方便,速度更快,并且可以查看未被Entrez索引的数据元素。它在下面的循环中用于将处理的查询结果限制为一年一次,将相关子集传递给第二个xtract命令:
|
|
将-avg应用于单词count以计算当前年度每篇文章的平均抽象单词数:
|
|
可以通过重定向到文件来保存此结果,也可以将其传送到:
|
|
将数据打印到终端,然后以图形格式显示结果。最后一步应该是:
|
|
删除中间文件。
Entrez Direct用户通常使用efetch获取所选数据记录,这会调用efetch.fcgi网络服务器。当需要几千条记录时,此解决方案很有效,但它不能扩展到更大的数据集,其中下载所需的时间成为限制因素。
作为替代方案,整个PubMed记录集可以通过文件传输协议获得,并且可以通过检索每日更新文件来保持最新。可以通过xtract对发布文件进行解压缩和管道传输以进行批量分析,但它们不提供对单个记录的随机访问。
计算机文件系统技术的最新进展现在允许将所有这些已发布的期刊文章引用重新打包为廉价的500千兆字节外部固态驱动器上的单个文件,使用文件夹层次结构来组织2800万个PubMed记录。此方法使用PMID中的数字对作为目录结构中的节点,从而提供对任何记录的直接和快速访问。例如,PMID 12345678将作为压缩的XML文件存储在/Archive/12/34/56/12345678.xml.gz中。
EDirect现在包含一个存档发布的脚本,可以完全自动化下载,更新,提取和存储过程。专用固态驱动器的路径将传递到命令行上的脚本:
|
|
它可以每天或每周重新运行,以使存档保持最新。填充存档后,可以将PMID传送到fetch-pubmed脚本,以便从本地数据缓存中检索PubmedArticle XML记录。fetch-pubmed需要Archive子目录的路径才能找到数据。例如:
|
|
如果在用户的.bash_profile配置文件中设置了环境变量,则任一脚本都不需要-path参数:
|
|
假设在后续示例中设置了EDIRECT_PUBMED_MASTER。
类似的分而治之策略可用于创建适用于大数据挖掘查询的本地信息检索索引。第二个新脚本index-pubmed会自动执行此活动。 (它是存档发布的超集,也可以定期运行。)
对于选定的PubMed文本字段(标题和主要摘要),索引过程会删除特定前缀后的连字符,删除重音符号和变音符号,在标点符号处拆分单词,更正编码工件以及拼写出希腊字母以便于搜索科学术语。然后它准备带有术语位置的倒排索引,并使用它们来构建分布式术语列表和发布文件。
例如,包含“癌症”的术语列表将位于/Postings/c/a/n/c/canc.trm。因此,对癌症的查询仅需要加载总指数的非常小的子集。
该设计支持有效的布尔表达式评估(例如,“(literacy AND numeracy) NOT (adolescent OR child)”),不受限制的通配符截断(例如,“therap*”),短语查询(例如,“selective serotonin reuptake inhibitor”),和邻近搜索(例如,“vitamin c ~ ~ common cold”)。
短语搜索脚本控制对本地索引的访问。实际的基础工作由rchive程序完成。术语计数由-count(将通配符扩展组合为单个数字)或-counts(扩展通配符并显示单个术语和计数)返回。使用-query返回与搜索表达式匹配的PMID。
例如,使用截断的短语检查术语列表:
|
|
翻译为:
|
|
并返回单个单词的总计数:
|
|
使用-counts而不是-count返回扩展的术语和单个帖子计数:
|
|
使用短语搜索:
|
|
为包含该短语的记录生成PMID列表,然后从本地存档中检索相关的PubmedArticle XML。使用[STEM]附加查询使用已通过Porter2词干分析算法处理的单词来评估相同的表达式。
冒险尝试进入编程领域时,可以在需要独立处理一个步骤的每个输出行时编写shell脚本,而不是将输出完整地传输到下一个命令。 (最简单的shell脚本只是一组命令的副本,这些命令被输入到终端中以供执行。)
在脚本中,可以通过将语句括在反引号(“`”)字符中来将变量设置为命令的结果。变量名称以美元符号(“$”)作为前缀,以将其值用作另一个命令中的参数。注释以井号(“#”)开头并被忽略。引用字符串中的引号通过反斜杠(“\”)“转义”输入。子例程可用于收集公共代码或简化脚本的组织。
例如,执行包含以下内容的脚本文件:
|
|
将获得Entrez数据库列表:
|
|
然后为每个单独的数据库返回索引搜索字段的缩写,名称和描述:
|
|
shell脚本命令:
|
|
在循环中的步骤之间添加一秒延迟,并可用于帮助防止高级脚本过度使用Entrez服务器。
通过创造性地使用UNIX xargs和sh命令,有时可以避免编写脚本来循环遍历数据。在“sh -c”命令字符串中,姓氏和首字母参数(由“xargs -n 2”成对传递)在“$0”和“$1”变量中替换。sh字符串中的所有命令都在每个名称上单独运行:
|
|
这会为每位作者生成PubMed文章计数:
|
|
“while”循环也可用于独立处理数据行。给定一个包含genus-species名称的文件“organisms.txt”,UNIX“cat”命令:
|
|
写入文件的内容:
|
|
这可以通过管道连接到一次读取一行的循环:
|
|
查找每个生物的分类学姓氏和BLAST分部:
|
|
(“</dev/null”输入重定向构造阻止esearch从stdin“排空”剩余的行。)
嵌入“for”循环的生物体名称可以获得相同的结果:
|
|
for循环也可用于浏览计算机的文件系统:
|
|
访问当前目录中的每个文件。星号(“”)字符表示所有文件,可以用任何模式(例如“.txt”)替换以限制文件搜索。 if语句“-f”运算符可以更改为“-d”以查找目录而不是文件,“ -s”选择大小大于零的文件。
由于Entrez链接服务器中的技术限制,可能需要使用将唯一标识符或序列登录号拆分为较小组的函数对大量记录执行elink操作:
|
|
以下示例将一次处理200个加入的组中的序列记录:
|
|
可以将长或复杂的搜索短语保存在文件中,以避免必须为每个查询重新键入(或复制和粘贴)全文。文件的每一行都有一个快捷键,一个制表符和一个扩展的搜索词。在使用井号(“#”)前缀后,将它们放在括号中,以引用快捷方式。
例如,给定名为“q_aliases”的文件包含:
|
|
在esearch语句中:
|
|
将扩展开为:
|
|
查询生成:
|
|
别名文件也可以在管道或脚本开头的单独指令中读取:
|
|
为了获得最大的灵活性,可以将单独的eproxy命令连接在一起以加载多个快捷方式文件,只要快捷方式字符串都是唯一的。
可以为ESearch和EFilter指定一个-sort参数来指定检索记录时的结果顺序:
|
|
ELink可以使用“-name pubmed_pubmed_citedin”返回引用列表的链接,但仅适用于PubMed Central(PMC)中保留全文的出版物。例如,查询:
|
|
生成十个被引用最多的作者的排名列表:
|
|
类似地,“ -name pubmed_pubmed_refs”再次返回文章的引用列表,对于存放在PMC中的出版物也是如此。
ELink有几种命令模式,可以使用-cmd参数指定这些模式。当不使用默认的“neighbor_history”命令时,elink将返回一个eLinkResult XML对象,每个UID的链接在不同的块中显示。例如:
|
|
将在后续列中显示第一列中的原始PMID和相关文章PMID:
|
|
当elink命令“prlinks”与“ref”模式一起使用时,它可以直接从发布者获取包含或引用全文文章的HTML。 UNIX“xargs”命令为每个标识符分别调用elink:
|
|
elink -batch标志将绕过大型查询的Entrez历史记录机制。
标准格式的自闭标签:
|
|
或替代形式:
|
|
没有文本内容,因此无法使用-element命令进行选择。如果标记包含属性:
|
|
它可以通过匹配指定的值来选择:
|
|
-pattern,-group,-block和-subset命令提供了一个嵌套的循环组织器层次结构,用于探索XML对象。每个模式可以包含多个组,每个组可以包含多个块,并且每个块可以具有多个子集。
使用不同的参数名称允许循环嵌套的线性表示,并提供足够的灵活性来从Entrez中的XML记录中识别和提取任意数据。
在伪代码中绘制草图可以阐明相对嵌套级别。提取命令:
|
|
可以用伪代码表示为计算机程序:
|
|
额外的参数(-division,-branch,-section和-unit)保留用于提供额外的组织级别,如果将来需要处理复杂的,深度嵌套的XML数据。按排名顺序排列的完整命令是:
|
|
使用-block启动xtract探索,并使用-group和-subset进行扩展,会留下可在任何需要的地方使用的其他级别名称,而无需重新设计整个命令。
EDirect nquire函数可用于从任意URL获取数据。查询是从命令行参数构建的。例如:
|
|
读取URL然后标记/值对以生成电子实用程序查询:
|
|
路径可以分为组件,与斜杠组合,因此:
|
|
转换为:
|
|
标签之间的多个值与逗号组合。从而:
|
|
转化为:
|
|
以连字符(或减号)开头的值可以通过在其前面添加反斜杠来区分标记,因此:
|
|
将被发送为:
|
|
并且将返回“US”作为芝加哥内部的坐标,其具有负(西半球)经度值。
-alias参数可以读取快捷键和URL别名的文件。以下别名始终可用:
|
|
所以命令:
|
|
将运行ESearch查询并返回eSearchResult XML对象。
可以重新格式化具有不一致的换行和缩进的原始XML,以便通过管道传输来更容易地目视检查数据结构和内容:
|
|
XML对象可以包含异构的组件组合。例如:
|
|
返回书籍和期刊记录的混合:
|
|
“Parent/*”构造用于访问各个组件,即使它们可能具有不同的名称。将XML输出管道化为:
|
|
单独打印每个XML组件的全部内容:
|
|
使用“父/子”构造可以隔离具有相同名称的对象,这些对象因其在XML层次结构中的位置而不同。例如:
|
|
为书/章作者,书籍编辑和文章作者写单独的行:
|
|
只需用个别参数进行探索:
|
|
将访问编辑器(在BookDocument / Book / AuthorList)以及作者(在BookDocument / AuthorList),并按照XML中的外观顺序打印名称:
|
|
(在这个特定的例子中,书籍作者列表可以通过使用-if“@Type”-equals作者或-if“@Type”-equals编辑器来区分,但是通过“父/子”进行探索是一种基于位置的一般方法。 )
由efetch返回的某些XML对象是递归定义的,包括TaxaSet中的Taxon(-db分类法)和Entrezgene中的Gene-commentary(-db gene)。因此,它们可以具有相同XML标记的嵌套对象。
检索一组分类记录:
|
|
对于分类谱系中的每个等级,使用嵌套的Taxon对象(下面标有行引用)生成XML:
|
|
Xtract跟踪XML对象嵌套,以确定第1行的
当一个递归对象被赋予一个探索命令时,使用-element命令选择数据:
|
|
不检查内部对象中的字段,仅返回主条目的信息:
|
|
“*/Child”构造将跳过外部开始标记:
|
|
单独访问下一级嵌套对象:
|
|
可以使用双星斜杠前缀完全探索递归对象:
|
|
无论嵌套深度如何,它都会访问每个子对象:
|
|
为了使用基因位置通过efetch或UCSC浏览器检索相应的染色体子区域,必须理解序列坐标约定。
以GenBank或GenPept格式显示的序列记录使用“基于一个”的坐标系,序列位置编号从“1”开始:
|
|
根据这个惯例,位置是指序列字母本身:
C A T G C C A T T C.
1 2 3 4 5 6 7 8 9 10
并且最后一个碱基或残基的位置等于序列的长度。上述ATG起始密码子位于2至4位,包括端点。
但是,对于计算机程序,使用“从零开始”的坐标可以简化用于计算序列位置的算术。基于0的表示中的ATG密码子位于1到3位置。(UCSC浏览器使用混合半开表示,其中起始位置从0开始,停止位置从1开始。)
NCBI的软件通常在输入时将位置转换为0坐标,执行所需的任何计算,然后将结果转换为基于1的表示以进行显示。通过简单地从基于1的值中减去1或将基数加到1来完成这些变换。
检索特定基因的文档:
|
|
以0为基础的坐标返回该基因的染色体位置:
|
|
将文档摘要管道化为xtract命令:
|
|
获取加入的和基于0的坐标值:
|
|
EFetch具有-seq_start和-seq_stop参数来检索基因片段,但是这些参数希望序列子范围在基于1的坐标中。
为解决此问题,另外两个efetch参数-chr_start和-chr_stop允许直接使用基于0的坐标:
|
|
并且无需编写UNIX shell命令来增加两个值。
Xtract具有数字提取命令以协助进行坐标转换。使用-inc参数选择字段:
|
|
获取入口和基于0的坐标,然后递增位置以生成从1开始的值:
|
|
EDirect了解所有相关Entrez数据库(例如,gene,snp,dbvar)中序列位置的策略,并提供了将这些转换为其他约定的其他快捷方式。例如:
|
|
了解基因ChrStart和ChrStop字段是基于0的,看到所需的输出是基于1的,并转换命令以使用-inc参数转换坐标。同理:
|
|
保留基于0的起始值不变但增加原始停止值以生成可以传递给UCSC浏览器的半开放表单:
|
|
NCBI代表基于分子生物学中心法则的数据模型中的序列记录。序列,包括基因组DNA,信使RNA和蛋白质产物,用实际的序列字母“实例化”,并且被分配标识符(例如,登录号)以供参考。特征携带关于给定区域的生物学的信息,其具有涉及特定序列的特定间隔的位置。某些特征也可能指向特定变换的产品序列。
基因特征指示可遗传的核酸区域的位置,其赋予可测量的表型。基因组DNA上的mRNA特征代表在转录和剪接后保留的信息的外显子和非翻译区。编码区(CDS)特征具有对翻译的蛋白质的产物参考。
由于信使RNA序列并不总是与基因组区域一起提交,因此CDS特征(其模拟核糖体在转录物分子上的行程)传统上在基因组序列上注释,具有编码外显子区间的位置。
功能在限定符中显示特定的生物注释。例如,基因的名称显示在/gene限定符中。为了方便用户,可以从底层数据动态生成限定符。因此,成熟肽的序列可以从前体蛋白上的mat_peptide特征的位置提取并显示在/肽限定符中,即使未实例化成熟肽。
可以在GenBank或GenPept平面文件的XML版本中检索序列记录。查询:
|
|
返回一组INSDSeq对象:
|
|
INSDSeq XML提供生物特征和限定符(此处以GenPept格式显示):
|
|
在结构化功能表中:
|
|
功能和限定符名称在数据值中指示,而不是XML元素标记,并且需要-if和-equals来选择所需的对象和内容。 xtract -insd参数简化了此过程,如下所示。
因为从INSDSeq XML获取特定限定符值比以前的情况稍微复杂一些,所以xtract -insd参数可用于生成提取指令。
在单独的命令中运行xtract -insd会打印一个新的xtract语句,然后可以在必要时对其进行复制,编辑并粘贴到其他查询中。在多步骤管道中运行-insd命令可动态执行构造的查询。
提供可选(完整/部分)位置指示,功能键,然后提供一个或多个限定符名称:
|
|
创建一个新的xtract语句,该语句将生成具有完整位置的成熟肽特征的限定符值表。该语句以记录加入和查找指定类型的功能的说明开头:
|
|
然后,每个限定符都会生成附加到不断增长的查询中的自定义提取代码。例如:
|
|
在海洋蜗牛毒肽的查询中加入xtract -insd命令:
|
|
生成一个表格,其中包含登录号,计算肽长度,产品名称和肽序列的列:
|
|
将结果管道化为一系列UNIX命令:
|
|
按产品名称过滤,将结果限制为指定的肽段长度,删除多余的加入,按肽长度对表格进行排序,删除长度列,并对齐列以进行更清晰的打印:
|
|
对于缺少特定限定符的记录:
|
|
短划线作为占位符插入:
|
|
能够以结构化XML格式获取Entrez记录并轻松提取基础数据,使用户能够提出现有分析软件无法解决的新问题。
XML的优点是许多信息都位于定义明确的数据层次结构中的特定位置。访问按名称提供的各个数据单元,例如:
|
|
需要匹配相同的通用模式,仅由元素名称不同。这比从长而复杂的字符串解析单位要简单得多:
|
|
XML的缺点是数据提取通常需要编程。但是EDirect依赖于XML值表示的通用模式来提供解释XML数据的简化方法。
xtract函数使用命令行参数来指导XML数据的选择性转换为制表符分隔的表。 -pattern参数将结果划分为行,而将数据放入列中则由-element控制。一个简单的例子:
|
|
将打印当前查询中的记录数。
Xtract使用单独的参数进行元素选择,路径探索,条件处理和报告格式化,使用分而治之策略来控制数据转换。
元素选择查找每个指示项目的每次出现,在遇到它们时打印值。探索控制限制按上下文选择,一次呈现一个指定的对象。条件处理按内容过滤,要求存在(或不存在)特定数据值以便继续。最后,自定义格式可以覆盖默认输出的常规表格布局。
本节其余部分将讨论这种灵活方法的细节和分支。
选择参数(-element,-first和-last)从指示的元素名称中提取和打印数据值:
|
|
探测参数(-pattern,-group,-block和-subset)将数据提取限制为XML的指定区域,一次访问一个所有相关对象。这为数据收集设置了上下文,消除了提供数据元素的完整路径的需要,并从“在哪里找到它”中提升为“寻找什么”的概念:
|
|
每个模式可以有多个组,每个组可以有多个块,每个块可以有多个子集。此设计允许嵌套探索复杂的分层数据,这些数据由命令行参数语句的线性链控制。
条件处理参数按对象名称和值(-if和-unless)或项目位置(-position)限制探索语句:
|
|
这些命令在探测参数后立即发出。
格式化参数(-ret,-tab,-sep,-pfx,-sfx和-def)允许对默认行/列表显示进行大量自定义:
|
|
并适用于后续的选择陈述。
(“\n”转义序列表示换行符,而“\t”指定制表符。)
Entrez为每条记录提供结构化XML格式的文档摘要。将查询管道化为“efetch -format docsum”:
|
|
将生成XML文档摘要集:
|
|
将文档摘要管道输出到:
|
|
将给出XML层次结构的缩进概述:
|
|
大纲视图提供了一个清晰,整洁的XML层次结构图,可用于设计适当的实际数据提取命令。从-outline输出复制并粘贴到xtract参数可以帮助避免印刷错误。从而:
|
|
返回PubMed标识符(PMID),第一作者姓名和文章标题:
|
|
使用xtract“-synopsis”而不是-outline显示每个元素的完整路径。将这些结果管道化为“sort-uniq-count”(见下文)会生成一个唯一路径计数表。
许多UNIX实用程序可以处理制表符分隔的表。例如:
|
|
按作者名称排序前一个示例的结果,然后按标题按字母顺序排序(如果同一作者有多个出版物):
|
|
不必总是重新键入一系列常见的后处理指令,经常使用的UNIX命令组合可以放在一个函数中,存储在别名文件(例如用户的.bash_profile)中,并按名称执行。 (以下两个函数现在作为脚本包含在EDirect软件中。)例如:
|
|
标题可以传递给一对这些UNIX别名命令:
|
|
生成一个单词出现次数表,按频率排序:
|
|
-pattern对象之间的换行符可以用-ret覆盖,字段之间的制表符可以用-tab替换。
-sep参数用于区分同一类型的多个元素,并独立于-tab参数控制它们的分隔。例如:
|
|
将基因的所有同义词组合成一个列,由竖线分隔:
|
|
-sep值也适用于以逗号分组的不相关元素项。否则,-tab值描述各个字段。
组或字段前面带有-pfx值,后跟-sfx值,这两个值最初都是空的。
可以使用-def参数标记缺少的数据值。例如:
|
|
在缺少指定元素的列中插入破折号。
PubmedArticle对象(对于-db pubmed)具有比DocumentSummary更详细的结构:
|
|
提供更多信息,包括作者姓名,日期和摘要:
|
|
使用此信息来创建新的xtract语句:
|
|
得出每个记录的所有作者的表格:
|
|
(请注意,“-element MedlineCitation/PMID”使用“父/子”构造来防止显示稍后可能在CommentsCorrections对象中出现的其他PMID项。)
如果合适,可以使用-first或-last参数代替-element。
可以通过efetch直接检索单个PubmedArticle对象:
|
|
生成的XML具有作者,其中包含姓氏和首字母的单独字段:
|
|
在没有给出关于上下文的任何指导的情况下,带有“Initials”和“LastName”参数的-element语句:
|
|
将分别探索每个参数的当前记录,从而打印所有作者姓名首字母,后跟所有作者姓氏:
|
|
插入-block语句会重定向数据探索,以便一次考虑每个作者。后续元素语句仅查看当前作者的值:
|
|
恢复首字母和姓氏的正确关联:
|
|
添加-sep语句以替换组成员之间的常规选项卡,并使用逗号将两个参数(“Initials,LastName”)组合到一个组中:
|
|
导致更理想的作者姓名格式:
|
|
可以通过-position语句选择第一个或最后一个结构化对象:
|
|
结果如下:
可以在单个提取中使用多块语句来探索XML的不同区域。这将元素提取限制到所需的子区域,并允许消除具有相同名称的字段的歧义。
将独立字段与逗号组合允许将它们视为集合。通常用于分隔这些选项卡的选项可以替换为-sep参数:
|
|
这将生成一个表,允许轻松解析作者姓氏,计算作者的数量,并打印每个记录发布的日期,按作者计数对结果进行排序:
|
|
(请注意,PubDate对象可以以结构化形式存在:
|
|
(常常缺少Day字段)或字符串形式:
|
|
但不包含两种类型的混合,因此指令:
|
|
只会为输出一列。)
记录中的Medical Subject Headings(MeSH术语)可以分配小标题:
|
|
使用-block语句访问每个MeSH术语,并在-block中添加-subset语句,允许嵌套探索当前MeSH术语的子标题:
|
|
并创建一个带有相关子标题的MeSH术语列表:
|
|
MeSH术语和子标题字段实际上具有主要的主题属性:
|
|
可以选择“DescriptorName@MajorTopicYN”或“@MajorTopicYN”:
|
|
主要主题值放在每个MeSH术语或子标题之前:
|
|
结果可以由UNIX流编辑器“sed”处理:
|
|
显示主要(“已加星标的”MeSH术语)概念的星号:
|
|
可以将值记录在变量中,然后根据需要多次显示。变量用连字符后跟一串大写字母或数字表示。变量“-PMID”在-element参数中称为“&PMID”。例如:
|
|
生成作者列表,每行的第一列中有PMID:
|
|
可以使用括号中的文字值初始化变量:
|
|
这可以用作占位符,以防止丢失数据移动表中的列,或者对输出格式进行额外控制:
|
|
处理下一条记录时,将重置所有变量。
Xtract提供-if和-unless参数,按元素名称或名称加数据值进行过滤。例如:
|
|
将选择正好3位作者的论文并打印共同作者姓名:
|
|
使用-and和-or命令指定多个条件:
|
|
-else命令可以提供替代-element或-lbl指令,以便在不满足条件时运行:
|
|
parallel -if和-unless语句可用于为包含嵌套探索的替代条件提供更复杂的响应。
tag:
缺失模块。
1、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
2、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: true raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true