2016-07-02 49 views
2

我手動去pubmed和例如搜索我的主題例如http://www.ncbi.nlm.nih.gov/pubmed/?term=Cancer+TFF然後從summery我得到PMIDs。然後嘗試使用以下命令檢索所有摘要。如何從pubmed使用PUBMEDid獲取摘要

我想知道兩件事,如何不手動做第一部分? (意味着我也通過腳本來完成)以及如何保存摘要?

#Retrieve abstracts from PUBMEDid list 
count=1; 
for i in `cat pmid.txt`; 
do echo -n "$count"; 
    ruby -e 'print "\t"'; 
    echo -n $i; 
    ruby -e 'print "\n"'; 
    curl "http://togows.dbcls.jp/entry/ncbi-pubmed/$i/abstract"; 
    ruby -e 'print "\n"'; 
    ((count++)); 
done 
+0

您收到此錯誤,因爲你還沒有安裝'mechanize'庫。請執行'gem install mechanize'。確保在irb中,您可以運行'require'mechanize「'而不出錯,然後只嘗試腳本。 –

+0

btw @nik,你不需要做'chmod + x reterive_abstract.rb'。雖然它並沒有造成任何傷害,但只有在您要通過'。/ reterive_abstract.rb'運行腳本而不是'ruby reterive_abstract.rb'時才需要。但在這種情況下,您必須在第一行的ruby腳本中添加shebang,告訴腳本它是一個ruby腳本。 –

回答

1

你可以通過使用ruby中的mechanize gem進行網頁掃描來獲取PMIDS列表。做gem install mechanize然後你就可以通過運行下面的Ruby腳本獲得所需的結果:

require 'mechanize' 
agent = Mechanize.new 
elements = agent.get('http://www.ncbi.nlm.nih.gov/pubmed/?term=Cancer+TFF').search(".rprtid").to_a 
pmids = elements.map{|x| x.elements.last.text} 
puts "List of pmids:" 
puts pmids 

File.open("output_pmid_abstracts.txt", "w") do |file| 
    for pmid in pmids 
     puts "Getting Abstract for PMID: #{pmid}" 
     abstract = agent.get("http://togows.dbcls.jp/entry/ncbi-pubmed/#{pmid}/abstract").body 
     file.puts "pmid:#{pmid}" 
     file.puts abstract 
     file.puts "" 
    end 
end 
puts "Done" 

這將使output_pmid_abstracts.txt文件在當前目錄將類似於下面:

pmid:27220894 
BACKGROUND & AIMS: Gastric cancer has familial clustering in incidence, and the familial relatives of gastric ... 
... 
pmid:26479350 
Trefoil factor family (TFF) peptides are a group of molecules bearing a characteristic three-loop trefoil domain ... 
... 

PS:請確保你絕對需要先安裝mechanize寶石!否則,你會明顯得到錯誤:require': cannot load such file -- mechanize (LoadError),因爲它無法找到所需的庫/寶石。無論如何,即使在gem install mechanize之後,您也會收到要求錯誤,然後請執行sudo gem install mechanize然後再嘗試。

更新1:

正如在評論中提及的NIK,這段代碼只加載在第一頁(20項),即使它有更多的搜索。所以我正在更新代碼解決這個問題。有些網址現在有所不同。

我首先通過API獲取所有pmids的列表,然後通過webscraping查找每個pmid的摘要。

require 'mechanize' 
agent = Mechanize.new 

search_terms = "Cancer+TFF" 

url = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=#{search_terms}&retmax=10000" 
all_pmids = agent.get(url).search("IdList").text.strip.split("\n").map{|x| x.strip.to_i} 

puts "List of pmids:" 
puts all_pmids 

File.open("output_pmid_abstracts.txt", "w") do |file| 
    for pmid in all_pmids 
     puts "Extracting Abstract for pmid: #{pmid}"   
     abstract_url = "http://www.ncbi.nlm.nih.gov/pubmed/#{pmid}" 
     abstract = agent.get(abstract_url).search(".abstr").children[1].text rescue " " 
     file.puts "pmid:#{pmid}" 
     file.puts abstract 
     file.puts "" 
    end 
end 

PS:這可能是一些紙不具有抽象可言:例如:16376814(檢查here

希望它可以幫助:)

+0

@nik我已經更新了所有你需要的ruby腳本。只需保存這個紅寶石腳本,安裝meachinze寶石,並休息將完成 - 希望它可以幫助你:) –

+0

請評論,如果你仍然有問題或新的紅寶石:) –

+0

@ z_-我已經回答了問題,而不是問它。我不明白你想說什麼。 –