obo_parser 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.1
data/lib/obo_parser.rb CHANGED
@@ -9,24 +9,31 @@ module OboParser
9
9
  require File.expand_path(File.join(File.dirname(__FILE__), 'tokens'))
10
10
  require File.expand_path(File.join(File.dirname(__FILE__), 'parser'))
11
11
  require File.expand_path(File.join(File.dirname(__FILE__), 'lexer'))
12
+ require File.expand_path(File.join(File.dirname(__FILE__), 'utilities'))
12
13
 
13
14
 
14
15
  class OboParser # Node
15
16
  attr_accessor :terms, :typedefs
16
17
 
17
- def initialize
18
+ def initialize # :yields: true
18
19
  @terms = []
19
20
  @typedefs = []
21
+ true
20
22
  end
21
23
 
22
- def term_strings
24
+ def term_strings # :yields: Array of Strings
23
25
  @terms.collect{|t| t.name}.sort
24
26
  end
25
-
26
- def term_hash
27
+
28
+ def term_hash # :yields: Hash (String => String) (name => id)
29
+ # Warning! This assumes terms are unqiue, they are not required to be so.
27
30
  @terms.inject({}) {|sum, t| sum.update(t.name => t.id)}
28
31
  end
29
-
32
+
33
+ def id_hash # :yields: Hash (String => String (id => name)
34
+ # ids are unique
35
+ @terms.inject({}) {|sum, t| sum.update(t.id => t.name)}
36
+ end
30
37
 
31
38
  class Stanza
32
39
  attr_accessor :name, :id, :tags
@@ -104,3 +111,4 @@ end
104
111
 
105
112
 
106
113
 
114
+
data/lib/utilities.rb ADDED
@@ -0,0 +1,118 @@
1
+ require 'rubygems'
2
+ require 'ruby-debug'
3
+ require 'obo_parser'
4
+
5
+ module OboParser::Utilities
6
+
7
+ # Example usage
8
+ # of1 = File.read('hao1.obo')
9
+ # of2 = File.read('hao2.obo')
10
+ # of3 = File.read('hao3.obo')
11
+ # of4 = File.read('hao4.obo')
12
+ #
13
+ # OboParser::Utilities::dump_comparison_by_id([of1, of2, of3, of4])
14
+
15
+ def self.dump_comparison_by_id(files = []) # :yields: String
16
+ of = []
17
+ files.each_with_index do |f, i|
18
+ of[i] = parse_obo_file(f)
19
+ end
20
+
21
+ all_data = {}
22
+
23
+ of.each do |f|
24
+ tmp_hash = f.id_hash
25
+ tmp_hash.keys.each do |id|
26
+ if all_data[id]
27
+ all_data[id].push tmp_hash[id]
28
+ else
29
+ all_data[id] = [tmp_hash[id]]
30
+ end
31
+ end
32
+ end
33
+
34
+ puts "\nA list of all labels used across all submitted files for a given ID\n\n"
35
+ all_data.keys.sort.each do |k|
36
+ if all_data[k].uniq.size > 1
37
+ puts "#{k}\t: #{all_data[k].uniq.join(', ')}"
38
+ end
39
+ end
40
+ end
41
+
42
+ def self.alignment_translate(infile = nil) # :yields: String
43
+ # infile is a tab delimited 2 column file that contains IDs in the from FOO_1234
44
+ # The file is replicated to STDOUT replacing the ID with the Term
45
+
46
+ agreement = ARGV[0]
47
+ raise "Provide a file with comparison." if agreement.nil?
48
+ comparison = File.read(agreement)
49
+
50
+ obo_files = Dir.entries('.').inject([]){|sum, a| sum.push( a =~ /\.obo\Z/ ? a : nil)}.compact!
51
+ identifiers = {}
52
+
53
+ obo_files.each do |f|
54
+ puts "Reading: #{f}"
55
+ identifiers.merge!( parse_obo_file(File.read(f)).id_hash )
56
+ end
57
+
58
+ comparison.each do |l|
59
+ v1, v2 = l.split("\t")
60
+ # puts "#{v1} - #{v2}"
61
+
62
+ next if v1.nil? || v2.nil?
63
+
64
+ v1.gsub!(/_/, ":")
65
+ v1.strip!
66
+ v2.gsub!(/_/, ":")
67
+ v2.strip!
68
+
69
+ puts (identifiers[v1].nil? ? 'NOT FOUND' : identifiers[v1]) +
70
+ "\t" +
71
+ (identifiers[v2].nil? ? 'NOT FOUND' : identifiers[v2])
72
+ end
73
+
74
+ end
75
+
76
+
77
+ def self.shared_labels(files = []) # :yields: String
78
+
79
+ # Returns labels found in all passed ontologies
80
+
81
+ # Usage:
82
+
83
+ # of1 = File.read('fly_anatomy.obo')
84
+ # of2 = File.read('hao.obo')
85
+ # of3 = File.read('mosquito_anatomy.obo')
86
+
87
+ # shared_labels([of1, of6])
88
+
89
+ comparison = {}
90
+
91
+ files.each do |f|
92
+ o = parse_obo_file(f)
93
+ o.term_hash.keys.each do |k|
94
+ tmp = k.gsub(/adult/, "").strip
95
+ tmp = k.gsub(/embryonic\/larval/, "").strip
96
+ if comparison[tmp]
97
+ comparison[tmp] += 1
98
+ else
99
+ comparison.merge!(tmp => 1)
100
+ end
101
+ end
102
+ end
103
+
104
+ match = []
105
+ comparison.keys.each do |k|
106
+ if comparison[k] == files.size
107
+ match.push k
108
+ end
109
+ end
110
+
111
+ puts match.sort.join("\n")
112
+
113
+ puts "\n#{match.length} total."
114
+
115
+ end
116
+
117
+
118
+ end
data/obo_parser.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{obo_parser}
8
- s.version = "0.2.0"
8
+ s.version = "0.2.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["mjy"]
12
- s.date = %q{2010-03-17}
12
+ s.date = %q{2011-02-28}
13
13
  s.description = %q{Provides all-in-one object containing the contents of an OBO formatted file. OBO version 1.2 is targeted, though this should work for 1.0. }
14
14
  s.email = %q{diapriid@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -31,6 +31,7 @@ Gem::Specification.new do |s|
31
31
  "lib/obo_parser.rb",
32
32
  "lib/parser.rb",
33
33
  "lib/tokens.rb",
34
+ "lib/utilities.rb",
34
35
  "obo_parser.gemspec",
35
36
  "tasks/obo_parser_tasks.rake",
36
37
  "test/cell.obo",
@@ -71,7 +71,6 @@ class Test_Lexer < Test::Unit::TestCase
71
71
  assert_equal 'PATO:0001301', t.value
72
72
  end
73
73
 
74
-
75
74
  def test_parse_term
76
75
  lexer = OboParser::Lexer.new("[Term]")
77
76
  assert lexer.pop(OboParser::Tokens::Term)
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 0
9
- version: 0.2.0
8
+ - 1
9
+ version: 0.2.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - mjy
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-03-17 00:00:00 -04:00
17
+ date: 2011-02-28 00:00:00 -05:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -42,6 +42,7 @@ files:
42
42
  - lib/obo_parser.rb
43
43
  - lib/parser.rb
44
44
  - lib/tokens.rb
45
+ - lib/utilities.rb
45
46
  - obo_parser.gemspec
46
47
  - tasks/obo_parser_tasks.rake
47
48
  - test/cell.obo