如何自Python中使用Entrez库筛选并下载PubMed文献-创新互联

本篇文章给大家分享的是有关如何自Python中使用Entrez库筛选并下载PubMed文献,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

创新互联公司服务紧随时代发展步伐,进行技术革新和技术进步,经过十多年的发展和积累,已经汇集了一批资深网站策划师、设计师、专业的网站实施团队以及高素质售后服务人员,并且完全形成了一套成熟的业务流程,能够完全依照客户要求对网站进行成都网站建设、网站建设、建设、维护、更新和改版,实现客户网站对外宣传展示的首要目的,并为客户企业品牌互联网化提供全面的解决方案。

任务:快速高效从PubMed上下载满足条件的文献PMID、标题(TI)、摘要(AB)。

PubMed官网 https://pubmed.ncbi.nlm.nih.gov

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

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

如何自Python中使用Entrez库筛选并下载PubMed文献

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

(2)R语言有个R包,叫做easyPubMed,这里我也给大家贴上学习指南(https://cran.r-project.org/web/packages/easyPubMed/vignettes/getting_started_with_easyPubMed.html)

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

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

注:Entrez在Bio包中,Bio的安装请移步 https://www.cnblogs.com/xiaolan-Lin/p/14023147.html

 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")

文章名称:如何自Python中使用Entrez库筛选并下载PubMed文献-创新互联
转载来源:http://pwwzsj.com/article/djppep.html