Grundsätzlich habe ich diese Dateien (Medline von NCBI). Jeder ist einem Zeitschriftentitel zugeordnet. Jeder hat 0, 1 oder mehr Genbankidentifikationsnummern (GBIDs). Ich kann die Anzahl der GBIDs pro Datei mit jedem Journalnamen verknüpfen. Mein Problem ist, dass ich mehr als eine Datei mit demselben Journal verknüpft habe, und ich weiß nicht, wie ich die Anzahl der GBIDs pro Datei zu einer Gesamtzahl von GBIDs pro Journal hinzufügen kann.Wie fügen Sie in einem Hash zwei Werte für denselben Schlüssel hinzu, anstatt sie zu überschreiben?
Mein aktueller Code: jt steht für Journal Titel, richtig aus der Datei gezogen. GBIDs werden zu der Zählung hinzugefügt, die aufgetreten ist.
... bis zu diesem Zeitpunkt die erste Suche durchgeführt wird, das jeweils „PMID“ kann man sich vorstellen als eine einzige Datei, so dass jeder „holen“ durchläuft alle Dateien einen nach dem anderen ...
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
Mein Ergebnis:
Your search returned 192 results.
Virology journal = 8
Archives of virology = 9
Virus research = 1
Archives of virology = 6
Virology = 1
Grundsätzlich wie bekomme ich es Archives of virology zu sagen = 15, sondern für jeden Titel der Zeitschrift? Ich habe einen Hash probiert, aber das zweite Archiv der Virologie überschrieb einfach das erste ... gibt es eine Möglichkeit, zwei Schlüssel dazu zu bringen, ihre Werte in einem Hash zu addieren?
Voll Code:
#!/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
Entschuldigung, mit Ruby, mit Bioruby Edelsteine – kbearski
OK nach meiner Antwort und Ihre Bearbeitung der oben genannten Code sollte jetzt funktionieren. Du sagst es nicht. Wie sieht die Ausgabe aus? Und nur die Zeilen mit 'Journal: ... haben ... Einträge, die es assoziieren ', da dies das einzige' Puts 'ist, das ausgeführt wird, nachdem die Suche abgeschlossen ist. – yamen