rbbt 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. data/LICENSE +20 -0
  2. data/README.rdoc +17 -0
  3. data/bin/rbbt_config +180 -0
  4. data/install_scripts/classifier/R/classify.R +36 -0
  5. data/install_scripts/classifier/Rakefile +140 -0
  6. data/install_scripts/get_abner.sh +2 -0
  7. data/install_scripts/get_banner.sh +25 -0
  8. data/install_scripts/get_biocreative.sh +72 -0
  9. data/install_scripts/get_crf++.sh +26 -0
  10. data/install_scripts/get_entrez.sh +4 -0
  11. data/install_scripts/get_go.sh +4 -0
  12. data/install_scripts/get_polysearch.sh +8 -0
  13. data/install_scripts/ner/Rakefile +206 -0
  14. data/install_scripts/ner/config/default.rb +52 -0
  15. data/install_scripts/norm/Rakefile +218 -0
  16. data/install_scripts/norm/config/cue_default.rb +10 -0
  17. data/install_scripts/norm/config/tokens_default.rb +79 -0
  18. data/install_scripts/norm/functions.sh +21 -0
  19. data/install_scripts/organisms/Rakefile +25 -0
  20. data/install_scripts/organisms/cgd.Rakefile +84 -0
  21. data/install_scripts/organisms/human.Rakefile +145 -0
  22. data/install_scripts/organisms/mgi.Rakefile +77 -0
  23. data/install_scripts/organisms/pombe.Rakefile +40 -0
  24. data/install_scripts/organisms/rake-include.rb +258 -0
  25. data/install_scripts/organisms/rgd.Rakefile +88 -0
  26. data/install_scripts/organisms/sgd.Rakefile +66 -0
  27. data/install_scripts/organisms/tair.Rakefile +54 -0
  28. data/install_scripts/organisms/worm.Rakefile +109 -0
  29. data/install_scripts/stopwords +1 -0
  30. data/install_scripts/wordlists/consonants +897 -0
  31. data/install_scripts/wordlists/stopwords +1 -0
  32. data/lib/rbbt/bow/bow.rb +87 -0
  33. data/lib/rbbt/bow/classifier.rb +118 -0
  34. data/lib/rbbt/bow/dictionary.rb +218 -0
  35. data/lib/rbbt/ner/abner.rb +34 -0
  36. data/lib/rbbt/ner/banner.rb +73 -0
  37. data/lib/rbbt/ner/regexpNER.rb +62 -0
  38. data/lib/rbbt/ner/rner.rb +227 -0
  39. data/lib/rbbt/ner/rnorm/cue_index.rb +80 -0
  40. data/lib/rbbt/ner/rnorm/tokens.rb +213 -0
  41. data/lib/rbbt/ner/rnorm.rb +142 -0
  42. data/lib/rbbt/sources/biocreative.rb +75 -0
  43. data/lib/rbbt/sources/biomart.rb +106 -0
  44. data/lib/rbbt/sources/entrez.rb +211 -0
  45. data/lib/rbbt/sources/go.rb +40 -0
  46. data/lib/rbbt/sources/organism.rb +197 -0
  47. data/lib/rbbt/sources/polysearch.rb +88 -0
  48. data/lib/rbbt/sources/pubmed.rb +111 -0
  49. data/lib/rbbt/util/arrayHash.rb +255 -0
  50. data/lib/rbbt/util/filecache.rb +72 -0
  51. data/lib/rbbt/util/index.rb +69 -0
  52. data/lib/rbbt/util/misc.rb +101 -0
  53. data/lib/rbbt/util/open.rb +207 -0
  54. data/lib/rbbt/util/simpleDSL.rb +87 -0
  55. data/lib/rbbt/util/tmpfile.rb +19 -0
  56. data/lib/rbbt/version.rb +10 -0
  57. data/lib/rbbt.rb +86 -0
  58. data/tasks/install.rake +123 -0
  59. metadata +114 -0
@@ -0,0 +1,207 @@
1
+ require 'rbbt/util/tmpfile'
2
+ require 'rbbt'
3
+
4
+
5
+ # Provides with a few helper functions to read and write files, as well # as
6
+ # for accessing remote files. It supports caching the files.
7
+ module Open
8
+
9
+ class DirectoryNotFoundError < StandardError; end
10
+
11
+ private
12
+
13
+ @@remote_cachedir = File.join(Rbbt.cachedir, 'open-remote/')
14
+ FileUtils.mkdir @@remote_cachedir unless File.exist? @@remote_cachedir
15
+
16
+ # If no data is specified and the url is found in the cache the saved
17
+ # contents are returned, if not found, the url is opened and the contents of
18
+ # that are returned. If +data+ is specified then it is saved in the
19
+ # cache under +url+. To match +url+ in the cache a MD5 digest is used.
20
+ # The location of the cache directory is bu default
21
+ # File.join(Rbbt.cachedir, 'open-remote/').
22
+ def self.cache(url, data = nil)
23
+ require 'digest/md5'
24
+ digest = Digest::MD5.hexdigest(url)
25
+
26
+ if data
27
+ Open.write(File.join(@@remote_cachedir, digest), data)
28
+ return nil
29
+ else
30
+ if File.exist? File.join(@@remote_cachedir, digest)
31
+ return File.open(File.join(@@remote_cachedir, digest)){|file| file.read }
32
+ else
33
+ return nil
34
+ end
35
+ end
36
+ end
37
+
38
+ # Checks if +url+ is a remote file.
39
+ def self.remote(url)
40
+ url =~ /^(?:http|ssh|https|ftp):\/\//
41
+ end
42
+
43
+
44
+ # Checks if +url+ is a gzip file.
45
+ def self.gziped(url)
46
+ if remote(url)
47
+ return url =~ /\.gz$/ || url =~ /\.gz\?.*$/
48
+ else
49
+ return url =~ /\.gz$/
50
+ end
51
+ end
52
+
53
+ public
54
+ # Reads the file specified by url. If the url es local it just opens
55
+ # the file, if it is remote if checks the cache first. In any case, it
56
+ # unzips gzip files automatically.
57
+ #
58
+ # Options:
59
+ # * :quiet => Do not print the progress of downloads
60
+ # * :nocache => do not use the cache.
61
+ #
62
+ def self.read(url, options = {})
63
+
64
+ case
65
+ when remote(url)
66
+ if !options[:nocache] && data = cache(url)
67
+ return data
68
+ end
69
+
70
+ tmp = TmpFile.tmp_file("open-")
71
+ `wget -O #{tmp} '#{url}' #{options[:quiet] ? '-q' : '' }`
72
+ if gziped(url)
73
+ `mv #{tmp} #{tmp}.gz; gunzip #{tmp}`
74
+ end
75
+
76
+
77
+ cache(url, File.open(tmp){|file| file.read}) unless options[:nocache]
78
+
79
+ data = File.open(tmp){|file| file.read}
80
+ FileUtils.rm tmp
81
+ return data
82
+ when IO === url
83
+ url.read
84
+ else
85
+ return File.open(url){|file| file.read}
86
+ end
87
+
88
+ end
89
+
90
+ # Writes the contents on the path specified by filename
91
+ #
92
+ # Options:
93
+ # * :force => Create directories if missing.
94
+ def self.write(filename, content, options = {})
95
+ if !File.exist? File.dirname(filename)
96
+ if options[:force]
97
+ FileUtils.makedirs(File.dirname(filename))
98
+ else
99
+ raise Open::DirectoryNotFoundError, "Directory #{File.dirname(filename)} was not found"
100
+ end
101
+ end
102
+
103
+ File.open(filename,'w'){|f|
104
+ f.write content
105
+ }
106
+
107
+ nil
108
+ end
109
+
110
+ # Writes the contents on the path specified by filename. If the file
111
+ # is present it appends the contents.
112
+ #
113
+ # Options:
114
+ # * :force => Create directories if missing.
115
+ def self.append(filename, content, options ={})
116
+ if !File.exist? File.dirname(filename)
117
+ if options[:force]
118
+ FileUtils.makedirs(File.dirname(filename))
119
+ else
120
+ raise Open::DirectoryNotFoundError, "Directory #{File.dirname(filename)} was not found"
121
+ end
122
+ end
123
+
124
+ f = File.open(filename,'a')
125
+ f.write content
126
+ f.close
127
+
128
+ nil
129
+ end
130
+
131
+
132
+
133
+ # Reads a file with rows with elementes separated by a given pattern
134
+ # and builds a hash with it. The keys of the hash are the elements in
135
+ # the :native positions, by default the first (0). The value for each
136
+ # key is an array with one position for each of the rest possible
137
+ # positions specified in :extra, by default all but the :native. Since
138
+ # the native key may be repeated, each of the positions of the values
139
+ # is in itself an array. There are a number of options to change this
140
+ # behaviour.
141
+ #
142
+ # Options:
143
+ # * :native => position of the elements that will constitute the keys. By default 0.
144
+ # * :extra => positions of the rest of elements. By default all but :native. It can be an array of positions or a single position.
145
+ # * :sep => pattern to use in splitting the lines into elements, by default "\t"
146
+ # * :flatten => flatten the array of arrays that hold the values for each key into a simple array.
147
+ # * :single => for each key select only the first of the values, instead of the complete array.
148
+ # * :fix => A Proc that is called to pre-process the line
149
+ # * :exclude => A Proc that is called to check if the line must be excluded from the process.
150
+ def self.to_hash(filename, options = {})
151
+ native = options[:native] || 0
152
+ extra = options[:extra]
153
+ exclude = options[:exclude]
154
+ fix = options[:fix]
155
+ sep = options[:sep] || "\t"
156
+ single = options[:single]
157
+ single = false if single.nil?
158
+ flatten = options[:flatten] || single
159
+ flatten = single if flatten.nil?
160
+
161
+ extra = [extra] if extra && ! extra.is_a?( Array)
162
+
163
+ data = {}
164
+ Open.read(filename).each{|l|
165
+ l = fix.call(l) if fix
166
+ next if exclude and exclude.call(l)
167
+
168
+ parts = l.chomp.split(/#{sep}/)
169
+ id = parts[native]
170
+ next if id.nil? || id == ""
171
+
172
+ data[id] ||= []
173
+ if extra
174
+ fields = extra
175
+ else
176
+ fields = (0..(parts.length - 1)).to_a - [native]
177
+ end
178
+ fields.each_with_index{|pos,i|
179
+ data[id][i] ||= []
180
+ data[id][i] << parts[pos]
181
+ }
182
+ }
183
+
184
+ if flatten
185
+ data.each{|key, values|
186
+ if values
187
+ values.flatten!
188
+ values.collect!{|v|
189
+ if v != ""
190
+ v
191
+ else
192
+ nil
193
+ end
194
+ }
195
+ values.compact!
196
+ else
197
+ nil
198
+ end
199
+ }
200
+ end
201
+
202
+ data = Hash[*(data.collect{|key,values| [key, values.first]}).flatten] if single
203
+
204
+ data
205
+ end
206
+
207
+ end
@@ -0,0 +1,87 @@
1
+ require 'parse_tree_extensions'
2
+ require 'parse_tree'
3
+ require 'ruby2ruby'
4
+
5
+ # This class helps designing DSL in ruby based on method_missing. Class
6
+ # is initialize with a block of code or a file with the code, and it is
7
+ # given a method to be invoked instead of method missing. This class
8
+ # deals simply with making the method_missing alias and removing it and
9
+ # executing the block of file with code.
10
+ class SimpleDSL
11
+
12
+ class ConfigFileMissingError < StandardError; end
13
+
14
+ private
15
+
16
+ def hook_method(method = nil)
17
+ method ||= :DSL_action
18
+ @@restore_name = ("restore_DSL_" + method.to_s).to_sym
19
+ @@method_name = method.to_sym
20
+
21
+ class << self
22
+ @restore_stack ||= []
23
+ @restore_stack << @@restore_name
24
+ alias_method(@@restore_name, :method_missing)
25
+ alias_method(:method_missing, @@method_name)
26
+ end
27
+ end
28
+
29
+ def unhook_method
30
+ class << self
31
+ alias_method(:method_missing, @restore_stack.pop)
32
+ end
33
+ end
34
+
35
+ public
36
+
37
+ def parse(method = nil, actions = nil, &block)
38
+
39
+ actions ||= block
40
+
41
+ hook_method(method)
42
+
43
+ # Execute
44
+ if actions.is_a? Proc
45
+
46
+ @config[@@method_name] = actions.to_ruby.collect[1..-2].join
47
+
48
+ instance_eval &actions
49
+ elsif File.exists?(actions)
50
+
51
+ @config[@@method_name] = File.open(actions).read
52
+
53
+ eval File.open(actions).read
54
+ end
55
+
56
+ unhook_method
57
+
58
+ end
59
+
60
+
61
+ # Processes a DSL. +method+ is the name of the method executed instead
62
+ # of method_missing. The code to be evaluated as a DSL is either
63
+ # specified in +&block+ or in the file pointed by +file+.
64
+ def initialize(method = nil, file = nil, &block)
65
+ @config = {}
66
+ if file
67
+ raise ConfigFileMissingError.new "File '#{ file }' is missing. Have you installed the config files? (rbbt_config install norm)." unless File.exists? file
68
+ parse(method, file)
69
+ end
70
+
71
+ if block
72
+ parse(method, block)
73
+ end
74
+ end
75
+
76
+ # Returns the code with the DSL that was executed. If it came from a
77
+ # block it was turned to string using ruby2ruby.
78
+ def config(action = nil)
79
+ if action
80
+ @config[action.to_sym]
81
+ else
82
+ @config[:DSL_action]
83
+ end
84
+ end
85
+ end
86
+
87
+
@@ -0,0 +1,19 @@
1
+ require 'fileutils'
2
+ require 'rbbt'
3
+
4
+
5
+ module TmpFile
6
+
7
+ # Creates a random file name, with the given suffix and a random number
8
+ # up to +max+
9
+ def self.random_name( s="",max=10000000)
10
+ n = rand(max)
11
+ s << n.to_s
12
+ s
13
+ end
14
+
15
+ # Creates a random filename in the temporary directory
16
+ def self.tmp_file(s = "",max=10000000)
17
+ File.join(Rbbt.tmpdir,random_name(s,max))
18
+ end
19
+ end
@@ -0,0 +1,10 @@
1
+ module Rbbt
2
+ module VERSION #:nodoc:
3
+ MAJOR = 1
4
+ MINOR = 0
5
+ TINY = 0
6
+
7
+ STRING = [MAJOR, MINOR, TINY].join('.')
8
+ self
9
+ end
10
+ end
data/lib/rbbt.rb ADDED
@@ -0,0 +1,86 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require 'fileutils'
5
+ require 'yaml'
6
+
7
+
8
+ # This module implements a number of utilities aimed at performing Text
9
+ # Mining of BioMedical data. I includes the following:
10
+ #
11
+ # * Multi-purpose Named Entity Recognition and Normalization. And training data for
12
+ # Gene Mention from the BioCreative competition.
13
+ # * Document Classification
14
+ # * Interfaces to Gene Ontology, Entrez Gene, BioMart and PubMed
15
+ #
16
+ # There are a number of classes to help gather and integrate the
17
+ # information from all the sources. It is design to be very flexible,
18
+ # but with a sensible set of defaults.
19
+ #
20
+ module Rbbt
21
+
22
+ class NoConfig < Exception; end
23
+
24
+ @@rootdir = File.dirname(File.dirname(__FILE__))
25
+
26
+ @@datadir = @@cachedir = @@tmpdir = nil
27
+
28
+ def self.load_config
29
+ if File.exist?(File.join(@@rootdir, 'rbbt.config'))
30
+ config = YAML.load_file(File.join(@@rootdir, 'rbbt.config'))
31
+ if config.is_a? Hash
32
+ @@datadir = config['datadir'] if config['datadir']
33
+ @@cachedir = config['cachedir'] if config['cachedir']
34
+ @@tmpdir = config['tmpdir'] if config['tmpdir']
35
+ end
36
+ end
37
+
38
+
39
+
40
+ if File.exist?(File.join(ENV['HOME'], '.rbbt'))
41
+ config = YAML.load_file(File.join(ENV['HOME'], '.rbbt') )
42
+ if config.is_a? Hash
43
+ @@datadir = config['datadir'] if config['datadir']
44
+ @@cachedir = config['cachedir'] if config['cachedir']
45
+ @@tmpdir = config['tmpdir'] if config['tmpdir']
46
+ end
47
+ end
48
+
49
+ if @@datadir.nil? || @@cachedir.nil? || @@tmpdir.nil?
50
+ raise NoConfig, "rbbt not configured. Edit #{File.join(@@rootdir, 'rbbt.config')} or $HOME/.rbbt"
51
+ end
52
+
53
+
54
+ FileUtils.mkdir_p @@datadir unless File.exist? @@datadir
55
+ FileUtils.mkdir_p @@cachedir unless File.exist? @@cachedir
56
+ FileUtils.mkdir_p @@tmpdir unless File.exist? @@tmpdir
57
+
58
+
59
+
60
+ # For some reason banner.jar must be loaded before abner.jar
61
+ ENV['CLASSPATH'] ||= ""
62
+ ENV['CLASSPATH'] += ":" + %w(banner abner).collect{|pkg| File.join(datadir, "third_party/#{pkg}/#{ pkg }.jar")}.join(":")
63
+ end
64
+
65
+ def self.rootdir
66
+ @@rootdir
67
+ end
68
+
69
+
70
+ def self.datadir
71
+ @@datadir
72
+ end
73
+
74
+ def self.cachedir
75
+ @@cachedir
76
+ end
77
+
78
+ def self.tmpdir
79
+ @@tmpdir
80
+ end
81
+
82
+
83
+ self.load_config
84
+ end
85
+
86
+
@@ -0,0 +1,123 @@
1
+ require 'rbbt'
2
+
3
+ $datadir = Rbbt.datadir
4
+ $scriptdir = File.join(Rbbt.rootdir, '/install_scripts')
5
+
6
+
7
+ task 'abner' do
8
+ directory = "#{$datadir}/third_party/abner/"
9
+ if !File.exists?(File.join(directory, 'abner.jar')) || $force
10
+ FileUtils.mkdir_p directory
11
+ `cd #{directory};rm -Rf *; #{$scriptdir}/get_abner.sh;cd -`
12
+ end
13
+ end
14
+
15
+ task 'banner' do
16
+ directory = "#{$datadir}/third_party/banner/"
17
+ if !File.exists?(File.join(directory, 'banner.jar')) || $force
18
+ FileUtils.mkdir_p directory
19
+ `cd #{directory};rm -Rf *; #{$scriptdir}/get_banner.sh;cd -`
20
+ end
21
+ end
22
+
23
+ task 'crf++' do
24
+ directory = "#{$datadir}/third_party/crf++/"
25
+ if !File.exists?(File.join(directory, 'ruby/CRFPP.so')) || $force
26
+ FileUtils.mkdir_p directory
27
+ `cd #{directory};rm -Rf *; #{$scriptdir}/get_crf++.sh;cd -`
28
+ end
29
+ end
30
+
31
+
32
+
33
+ task 'wordlists' do
34
+ FileUtils.cp_r File.join($scriptdir, 'wordlists/'), $datadir
35
+ end
36
+
37
+ task 'polysearch' do
38
+ directory = "#{$datadir}/dbs/polysearch/"
39
+ if !File.exists?(File.join(directory,'disease.txt')) || $force
40
+ FileUtils.mkdir_p directory
41
+ `cd #{directory}/; rm * -Rf; #{$scriptdir}/get_polysearch.sh;cd -`
42
+ end
43
+ end
44
+
45
+
46
+ task '3party' => %w(abner banner crf++)
47
+
48
+ task 'entrez' do
49
+ directory = "#{$datadir}/dbs/entrez/"
50
+ if !File.exists?(File.join(directory,'gene_info')) || $force
51
+ FileUtils.mkdir_p directory
52
+ `cd #{directory}/; rm * -Rf; #{$scriptdir}/get_entrez.sh;cd -`
53
+ end
54
+ end
55
+
56
+ task 'go' do
57
+ directory = "#{$datadir}/dbs/go/"
58
+ if !File.exists?(File.join(directory,'gene_ontology.obo')) || $force
59
+ FileUtils.mkdir_p directory
60
+ `cd #{directory}/; rm * -Rf; #{$scriptdir}/get_go.sh;cd -`
61
+ end
62
+ end
63
+
64
+ task 'biocreative' do
65
+ directory = "#{$datadir}/biocreative/"
66
+ if !File.exists?(File.join(directory, 'BC2GN')) || $force
67
+ FileUtils.mkdir_p directory
68
+ `cd #{directory};rm -Rf *; #{$scriptdir}/get_biocreative.sh;cd -`
69
+ end
70
+ end
71
+
72
+
73
+ task 'datasets' => %w(entrez biocreative)
74
+
75
+ task 'organisms' do
76
+ directory = "#{$datadir}/organisms"
77
+ FileUtils.mkdir_p directory
78
+ %w(Rakefile rake-include.rb).each{|f|
79
+ FileUtils.cp_r File.join($scriptdir, "organisms/#{ f }"), directory
80
+ }
81
+ Dir.glob(File.join($scriptdir, "organisms/*.Rakefile")).each{|f|
82
+ org = File.basename(f).sub(/.Rakefile/,'')
83
+ if !File.exists?(File.join(directory, org))
84
+ FileUtils.mkdir_p File.join(directory, org)
85
+ end
86
+ FileUtils.cp f , File.join(directory, "#{ org }/Rakefile")
87
+ }
88
+ end
89
+
90
+ task 'ner' do
91
+ directory = "#{$datadir}/ner"
92
+ FileUtils.mkdir_p directory
93
+ %w(Rakefile config).each{|f|
94
+ FileUtils.cp_r File.join($scriptdir, "ner/#{ f }"), directory
95
+ }
96
+
97
+ %w(data model results).each{|d|
98
+ FileUtils.mkdir_p File.join(directory, d)
99
+ }
100
+ end
101
+
102
+ task 'norm' do
103
+ directory = "#{$datadir}/norm"
104
+ FileUtils.mkdir_p directory
105
+ %w(Rakefile config).each{|f|
106
+ FileUtils.cp_r File.join($scriptdir, "norm/#{ f }"), directory
107
+ }
108
+ %w(results).each{|d|
109
+ FileUtils.mkdir_p File.join(directory, d)
110
+ }
111
+ end
112
+
113
+ task 'classifier' do
114
+ directory = "#{$datadir}/classifier"
115
+ FileUtils.mkdir_p directory
116
+ %w(Rakefile R).each{|f|
117
+ FileUtils.cp_r File.join($scriptdir, "classifier/#{ f }"), directory
118
+ }
119
+ %w(data model results).each{|d|
120
+ FileUtils.mkdir_p File.join(directory, d)
121
+ }
122
+ end
123
+
metadata ADDED
@@ -0,0 +1,114 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rbbt
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Miguel Vazquez
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-10-29 00:00:00 +01:00
13
+ default_executable: rbbt_config
14
+ dependencies: []
15
+
16
+ description: |-
17
+ This toolbox includes modules for text-mining, like Named Entity Recognition and Normalization and document
18
+ classification, as well as data integration modules that interface with PubMed, Entrez Gene, BioMart.
19
+ email: miguel.vazquez@fdi.ucm.es
20
+ executables:
21
+ - rbbt_config
22
+ extensions: []
23
+
24
+ extra_rdoc_files:
25
+ - LICENSE
26
+ - README.rdoc
27
+ files:
28
+ - install_scripts/classifier/R/classify.R
29
+ - install_scripts/classifier/Rakefile
30
+ - install_scripts/get_abner.sh
31
+ - install_scripts/get_banner.sh
32
+ - install_scripts/get_biocreative.sh
33
+ - install_scripts/get_crf++.sh
34
+ - install_scripts/get_entrez.sh
35
+ - install_scripts/get_go.sh
36
+ - install_scripts/get_polysearch.sh
37
+ - install_scripts/ner/Rakefile
38
+ - install_scripts/ner/config/default.rb
39
+ - install_scripts/norm/Rakefile
40
+ - install_scripts/norm/config/cue_default.rb
41
+ - install_scripts/norm/config/tokens_default.rb
42
+ - install_scripts/norm/functions.sh
43
+ - install_scripts/organisms/Rakefile
44
+ - install_scripts/organisms/cgd.Rakefile
45
+ - install_scripts/organisms/human.Rakefile
46
+ - install_scripts/organisms/mgi.Rakefile
47
+ - install_scripts/organisms/pombe.Rakefile
48
+ - install_scripts/organisms/rake-include.rb
49
+ - install_scripts/organisms/rgd.Rakefile
50
+ - install_scripts/organisms/sgd.Rakefile
51
+ - install_scripts/organisms/tair.Rakefile
52
+ - install_scripts/organisms/worm.Rakefile
53
+ - install_scripts/stopwords
54
+ - install_scripts/wordlists/consonants
55
+ - install_scripts/wordlists/stopwords
56
+ - lib/rbbt.rb
57
+ - lib/rbbt/bow/bow.rb
58
+ - lib/rbbt/bow/classifier.rb
59
+ - lib/rbbt/bow/dictionary.rb
60
+ - lib/rbbt/ner/abner.rb
61
+ - lib/rbbt/ner/banner.rb
62
+ - lib/rbbt/ner/regexpNER.rb
63
+ - lib/rbbt/ner/rner.rb
64
+ - lib/rbbt/ner/rnorm.rb
65
+ - lib/rbbt/ner/rnorm/cue_index.rb
66
+ - lib/rbbt/ner/rnorm/tokens.rb
67
+ - lib/rbbt/sources/biocreative.rb
68
+ - lib/rbbt/sources/biomart.rb
69
+ - lib/rbbt/sources/entrez.rb
70
+ - lib/rbbt/sources/go.rb
71
+ - lib/rbbt/sources/organism.rb
72
+ - lib/rbbt/sources/polysearch.rb
73
+ - lib/rbbt/sources/pubmed.rb
74
+ - lib/rbbt/util/arrayHash.rb
75
+ - lib/rbbt/util/filecache.rb
76
+ - lib/rbbt/util/index.rb
77
+ - lib/rbbt/util/misc.rb
78
+ - lib/rbbt/util/open.rb
79
+ - lib/rbbt/util/simpleDSL.rb
80
+ - lib/rbbt/util/tmpfile.rb
81
+ - lib/rbbt/version.rb
82
+ - tasks/install.rake
83
+ - LICENSE
84
+ - README.rdoc
85
+ has_rdoc: true
86
+ homepage: http://github.com/mikisvaz/rbbt
87
+ licenses: []
88
+
89
+ post_install_message:
90
+ rdoc_options:
91
+ - --charset=UTF-8
92
+ require_paths:
93
+ - lib
94
+ required_ruby_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: "0"
99
+ version:
100
+ required_rubygems_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: "0"
105
+ version:
106
+ requirements: []
107
+
108
+ rubyforge_project:
109
+ rubygems_version: 1.3.5
110
+ signing_key:
111
+ specification_version: 3
112
+ summary: Bioinformatics and text mining toolbox
113
+ test_files: []
114
+