gpt4 book ai didi

ruby - 如何使用 PUBMEDid 从 pubmed 中获取摘要

转载 作者:太空宇宙 更新时间:2023-11-03 16:18:49 27 4
gpt4 key购买 nike

我手动转到 pubmed,例如搜索我的主题,例如 http://www.ncbi.nlm.nih.gov/pubmed/?term=Cancer+TFF然后从夏天开始,我得到了 PMID。然后尝试使用以下命令检索所有摘要。

我想知道两件事,如何不手动完成第一部分? (意味着我也通过脚本来做到这一点)以及如何保存摘要?

#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

最佳答案

您可以使用 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 gem!否则您显然会得到错误:require': cannot load such file -- mechanize (LoadError),因为它无法找到所需的库/gem。在任何情况下,如果即使在 gem install mechanize 之后您仍遇到 require 错误,请执行 sudo gem install mechanize 然后尝试。

更新 1:

正如 nik 在评论中提到的,此代码仅加载搜索的第一页(20 个条目),即使它有更多条目。所以我正在更新代码来解决这个问题。有些 URL 现在不同了。

我首先通过 API 获取所有 pmid 的列表,然后通过网络抓取查找每个 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)

希望对您有所帮助:)

关于ruby - 如何使用 PUBMEDid 从 pubmed 中获取摘要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38160787/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com