中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何自Python中使用Entrez庫篩選并下載PubMed文獻

發布時間:2020-11-25 14:49:08 來源:億速云 閱讀:353 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關如何自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文獻

最后的結果是存放在txt文件中,大伙兒根據自己的需求改變代碼所需字段啊。

現在我來解釋一下,我貼上的這串代碼的實現原理,首先是通過Entrez檢索到符合我篩選條件的文獻,里邊的限制條件包括了幾個詞匯匹配以及時間限制,時間我限制在了2000年1月1日到2021年的12月31日(這里的時間我選用的是Date - Publication,時間選取Date - Completion、Date - Modification還是Date - Publication其實還是有爭議的,大家自行考慮選取)。

Entrez.esearch的作用就是用來檢索的,里邊的參數db指向你要檢索的數據庫,代碼中的注釋也寫了,Entrez作為一個接口檢索,除了能夠檢索PubMed中的文獻,也能去到別的數據庫檢索文獻;term是寫你的篩選語句,注意你寫的檢索語句不能帶有引號,單引號也不行,否則會檢索不到,如果不知道檢索語句怎么寫,或者是不知道字段是否被定義,可以在官網的檢索那里https://pubmed.ncbi.nlm.nih.gov/advanced/選擇字段輸入內容自動生成query,但是生成的語句是不太智能的,會有很多括號是你不需要的,自己寫代碼的時候要適當去掉;ptyp我這里用的是Review,usehistory是y,意思是后邊我的檢索要記住這個語句,根據歷史查詢來檢索;retmax如果不進行設置的話,默認給你的最大數據量好像是只有1000,我要的檢索內容是超過這個值的,因此我需要自定義檢索的數量。

Entrez.read是對Entrez.esearch檢索到的內容進行讀取,里邊包含了9種元素,我們主要是想從中得到文獻的id號,只有拿到了文獻的id號,我們后面進行摘要的提取才能準確定位。

如何自Python中使用Entrez庫篩選并下載PubMed文獻

最后是循環當中步長的設置,這里就要根據自己的需求來定義了,包括內容的提取,因為我只需要PMID、標題(TI)、摘要(AB),所以我就沒有加載別的內容進來,這里也有一點要注意,標題下載下來是大部分帶有[ ].的,方便操作我直接就在下載的時候給去除了,這也是上面replace代碼的由來。

以上就是如何自Python中使用Entrez庫篩選并下載PubMed文獻,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平谷区| 富顺县| 霞浦县| 鹤壁市| 秭归县| 汉川市| 天气| 永仁县| 固阳县| 嵩明县| 凌源市| 阳春市| 廊坊市| 政和县| 上蔡县| 西吉县| 云林县| 西乌珠穆沁旗| 新干县| 洛川县| 博乐市| 澳门| 玉屏| 化隆| 泰和县| 临清市| 普宁市| 哈尔滨市| 漯河市| 太康县| 巴林右旗| 明水县| 台安县| 鸡泽县| 保康县| 宽甸| 遂溪县| 永清县| 兖州市| 应城市| 大理市|