任務:快速高效從PubMed上下載滿足條件的文獻PMID、標題(TI)、摘要(AB)。
PubMed官網 https://pubmed.ncbi.nlm.nih.gov
此處有幾種選擇可以達到目的:
(1)官網上匹配篩選條件(注:匹配快速,但是下載下來的數量受到限制,每次只能下載10000條數據,甚至更少。)
可以看到,我需要的數據是有三十多萬條,但是每次只能下載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")
話不多說,結果跑出來了我真的很快樂~
最后的結果是存放在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號,我們后面進行摘要的提取才能準確定位。
最后是循環當中步長的設置,這里就要根據自己的需求來定義了,包括內容的提取,因為我只需要PMID、標題(TI)、摘要(AB),所以我就沒有加載別的內容進來,這里也有一點要注意,標題下載下來是大部分帶有[ ].的,方便操作我直接就在下載的時候給去除了,這也是上面replace代碼的由來。
以上就是如何自Python中使用Entrez庫篩選并下載PubMed文獻,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注本站行業資訊頻道。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
【資料圖】最近小編看到大家都在討論巧克力球怎么做相關的事情,對此呢小編也是非常的感應興趣,那么這件事究竟是怎么發生的呢?具體又是怎么回事呢?下面就是小編搜索到的關于巧克力球怎么做事件的相關信息,我們一起來看一下吧!用料:細研磨燕麥片175克、糖粉50克、可可粉60-80克、椰蓉適量、黃油100g、水、果汁、咖啡2-3勺。1、黃油放微波爐或烤箱加熱融化成液態。2、燕麥片,可可粉,糖粉混合均勻。3、加...
公積金是在職職工繳存的一筆長期住房儲蓄,因為貸款利率比商貸要低而且優惠力度更大,所以很多人買房首選公積金貸款,那么省直公積金是什么意思,省直公積金如何提取呢,一起來看解答。省直公積金是指省直各單位、中央單位、部屬、省屬大專院校及其所屬單位住房公積金和其他住房資金。省公積金一般是鐵路單位,國家機關單位買的,一般的企業都是買市公積金。省公積金可以全省內用,可以先還商業貸款的部分,再還公積金貸款的部分。...
(資料圖片)有 關于李詠得了什么癌_李詠是什么癌方面的知識,小編在此整里出來,給大家作為參考,下面就詳細的介紹一下關于李詠得了什么癌_李詠是什么癌的相關內容。1、雖然不少人都猜是“喉癌”,但真實情況是,李詠很有可能得了“胃癌”!2、大家猜測他得喉癌,可能跟李詠本身的主持人身份有關,之前“中國播音主持網”爆料說,李詠得的是喉癌,還掛出了去梅奧診所的記錄,梅奧是全球頂尖的癌癥腫瘤治療中心。3、但現在這...