rbbt 1.2.2 → 1.2.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -9,12 +9,12 @@ require 'rbbt/util/misc'
9
9
  require 'progress-monitor'
10
10
  require 'rand'
11
11
 
12
- $hi = ENV['hi'] || 0.8
13
- $low = ENV['low'] || 0.01
14
- $max = ENV['max'] || 3000
15
- $bigrams = ENV['bigrams'] == 'true' || false
12
+ $hi ||= ENV['hi'] || 0.8
13
+ $low ||= ENV['low'] || 0.01
14
+ $max ||= ENV['max'] || 3000
15
+ $bigrams ||= ENV['bigrams'] == 'true'
16
16
 
17
- $ndocs = ENV['ndocs'] || 5000
17
+ $ndocs ||= ENV['ndocs'] || 5000
18
18
 
19
19
  desc "Bilds Dictionary and Features for an organism"
20
20
  rule(/data\/(.*)/) do |t|
@@ -34,7 +34,7 @@ rule(/data\/(.*)/) do |t|
34
34
 
35
35
 
36
36
  chunks = all.chunk(50)
37
- Progress.monitor("Building Dictionary for #{ org }: -",1000)
37
+ Progress.monitor("Building Dictionary for #{ org }: -")
38
38
  chunks.each{|chunk|
39
39
  PubMed.get_article(chunk).each{|pmid, article|
40
40
  words = BagOfWords.terms(article.text,$bigrams)
@@ -43,7 +43,7 @@ rule(/data\/(.*)/) do |t|
43
43
  }
44
44
 
45
45
  chunks = go.chunk(50)
46
- Progress.monitor("Building Dictionary for #{ org }: +",1000)
46
+ Progress.monitor("Building Dictionary for #{ org }: +")
47
47
  chunks.each{|chunk|
48
48
  PubMed.get_article(chunk).each{|pmid, article|
49
49
  words = BagOfWords.terms(article.text,$bigrams)
@@ -59,7 +59,7 @@ rule(/data\/(.*)/) do |t|
59
59
  fout = File.open(t.name, 'w')
60
60
  fout.puts((['Name','Class'] + terms).join("\t"))
61
61
 
62
- Progress.monitor("Building Features for #{ org }", 1000)
62
+ Progress.monitor("Building Features for #{ org }")
63
63
  all.each{|pmid|
64
64
  text = PubMed.get_article(pmid).text
65
65
  fout.puts(([pmid, :-] + BagOfWords.features(text, terms)).join("\t"))
@@ -83,14 +83,9 @@ rule (/results\/(.*)/) => lambda{|n| n.sub(/results/,'model')} do |t|
83
83
  features = t.name.sub(/results/,'data')
84
84
  org = File.basename(t.name)
85
85
 
86
- ndocs = 100
86
+ ndocs = 1000
87
87
 
88
- used = []
89
- if "".respond_to? :collect
90
- used = Open.read(features).collect{|l| l.chomp.split(/\t/).first}[1..-1]
91
- else
92
- used = Open.read(features).lines.collect{|l| l.chomp.split(/\t/).first}[1..-1]
93
- end
88
+ used = Open.read(features).read.split(/\n/).collect{|l| l.chomp.split(/\t/).first}[1..-1]
94
89
 
95
90
  classifier = Classifier.new(model)
96
91
  go = Organism.gene_literature_go(org).collect{|gene, pmids| pmids}.flatten.uniq - used
@@ -104,12 +99,12 @@ rule (/results\/(.*)/) => lambda{|n| n.sub(/results/,'model')} do |t|
104
99
  raise "Not enogh unused articles to evaluate" if go.empty? || all.empty?
105
100
 
106
101
  features_go = PubMed.get_article(go).collect{|pmid, article|
107
- article = article.text
102
+ article.text
108
103
  }
109
104
  pos = classifier.classify(features_go).select{|v| v == '+'}.length
110
105
 
111
106
  features_all = PubMed.get_article(all).collect{|pmid, article|
112
- article = article.text
107
+ article.text
113
108
  }
114
109
  neg = classifier.classify(features_all).select{|v| v == '-'}.length
115
110
 
@@ -1,6 +1,6 @@
1
1
  equal do |w| [w] end
2
2
  standard do |w| [w.downcase.split(/\s+/).sort.join("")] end
3
- cleaned do |w| [w.downcase.sub(/,.*/,'').sub(/\(.*\)/,'')] end
3
+ cleaned do |w| [w.downcase.sub(/,.*/,'').sub(/\(.*\)/,'').gsub(/s(?:=\W)/,'')] end
4
4
  special do |w| s = w.split.select{|w| w.is_special?}.collect{|w| w.downcase.sub(/p$/,'')} end
5
5
  words do |w|
6
6
  w.sub(/(.*)I$/,'\1I \1').
@@ -1,4 +1,8 @@
1
1
  require 'rbbt/util/misc'
2
+
3
+
4
+ plural = Proc.new do |t| t.sub(/s$/,'') end
5
+
2
6
  tokens do
3
7
 
4
8
  # Some (possible) single letters first
@@ -70,6 +74,9 @@ comparisons do
70
74
  miss.special -3
71
75
  extr.special -3
72
76
 
77
+ transform.receptor plural
78
+ transform.protein plural
79
+
73
80
  transform.roman do |t| [t.arabic, :number] end
74
81
  transform.greek_letter do |t| [$inverse_greek[t.downcase], :greek] end
75
82
  transform.ase do |t| [t, :special] end
@@ -13,7 +13,7 @@ $entrez2native = {
13
13
 
14
14
  $lexicon = {
15
15
  :file => {
16
- :url => "ftp://ftp.arabidopsis.org/home/tair/Genes/gene_aliases.20090313",
16
+ :url => "ftp://ftp.arabidopsis.org/home/tair/Genes/gene_aliases.20100413",
17
17
  :native => 0,
18
18
  :extra => [1,2],
19
19
  },
@@ -37,7 +37,6 @@ $identifiers = {
37
37
  [ 'Protein ID', "protein_id" ],
38
38
  [ 'RefSeq Protein ID', "refseq_peptide" ],
39
39
  [ 'Unigene ID', "unigene" ],
40
- [ 'UniProt/SwissProt ID', "uniprot_swissprot" ],
41
40
  [ 'UniProt/SwissProt Accession', "uniprot_swissprot_accession" ],
42
41
  [ 'HGNC ID', "hgnc_id", 'HGNC'],
43
42
  ['EMBL (Genbank) ID' , "embl"] ,
@@ -6,7 +6,7 @@ $name = "Saccharomyces cerevisiae"
6
6
  $native_id = "SGD DB Id"
7
7
 
8
8
  $entrez2native = {
9
- :tax => 4932,
9
+ :tax => 559292,
10
10
  :fix => proc{|code| code.sub(/SGD:S0/,'S0') },
11
11
  :check => proc{|code| code.match(/^S0/)},
12
12
  }
@@ -107,18 +107,18 @@ file 'identifiers' do
107
107
  if $entrez2native
108
108
  translations = {}
109
109
  Entrez.entrez2native(*$entrez2native.values_at(:tax,:native,:fix,:check)).
110
- each{|k,v|
111
- translations[k] = [v.join("|")]
112
- }
110
+ each{|k,v| translations[k] = [v.join("|")] }
111
+
113
112
  if translations.keys.any?
114
113
  translations_data = ArrayHash.new(translations,'Entrez Gene ID', [$native_id])
115
114
  if data
116
- data.merge(translations_data)
115
+ data.merge(translations_data, $native_id)
117
116
  else
118
117
  data = translations_data
119
118
  end
119
+ else
120
+ puts "No translations from Entrez to #{ $native_id }"
120
121
  end
121
-
122
122
  end
123
123
 
124
124
 
@@ -174,8 +174,6 @@ file 'identifiers' do
174
174
  end
175
175
  end
176
176
 
177
-
178
-
179
177
  # Write ids to file
180
178
  fout = File.open('identifiers', 'w')
181
179
  fout.puts "##{$native_id}\t" + data.fields.join("\t")
@@ -17,7 +17,7 @@ module BagOfWords
17
17
  # 'rbbt/util/misc'.
18
18
  def self.words(text)
19
19
  return [] if text.nil?
20
- raise "Stopword list not loaded. Have you installed the wordlists? (rbbt_config install wordlists)" if $stopwords.nil?
20
+ raise "Stopword list not loaded. Have you installed the wordlists? (rbbt_config prepare wordlists)" if $stopwords.nil?
21
21
  text.scan(/\w+/).
22
22
  collect{|word| word.downcase.stem}.
23
23
  select{|word|
@@ -3,7 +3,7 @@
3
3
  class DictionaryNER
4
4
 
5
5
  A_INT = "a"[0]
6
- DOWNCASE_OFFSET = "A"[0] - "a"[0]
6
+ DOWNCASE_OFFSET = "A"[0].bytes.first - "a"[0].bytes.first
7
7
 
8
8
  require 'rbbt/bow/bow'
9
9
  # Divides a string of text into words. A slash separates words, only if the
@@ -102,7 +102,11 @@ class Tokenizer < SimpleDSL
102
102
  end
103
103
  def method_missing(name, *args, &block)
104
104
  @token = name.to_sym
105
- @block = block
105
+ if block_given?
106
+ @block = block
107
+ else
108
+ @block = args.first
109
+ end
106
110
  self
107
111
  end
108
112
 
@@ -72,7 +72,7 @@ module Organism
72
72
  def self.norm(org, to_entrez = nil)
73
73
  require 'rbbt/ner/rnorm'
74
74
  if to_entrez.nil?
75
- to_entrez = id_index(org, :native => 'Entrez Gene ID', :other => [supported_ids(org).first])
75
+ to_entrez = id_index(org, :native => 'Entrez Gene Id', :other => [supported_ids(org).first])
76
76
  end
77
77
 
78
78
  token_file = File.join(Rbbt.datadir, 'norm','config',org.to_s + '.config')
@@ -216,7 +216,7 @@ module Organism
216
216
  first = nil
217
217
  if native
218
218
  first = id_position(supported,native,options)
219
- raise "No match for native format '#{ native }'"
219
+ raise "No match for native format '#{ native }'" if first.nil?
220
220
  else
221
221
  first = 0
222
222
  end
@@ -24,7 +24,7 @@ module PubMed
24
24
 
25
25
  @@last = Time.now
26
26
 
27
- articles = xml.scan(/(<PubmedArticle>.*?<\/PubmedArticle>)/sm).flatten
27
+ articles = xml.scan(/(<PubmedArticle>.*?<\/PubmedArticle>)/smu).flatten
28
28
 
29
29
  if pmids.is_a? Array
30
30
  list = {}
@@ -53,6 +53,7 @@ module PubMed
53
53
  [:volume , "Journal/JournalIssue/Volume"],
54
54
  [:issn , "Journal/ISSN"],
55
55
  [:year , "Journal/JournalIssue/PubDate/Year"],
56
+ [:month , "Journal/JournalIssue/PubDate/Month"],
56
57
  [:pages , "Pagination/MedlinePgn"],
57
58
  [:abstract , "Abstract/AbstractText"],
58
59
  ]
@@ -63,6 +64,15 @@ module PubMed
63
64
  title.gsub(/(\w*[A-Z][A-Z]+\w*)/, '{\1}')
64
65
  end
65
66
 
67
+ def self.make_bibentry(lastname, year, title)
68
+ words = title.downcase.scan(/\w+/)
69
+ if words.first.length > 3
70
+ abrev = words.first
71
+ else
72
+ abrev = words[0..2].collect{|w| w.chars.first} * ""
73
+ end
74
+ [lastname.gsub(/\s/,'_'), year || "NOYEAR", abrev] * ""
75
+ end
66
76
  def self.parse_xml(xml)
67
77
  parser = LibXML::XML::Parser.string(xml)
68
78
  pubmed = parser.parse.find("/PubmedArticle").first
@@ -84,17 +94,20 @@ module PubMed
84
94
 
85
95
  bibentry = nil
86
96
  info[:author] = article.find("AuthorList/Author").collect do |author|
87
- lastname = author.find("LastName").first.content
88
- if author.find("ForeName").first.nil?
89
- forename = nil
90
- else
91
- forename = author.find("ForeName").first.content.split(/\s/).collect{|word| if word.length == 1; then word + '.'; else word; end} * " "
97
+ begin
98
+ lastname = author.find("LastName").first.content
99
+ if author.find("ForeName").first.nil?
100
+ forename = nil
101
+ else
102
+ forename = author.find("ForeName").first.content.split(/\s/).collect{|word| if word.length == 1; then word + '.'; else word; end} * " "
103
+ end
104
+ bibentry ||= make_bibentry lastname, info[:year], info[:title]
105
+ rescue
92
106
  end
93
- bibentry ||= [lastname, (info[:year] || "NOYEAR"), info[:title].scan(/\w+/)[0]] * ""
94
107
  [lastname, forename] * ", "
95
108
  end * " and "
96
109
 
97
- info[:bibentry] = bibentry.downcase
110
+ info[:bibentry] = bibentry.downcase if bibentry
98
111
 
99
112
  info[:pmc_pdf] = pubmed.find("PubmedData/ArticleIdList/ArticleId").select{|id| id[:IdType] == "pmc"}.first
100
113
 
@@ -122,6 +135,23 @@ module PubMed
122
135
  @gscholar_pdf ||= GoogleScholar::full_text_url title
123
136
  end
124
137
 
138
+ def full_text
139
+ return nil if pdf_url.nil?
140
+
141
+ text = nil
142
+ TmpFile.with_file do |pdf|
143
+
144
+ # Change user-agent, oh well...
145
+ `wget --user-agent=firefox #{ pdf_url } -O #{ pdf }`
146
+ TmpFile.with_file do |txt|
147
+ `pdftotext #{ pdf } #{ txt }`
148
+ text = Open.read(txt) if File.exists? txt
149
+ end
150
+ end
151
+
152
+ text
153
+ end
154
+
125
155
  def bibtex
126
156
  keys = [:author] + XML_KEYS.collect{|p| p.first } - [:bibentry]
127
157
  bibtex = "@article{#{bibentry},\n"
@@ -1,6 +1,20 @@
1
1
 
2
2
  class ArrayHash
3
3
 
4
+ def self.make_case_insensitive(hash)
5
+ new = {}
6
+ hash.each{|k,v|
7
+ new[k.to_s.downcase] = v
8
+ }
9
+
10
+ class << new; self; end.instance_eval{
11
+ alias_method :old_get, :[]
12
+ define_method(:[], proc{|key| old_get(key.to_s.downcase)})
13
+ }
14
+
15
+ new
16
+ end
17
+
4
18
  # Take two strings of elements separated by the character sep_char and join them
5
19
  # into one, removing repetitions.
6
20
  def self.merge_values_string(list1, list2, sep_char ='|')
@@ -33,8 +47,8 @@ class ArrayHash
33
47
 
34
48
 
35
49
  # Take an hash of arrays and a position and use the value at that position
36
- # of the arrays and build a new hash with that value as key, and the original
37
- # key prepended to the arrays. The options hash appcepts the following keys
50
+ # of the arrays to build a new hash with that value as key, and the original
51
+ # key prepended to the arrays. The options hash accepts the following keys
38
52
  # :case_insensitive, which defaults to true, and :index, which indicates that
39
53
  # the original key should be the value of the hash entry, instead of the
40
54
  # complete array of values.
@@ -60,69 +74,63 @@ class ArrayHash
60
74
  }
61
75
  }
62
76
 
63
- if case_insensitive
64
- class << new; self; end.instance_eval{
65
- alias_method :old_get, :[]
66
- define_method(:[], proc{|key| old_get(key.to_s.downcase)})
67
- }
68
- end
77
+ new = make_case_insensitive new if case_insensitive
69
78
 
70
79
  new
71
80
  end
72
81
 
73
- # Merge to hashes of arrays. Each hash contains a number of fields for each
82
+ # Merge one hash of arrays into another. Each hash contains a number of fields for each
74
83
  # entry. The pos1 and pos2 indicate what fields should be used to match
75
84
  # entries, the values for pos1 and pos2 can be an integer indicating the
76
85
  # position in the array or the symbol :main to refer to the key of the hash.
77
86
  # The options hash accepts the key :case_insensitive, which defaults to true.
78
87
  def self.merge(hash1, hash2, pos1 = :main, pos2 = :main, options = {})
79
-
80
88
  case_insensitive = options[:case_insensitive]; case_insensitive = true if case_insensitive.nil?
89
+
90
+ raise "Key #{ pos1 } should be an Interger or :main" unless Fixnum === pos1 || pos1.to_s.downcase == 'main'
91
+ raise "Key #{ pos2 } should be an Interger or :main" unless Fixnum === pos2 || pos2.to_s.downcase == 'main'
92
+
93
+
94
+ # Pullout if pos2 is not :main
95
+ hash2 = pullout(hash2, pos2) unless pos2.to_s.downcase == 'main'
96
+
97
+ # Translate if pos1 is not :main
81
98
  if pos1.to_s.downcase != 'main'
82
- index1 = pullout(hash1, pos1, options.merge(:index => true))
83
- elsif options[:case_insensitive]
99
+ index = pullout(hash1, pos1, options.merge(:index => true))
84
100
  new = {}
85
- hash1.each{|k,v|
86
- new[k.to_s.downcase] = v
87
- }
88
- class << new; self; end.instance_eval{
89
- alias_method :old_get, :[]
90
- define_method(:[], proc{|key| old_get(key.to_s.downcase)})
91
- }
92
- hash1 = new
101
+ hash2.each do |key, list|
102
+ next unless index[key]
103
+ new[index[key]] = list
104
+ end
105
+ hash2 = new
93
106
  end
94
107
 
108
+ # Get the lengths of the arrays on each hash (they should
109
+ # be the same for every entry)
95
110
  length1 = hash1.values.first.length
96
111
  length2 = hash2.values.first.length
112
+
113
+ if case_insensitive
114
+ hash1 = make_case_insensitive hash1
115
+ hash2 = make_case_insensitive hash2
116
+ end
97
117
 
98
118
  new = {}
99
- hash2.each{|key, values|
100
- case
101
- when pos2.to_s.downcase == 'main'
102
- k = key
103
- v = values
104
- when Fixnum === pos2
105
- k = values[pos2]
106
- v = values
107
- v.delete_at(pos2)
108
- v.unshift(key)
119
+ (hash1.keys + hash2.keys).uniq.each do |key|
120
+ if hash2[key].nil?
121
+ list2 = [''] * length2
109
122
  else
110
- raise "Format of second index not understood"
123
+ list2 = hash2[key]
111
124
  end
112
125
 
113
- code = (index1.nil? ? k : index1[k])
114
- if code
115
- code.split('|').each{|c|
116
- c = c.to_s.downcase if options[:case_insensitive]
117
- new[c] = hash1[c] || [''] * length1
118
- new[c] += v
119
- }
126
+ if hash1[key].nil?
127
+ list1 = [''] * length1
128
+ else
129
+ list1 = hash1[key]
120
130
  end
121
- }
122
131
 
123
- hash1.each{|key, values|
124
- new[key] ||= values + [''] * length2
125
- }
132
+ new[key] = list1 + list2
133
+ end
126
134
 
127
135
  new
128
136
  end
@@ -139,7 +147,7 @@ class ArrayHash
139
147
  new
140
148
  end
141
149
 
142
- # Clean structure for repeated values. If the same value apear two times use
150
+ # Clean structure for repeated values. If the same value appears two times
143
151
  # eliminate the one that appears latter on the values list (columns of the
144
152
  # ArrayHash are assumed to be sorted for importance) if the appear on the
145
153
  # same position, remove the one with the smaller vale of the code after
@@ -188,7 +196,7 @@ class ArrayHash
188
196
  @data = hash
189
197
  @main = main.to_s
190
198
 
191
- if fields.nil?
199
+ if fields.nil? || fields.empty?
192
200
  l = hash.values.first.length
193
201
  fields = []
194
202
  l.times{|i| fields << "F#{i}"}
@@ -207,10 +215,10 @@ class ArrayHash
207
215
  # Returns the position of a given field in the value arrays
208
216
  def field_pos(field)
209
217
  return :main if field == :main
210
- if field.downcase == self.main.downcase
218
+ if field.to_s.downcase == self.main.to_s.downcase
211
219
  return :main
212
220
  else
213
- @fields.collect{|f| f.downcase}.index(field.to_s.downcase)
221
+ @fields.collect{|f| f.downcase }.index(field.to_s.downcase)
214
222
  end
215
223
  end
216
224
 
@@ -222,6 +230,9 @@ class ArrayHash
222
230
  pos1 = self.field_pos(field)
223
231
  pos2 = other.field_pos(field)
224
232
 
233
+ raise "Field #{ field } not found in target hash" if pos1.nil?
234
+ raise "Field #{ field } not found in added hash" if pos2.nil?
235
+
225
236
  new = ArrayHash.merge(self.data, other.data, pos1, pos2, options)
226
237
  @data = new
227
238
  if pos2 == :main
@@ -8,7 +8,7 @@ module Index
8
8
  # where each element points to the first element in the row. +lexicon+
9
9
  # is the file containing the data.
10
10
  def self.index(lexicon, options = {})
11
- options = {:sep => "\t|\\|", :case_sensitive => true}.merge(options)
11
+ options = {:sep => "\t", :sep2 => '\|', :case_sensitive => true}.merge(options)
12
12
 
13
13
 
14
14
  data = Open.to_hash(lexicon, options)
@@ -17,10 +17,13 @@ module Open
17
17
  end
18
18
 
19
19
  def self.fields(line, sep = "\t")
20
- chunks = line.chomp.split(/(#{sep})/).select{|c| c !~ /^#{sep}$/ }
20
+ line << sep
21
+ line << "PLACEHOLDER"
22
+ chunks = line.split(/(#{sep})/).select{|c| c !~ /^#{sep}$/ }
21
23
  if line =~ /#{sep}$/
22
24
  chunks << ""
23
25
  end
26
+ chunks.pop
24
27
  chunks
25
28
  end
26
29
 
@@ -101,7 +104,7 @@ module Open
101
104
 
102
105
  wait(options[:nice]) if options[:nice]
103
106
  tmp = TmpFile.tmp_file("open-")
104
- `wget -O #{tmp} '#{url}' #{options[:quiet] ? '-q' : '' }`
107
+ `wget --user-agent=firefox -O #{tmp} '#{url}' #{options[:quiet] ? '-q' : '' }`
105
108
 
106
109
  if $?.success?
107
110
  if gziped(url)
@@ -197,7 +200,7 @@ module Open
197
200
  sep2 = options[:sep2] || "|"
198
201
  single = options[:single]
199
202
  single = false if single.nil?
200
- flatten = options[:flatten] || single
203
+ flatten = options[:flatten]
201
204
  flatten = single if flatten.nil?
202
205
 
203
206
  extra = [extra] if extra && ! extra.is_a?( Array)
@@ -214,7 +217,7 @@ module Open
214
217
  next if exclude and exclude.call(l)
215
218
  next if select and ! select.call(l)
216
219
 
217
- row_fields = self.fields(l, sep)
220
+ row_fields = self.fields(l.chomp, sep)
218
221
  id = row_fields[native]
219
222
  next if id.nil? || id == ""
220
223
 
@@ -19,11 +19,21 @@ class TestPubMed < Test::Unit::TestCase
19
19
  pmids = ['16438716', 17204154]
20
20
  assert(PubMed.get_article(pmids)[pmid].title == "Discovering semantic features in the literature: a foundation for building functional associations.")
21
21
  end
22
-
22
+
23
+ def test_full_text
24
+ pmid = '16438716'
25
+ assert(PubMed.get_article(pmid).full_text =~ /Discovering/)
26
+ end
27
+
23
28
  def test_query
24
29
  assert(PubMed.query('chagoyen[All Fields] AND ("loattrfull text"[sb] AND hasabstract[text])').include? '16438716')
25
30
  end
26
31
 
32
+ def test_bibentry
33
+ assert("vazquez2008sent", PubMed::Article.make_bibentry('vazquez', 2008, "SENT: Semantic features in text"))
34
+ assert("vazquez2008aes", PubMed::Article.make_bibentry('vazquez', 2008, "An Example System"))
35
+ end
36
+
27
37
  end
28
38
 
29
39
 
@@ -89,7 +89,7 @@ class TestArrayHash < Test::Unit::TestCase
89
89
  end
90
90
 
91
91
  def test_case_insensitive
92
- hash1 = {
92
+ hash1 = {
93
93
  'c' => ['A','B'],
94
94
  'd' => ['a','b'],
95
95
  }
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 2
8
- - 2
9
- version: 1.2.2
8
+ - 5
9
+ version: 1.2.5
10
10
  platform: ruby
11
11
  authors:
12
12
  - Miguel Vazquez
@@ -14,13 +14,14 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-05-27 00:00:00 +02:00
17
+ date: 2010-10-22 00:00:00 +02:00
18
18
  default_executable: rbbt_config
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: rake
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
24
25
  requirements:
25
26
  - - ">="
26
27
  - !ruby/object:Gem::Version
@@ -35,6 +36,7 @@ dependencies:
35
36
  name: simpleconsole
36
37
  prerelease: false
37
38
  requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
38
40
  requirements:
39
41
  - - ">="
40
42
  - !ruby/object:Gem::Version
@@ -47,6 +49,7 @@ dependencies:
47
49
  name: stemmer
48
50
  prerelease: false
49
51
  requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
50
53
  requirements:
51
54
  - - ">="
52
55
  - !ruby/object:Gem::Version
@@ -59,6 +62,7 @@ dependencies:
59
62
  name: progress-monitor
60
63
  prerelease: false
61
64
  requirement: &id004 !ruby/object:Gem::Requirement
65
+ none: false
62
66
  requirements:
63
67
  - - ">="
64
68
  - !ruby/object:Gem::Version
@@ -71,6 +75,7 @@ dependencies:
71
75
  name: simpleconsole
72
76
  prerelease: false
73
77
  requirement: &id005 !ruby/object:Gem::Requirement
78
+ none: false
74
79
  requirements:
75
80
  - - ">="
76
81
  - !ruby/object:Gem::Version
@@ -150,6 +155,33 @@ files:
150
155
  - tasks/install.rake
151
156
  - LICENSE
152
157
  - README.rdoc
158
+ - test/test_rbbt.rb
159
+ - test/rbbt/bow/test_bow.rb
160
+ - test/rbbt/bow/test_classifier.rb
161
+ - test/rbbt/bow/test_dictionary.rb
162
+ - test/rbbt/sources/test_organism.rb
163
+ - test/rbbt/sources/test_biomart.rb
164
+ - test/rbbt/sources/test_pubmed.rb
165
+ - test/rbbt/sources/test_polysearch.rb
166
+ - test/rbbt/sources/test_biocreative.rb
167
+ - test/rbbt/sources/test_entrez.rb
168
+ - test/rbbt/sources/test_go.rb
169
+ - test/rbbt/ner/test_rner.rb
170
+ - test/rbbt/ner/test_dictionaryNER.rb
171
+ - test/rbbt/ner/test_banner.rb
172
+ - test/rbbt/ner/test_rnorm.rb
173
+ - test/rbbt/ner/test_regexpNER.rb
174
+ - test/rbbt/ner/test_abner.rb
175
+ - test/rbbt/ner/rnorm/test_cue_index.rb
176
+ - test/rbbt/ner/rnorm/test_tokens.rb
177
+ - test/rbbt/util/test_misc.rb
178
+ - test/rbbt/util/test_tmpfile.rb
179
+ - test/rbbt/util/test_arrayHash.rb
180
+ - test/rbbt/util/test_filecache.rb
181
+ - test/rbbt/util/test_simpleDSL.rb
182
+ - test/rbbt/util/test_open.rb
183
+ - test/rbbt/util/test_index.rb
184
+ - test/test_helper.rb
153
185
  has_rdoc: true
154
186
  homepage: http://github.com/mikisvaz/rbbt
155
187
  licenses: []
@@ -160,6 +192,7 @@ rdoc_options:
160
192
  require_paths:
161
193
  - lib
162
194
  required_ruby_version: !ruby/object:Gem::Requirement
195
+ none: false
163
196
  requirements:
164
197
  - - ">="
165
198
  - !ruby/object:Gem::Version
@@ -167,6 +200,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
167
200
  - 0
168
201
  version: "0"
169
202
  required_rubygems_version: !ruby/object:Gem::Requirement
203
+ none: false
170
204
  requirements:
171
205
  - - ">="
172
206
  - !ruby/object:Gem::Version
@@ -176,7 +210,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
176
210
  requirements: []
177
211
 
178
212
  rubyforge_project:
179
- rubygems_version: 1.3.6
213
+ rubygems_version: 1.3.7
180
214
  signing_key:
181
215
  specification_version: 3
182
216
  summary: Bioinformatics and text mining toolbox