基本的に私はこれらのファイルを持っています(NCBIのmedline)。それぞれはジャーナルタイトルに関連付けられています。それぞれには、0,1またはそれ以上のジェンバンク識別番号(GBID)があります。ファイルごとのGBIDの数を各ジャーナル名に関連付けることができます。私の問題は、同じジャーナルに複数のファイルが関連付けられている可能性があり、1ファイルあたりのGBIDの数をジャーナルあたりのGBIDの合計数に追加する方法がわかりません。ハッシュでは、上書きするのではなく、同じキーに2つの値をどのように追加しますか?
現在のコード: jtは、ジャーナルのタイトルを表し、ファイルから適切に抜き出しています。発生したカウントにGBIDが追加されます。
...これまでのところ、最初の検索が実行され、各 "pmid"は を1つのファイルとして考えることができるため、各 "フェッチ"は一度に1つずつすべてのファイルを処理します。
pmid_list.each do |pmid|
ncbi_fetch.pubmed(pmid, "medline").each do |pmid_line|
if pmid_line =~ /JT.+- (.+)\n/
jt = $1
jt_count = 0
jt_hash[jt] = jt_count
ncbi_fetch.pubmed(pmid, "medline").each do |pmid_line_2|
if pmid_line_2 =~ /SI.+- GENBANK\/(.+)\n/
gbid = $1
jt_count += 1
gbid_hash["#{gbid}\n"] = nil
end
end
if jt_count > 0
puts "#{jt} = #{jt_count}"
end
end
end
end
マイ結果:基本的に
Your search returned 192 results.
Virology journal = 8
Archives of virology = 9
Virus research = 1
Archives of virology = 6
Virology = 1
、どのように私はそれがウイルス学= 15のアーカイブを言ってもらうが、どの雑誌のタイトルのためですか?私はハッシュを試みましたが、ウイルス学の2番目のアーカイブは最初に上書きされました.2つのキーにハッシュ値を追加する方法はありますか?
全コード:上部に
#!/usr/local/bin/ruby
require 'rubygems'
require 'bio'
Bio::NCBI.default_email = '[email protected]'
ncbi_search = Bio::NCBI::REST::ESearch.new
ncbi_fetch = Bio::NCBI::REST::EFetch.new
print "\nQuery?\s"
query_phrase = gets.chomp
"\nYou said \"#{query_phrase}\". Searching, please wait..."
pmid_list = ncbi_search.search("pubmed", "#{query_phrase}", 0)
puts "\nYour search returned #{pmid_list.count} results."
if pmid_list.count > 200
puts "\nToo big."
exit
end
gbid_hash = Hash.new
jt_hash = Hash.new(0)
pmid_list.each do |pmid|
ncbi_fetch.pubmed(pmid, "medline").each do |pmid_line|
if pmid_line =~ /JT.+- (.+)\n/
jt = $1
jt_count = 0
jt_hash[jt] = jt_count
ncbi_fetch.pubmed(pmid, "medline").each do |pmid_line_2|
if pmid_line_2 =~ /SI.+- GENBANK\/(.+)\n/
gbid = $1
jt_count += 1
gbid_hash["#{gbid}\n"] = nil
end
end
if jt_count > 0
puts "#{jt} = #{jt_count}"
end
jt_hash[jt] += jt_count
end
end
end
jt_hash.each do |key,value|
# if value > 0
puts "Journal: #{key} has #{value} entries associtated with it. "
# end
end
# gbid_file = File.open("temp_*.txt","r").each do |gbid_count|
# puts gbid_count
# end
申し訳ありませんが、rubyを使用して、biorubyの宝石で – kbearski
私の答えと上記のコードを編集してもOKです。あなたはそうではないと言います。出力はどのように見えますか? 'Journal:... has ... entries ... 'という行だけが、すべての検索が完了した後に実行される唯一の' puts'なので – yamen