作者:xiaolanlin

一个不是学生物的孩子来搞生物,当真是变成了一块废铁啊,但也是让我体会到了一把生物信息的力量。

废话不多说,开整!

任务:快速高效从pubmed上下载满足条件的文献pmid、标题(ti)、摘要(ab)。

pubmed官网

此处有几种选择可以达到目的:

(1)官网上匹配筛选条件(注:匹配快速,但是下载下来的数量受到限制,每次只能下载10000条数据,甚至更少。)

可以看到,我需要的数据是有三十多万条,但是每次只能下载10000条,那我岂不是要手动n次。。很明显,在大批量下载文献的情况下,官网不是很友好。

由于我不喜欢用r写代码,所以我写一半还是换了python,熟练r的小伙伴可以自行根据指南走通需求。

(3)重量级库来了,python自带的bio包中的entrez检索库,简直就是我的救星,以下是我的代码:

import numpy as np

from bio import medline, entrez # 一般是通过biopython的bio.entrez模块访问entrez

from collections import counter

entrez.email = "(此处写你自己在官网注册的邮箱账号)" # 应用自己的账号访问ncbi数据库

# 此处需将服务器协议指定为1.0,否则会出现报错。http.client.incompleteread: incompleteread(0 bytes read)

# 服务器http协议1.0,而python的是1.1,解决办法就是指定客户端http协议版本

import http.client

http.client.httpconnection._http_vsn = 10

http.client.httpconnection._http_vsn_str = 'http/1.0'

"""

entrez 是一个检索系统,可以用其访问ncbi数据库,比如说pubmed,genbank,geo等。

获得有关 global pbde 的所有文献的pubmed ids

"""

# handle_0 = entrez.esearch(db="pubmed", term="drug therapy[subheading] and adverse effects[subheading] and humans[mesh terms]", retmax=306431)

handle_0 = entrez.esearch(db="pubmed", term="drug therapy[mesh subheading] and adverse effects[mesh subheading] and humans[mesh terms] and (2000/01/01[date - publication] : 2021/12/31[date - publication])",

ptyp="review", usehistory="y", retmax=306431)

record = entrez.read(handle_0) # 获取检索条件的所有文献

idlist = record["idlist"] # 提取出文献id

print ("total: ", record["count"])

no_papers = len(idlist) # 共306431篇文献 2000-01-01:2021-12-31

webenv = record['webenv']

query_key = record['querykey']

total = no_papers

step = 1300

print("result items:", total)

with open("./data_pubmed/pbde1.txt", 'w') as f:

for start in range(0, total, step):

print("download record %i to %i" % (start + 1, int(start + step)))

handle_1 = entrez.efetch(db="pubmed", retstart=start, rettype="medline", retmode="text",

retmax=step, webenv=webenv, query_key=query_key) # 获取上述所有文献的pubmed ids

records = medline.parse(handle_1)

records = list(records) # 将迭代器转换至列表(list)

for index in np.arange(len(records)):

id = records[index].get("pmid", "?")

title = records[index].get("ti", "?")

title = title.replace('[', '').replace('].', '') # 若提取的标题出现[].符号,则去除

abstract = records[index].get("ab", "?")

f.write(id)

f.write("\n")

f.write(title)

f.write("\n")

f.write(abstract)

f.write("\n")

话不多说,结果跑出来了我真的很快乐~

最后的结果是存放在txt文件中,大伙儿根据自己的需求改变代码所需字段啊。

现在我来解释一下,我贴上的这串代码的实现原理,首先是通过entrez检索到符合我筛选条件的文献,里边的限制条件包括了几个词汇匹配以及时间限制,时间我限制在了2000年1月1日到2021年的12月31日(这里的时间我选用的是date - publication,时间选取date - completion、date - modification还是date - publication其实还是有争议的,大家自行考虑选取)。

entrez.esearch的作用就是用来检索的,里边的参数db指向你要检索的数据库,代码中的注释也写了,entrez作为一个接口检索,除了能够检索pubmed中的文献,也能去到别的数据库检索文献;term是写你的筛选语句,注意你写的检索语句不能带有引号,单引号也不行,否则会检索不到,如果不知道检索语句怎么写,或者是不知道字段是否被定义,可以在官网的检索那里选择字段输入内容自动生成query,但是生成的语句是不太智能的,会有很多括号是你不需要的,自己写代码的时候要适当去掉;ptyp我这里用的是review,usehistory是y,意思是后边我的检索要记住这个语句,根据历史查询来检索;retmax如果不进行设置的话,默认给你的最大数据量好像是只有1000,我要的检索内容是超过这个值的,因此我需要自定义检索的数量。

entrez.read是对entrez.esearch检索到的内容进行读取,里边包含了9种元素,我们主要是想从中得到文献的id号,只有拿到了文献的id号,我们后面进行摘要的提取才能准确定位。

最后是循环当中步长的设置,这里就要根据自己的需求来定义了,包括内容的提取,因为我只需要pmid、标题(ti)、摘要(ab),所以我就没有加载别的内容进来,这里也有一点要注意,标题下载下来是大部分带有[ ].的,方便操作我直接就在下载的时候给去除了,这也是上面replace代码的由来。

附上我参考的链接,如果我这篇文章解决不了你的问题,那么希望下面的渠道能够帮助到你

以上就是python 利用entrez库筛选下载pubmed文献摘要的示例的详细内容,更多关于python entrez库下载pubmed文献的资料请关注萬仟网其它相关文章!

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

python批量检索文献pubmed_Python 利用Entrez库筛选下载PubMed文献摘要的示例相关推荐

  1. python批量检索文献_Python+Selenium,让浏览器自动帮你下文献

    在做学术.搞科研的过程中,我们往往需要针对一个特定的主题下载海量的文献.在把几百篇文献下载到电脑的过程中,假如遇到不够友好的数据库不提供批量下载的功能,怎么办?我恰好遇到了这样的批量下载的科研任务和批 ...

  2. python批量检索文献_自从用了Python,轻松查文献,释放80%的重复劳动时间!

    一入科研深似海,每逢开题倍忧桑.被 paper 和发际线上移支配的恐惧要回来了--一个假发片还够用吗?1文献看到眼花科研热点总是无缘 加了几十个实验组微信群. QQ 群,想追踪前沿文献,了解跟自己课题 ...

  3. python批量检索文献pubmed_PubMed快速检索文献,学学这些技巧!

    原标题:PubMed快速检索文献,学学这些技巧! PubMed为科研路上必不可少的数据库,今天传授PubMed高手常用的7个技巧,让你快速找到自己想要的文献. 1,获取全文技巧 Pubmed提供的文献 ...

  4. python批量生成图_利用Python批量生成任意尺寸的图片

    实现效果 通过源图片,在当前工作目录的/img目录下生成1000张,分别从1*1到1000*1000像素的图片. 效果如下: 目录结构 实现示例 # -*- coding: utf-8 -*- imp ...

  5. python rsa 公钥解密_python利用rsa库做公钥解密的方法教程

    前言 对于RSA的解密,即密文的数字的 D 次方求mod N 即可,即密文和自己做 D 次乘法,再对结果除以 N 求余数即可得到明文.D 和 N 的组合就是私钥(private key). 算法的加密 ...

  6. python绘制3d图-python3利用Axes3D库画3D模型图

    Python3利用Axes3D库画3D模型图,供大家参考,具体内容如下 最近在学习机器学习相关的算法,用python实现.自己实现两个特征的线性回归,用Axes3D库进行建模. python代码 im ...

  7. python画3d图-python3利用Axes3D库画3D模型图

    Python3利用Axes3D库画3D模型图,供大家参考,具体内容如下 最近在学习机器学习相关的算法,用python实现.自己实现两个特征的线性回归,用Axes3D库进行建模. python代码 im ...

  8. python监听键盘keyboard_python利用 keyboard 库记录键盘事件

    今天也不知道是想了什么,突然就想要试试看我有效击键时的手速到底有多快.为此,需要记录下来击键的记录.于是找到了 python 的 keyboard 库. 安装非常简单,只需执行 pip install ...

  9. Python 3.8.8 几个常用库的下载和离线包的制作安装

    Python 在windows7上的最终版本3.8.8的下载安装,请见: <Python 3.8.8 以及 openpyxl 3.0.7 的下载和安装!> 安装完成后,打开cmd控制台进入 ...

  10. python批量检索文献_基于Python的文献检索系统设计与实现

    基于 Python 的文献检索系统设计与实现 杜兰 ; 刘智 ; 陈琳琳 [期刊名称] <软件> [年 ( 卷 ), 期] 2020(041)001 [摘要] 毕业设计是大学本科教育的一个 ...

最新文章

  1. es5 温故而知新 创建私有成员、私有变量、特权变量的方法
  2. springAop源码分析
  3. php中...的用法
  4. Oralce中日期格式
  5. dataframe输出某列的数据以及统计某列的取值种数+输出某行数据
  6. docker mysql开机自启动_Docker 学会让容器开机自启服务
  7. 高斯拉普拉斯算子(Laplace of Gaussian)
  8. python writerow参数_csv文件的输出结果TypeError writerow()接受2个位置参数,但给出了5个...
  9. PyTorch(总)---PyTorch遇到令人迷人的BUG与记录
  10. 面试被问高并发流量控制,我脸都绿了...
  11. Docker安装以及一些常用命令
  12. 《剑指offer》面试题60——把二叉树打印成多行(C++)
  13. nginx proxy_pass后的url加不加/的区别
  14. 计算机网络科研项目申请书,科研项目申请书范文例.doc
  15. 我的VSTO之路(三):Word基本知识
  16. 理性的赌徒-SSD写带宽保持恒稳的秘密
  17. 一生要看的50部经典电影
  18. 基于opendota的dota2战绩查询微信小程序
  19. 联想小新一键恢复小孔_联想一键恢复系统怎么用?小新Air 13 Pro怎么还原操作系统?...
  20. ubuntu18 dso安装

热门文章

  1. labview 编程样式_LabVIEW编程样式规则
  2. mysql 正则表达式_MySQL的正则表达式
  3. 谈谈我的感受:VS Code和Code Runner
  4. 浅谈低成本视频动作捕捉技术
  5. 广东又将添新高校:香山大学来了
  6. 联通光纤宽带获取管理员密码和公网ip
  7. 内存管理之页转换 virt_to_page
  8. 你程序员,996这就是你的命
  9. redis-trib.rb找不到
  10. android sqlite英文文献,SQLite数据库外文文献翻译.doc