words 0.1.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.
data/.gitignore ADDED
@@ -0,0 +1,26 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## ECLIPSE
22
+ .loadpath
23
+ .project
24
+ .document
25
+
26
+ ## PROJECT::SPECIFIC
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Roja Buck
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.markdown ADDED
@@ -0,0 +1,85 @@
1
+ # Words - A fast, easy to use interface to WordNet® with cross ruby distribution compatability. #
2
+
3
+ ## About ##
4
+
5
+ Words implements a fast interface to [Wordnet®](http://wordnet.princeton.edu) which makes use of [Tokyo Cabinet](http://1978th.net/tokyocabinet/) and a FFI interface, [rufus-tokyo](http://github.com/jmettraux/rufus-tokyo), to provide cross ruby distribution compatability and blistering speed. I have attempted to provide ease of use in the form of a simple yet powerful api and installation is a sintch, we even include the data in it's tokyo data format (subject to the original wordnet licencing.)
6
+
7
+ ## Installation ##
8
+
9
+ First ensure you have [Tokyo Cabinet](http://1978th.net/tokyocabinet/) installed. It should be nice and easy...
10
+
11
+ After this it should be just a gem to install. For those of you with old rubygems versions first:
12
+
13
+ gem install gemcutter # These two steps are only necessary if you haven't
14
+ gem tumble # yet installed the gemcutter tools
15
+
16
+ Otherwise and after it's simply:
17
+
18
+ gem install words
19
+
20
+ Then your ready to rock and roll. :)
21
+
22
+ ## Build Data (Optional) ##
23
+
24
+ If you want to build the wordnet dataset file yourself, from the original wordnet files, you can use the bundled "build_dataset.rb"
25
+
26
+ ./build_dataset.rb -h #this will give you the usage
27
+ sudo ./build_dataset.rb #this will attempt to build the data locating the original wordnet files through a search...
28
+
29
+ ## Usage ##
30
+
31
+ Heres a few little examples of using words within your programs.
32
+
33
+
34
+ require 'rubygems'
35
+ require 'words'
36
+
37
+ data = Words::Words.new
38
+
39
+ # locate a word
40
+ lemma = data.find("bat")
41
+
42
+ lemma.to_s # => bat, noun/verb
43
+ lemma.available_pos.inspect # => [:noun, :verb]
44
+
45
+ lemma.synsets(:noun) # => array of synsets which represent nouns of the lemma bat
46
+ # or
47
+ lemma.nouns # => array of synsets which represent nouns of the lemma bat
48
+ lemma.verbs? #=> true
49
+
50
+ # specify a sense
51
+ sense = lemma.nouns.last
52
+ sense2 = lemma.nouns[2]
53
+
54
+ sense.gloss # => a club used for hitting a ball in various games
55
+ sense2.words # => ["cricket bat", "bat"]
56
+ sense.relations.first # => "Semantic hypernym relation between n02806379 and n03053474"
57
+
58
+ sense.relations(:hyponym) # => Array of hyponyms associated with the sense
59
+ # or
60
+ sense.hyponyms # => Array of hyponyms associated with the sense
61
+ sense.hyponyms? # => true
62
+
63
+ sense.relations.first.is_semantic? # => true
64
+ sense.relations.first.source_word # => nil
65
+ sense.relations.first.destination # => the synset of n03053474
66
+
67
+ sense.derivationally_related_forms.first.is_semantic? # => false
68
+ sense.derivationally_related_forms.first.source_word # => "bat"
69
+ sense.derivationally_related_forms.first.destination_word # => "bat"
70
+ sense.derivationally_related_forms.first.destination # => the synset of v01413191
71
+
72
+
73
+ ## Note on Patches/Pull Requests ##
74
+
75
+ * Fork the project.
76
+ * Make your feature addition or bug fix.
77
+ * Add tests for it. This is important so I don't break it in a
78
+ future version unintentionally.
79
+ * Commit, do not mess with rakefile, version, or history.
80
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
81
+ * Send me a pull request. Bonus points for topic branches.
82
+
83
+ ## Copyright ##
84
+
85
+ Copyright (c) 2010 Roja Buck. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,54 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "words"
8
+ gem.summary = %Q{A fast, easy to use interface to WordNet® with cross ruby distribution compatability.}
9
+ gem.description = %Q{A fast, easy to use interface to WordNet® with cross ruby distribution compatability. We use TokyoCabinet to store the dataset and the excellent rufus-tokyo to interface with it. This allows us to have full compatability across ruby distributions while still remaining both fast and simple to use.}
10
+ gem.email = "roja@arbia.co.uk"
11
+ gem.homepage = "http://github.com/roja/words"
12
+ gem.authors = ["Roja Buck"]
13
+ gem.add_development_dependency "trollop", ">= 1.15"
14
+ gem.add_dependency 'rufus-tokyo', '>= 1.0.5'
15
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
+ end
17
+ Jeweler::GemcutterTasks.new
18
+ rescue LoadError
19
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
20
+ end
21
+
22
+ require 'rake/testtask'
23
+ Rake::TestTask.new(:test) do |test|
24
+ test.libs << 'lib' << 'test'
25
+ test.pattern = 'test/**/test_*.rb'
26
+ test.verbose = true
27
+ end
28
+
29
+ begin
30
+ require 'rcov/rcovtask'
31
+ Rcov::RcovTask.new do |test|
32
+ test.libs << 'test'
33
+ test.pattern = 'test/**/test_*.rb'
34
+ test.verbose = true
35
+ end
36
+ rescue LoadError
37
+ task :rcov do
38
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
39
+ end
40
+ end
41
+
42
+ task :test => :check_dependencies
43
+
44
+ task :default => :test
45
+
46
+ require 'rake/rdoctask'
47
+ Rake::RDocTask.new do |rdoc|
48
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
49
+
50
+ rdoc.rdoc_dir = 'rdoc'
51
+ rdoc.title = "words #{version}"
52
+ rdoc.rdoc_files.include('README*')
53
+ rdoc.rdoc_files.include('lib/**/*.rb')
54
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
data/build_dataset.rb ADDED
@@ -0,0 +1,102 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # std includes
4
+ require 'pathname'
5
+
6
+ # gem includes
7
+ require 'rubygems'
8
+ require 'trollop'
9
+ require 'pstore'
10
+ require 'rufus-tokyo'
11
+
12
+ POS_FILE_TYPES = %w{ adj adv noun verb }
13
+ POS_FILE_TYPE_TO_SHORT = { 'adj' => 'a', 'adv' => 'r', 'noun' => 'n', 'verb' => 'v' }
14
+
15
+ def locate_wordnet(base_dir)
16
+ puts "Checking #{base_dir} & spcific children for wordnet files..." if VERBOSE
17
+ path = Pathname.new base_dir
18
+ return nil unless path.exist?
19
+ return path if (path + "data.noun").exist?
20
+ return path + "dict" if (path + "dict/data.noun").exist?
21
+ end
22
+
23
+ if __FILE__ == $0
24
+
25
+ puts "Words Dataset Constructor 2010 (c) Roja Buck"
26
+
27
+ opts = Trollop::options do
28
+ opt :verbose, "Output verbose program detail.", :default => false
29
+ opt :wordnet, "Location of the wordnet dictionary directory", :default => "Search..."
30
+ end
31
+ puts "Verbose mode enabled" if (VERBOSE = opts[:verbose])
32
+
33
+ wordnet_dir = nil
34
+ if opts[:wordnet] == "Search..."
35
+ ['/usr/share/wordnet', '/usr/local/share/wordnet', '/usr/local/WordNet-3.0'].each do |potential_dir|
36
+ break unless (wordnet_dir = locate_wordnet potential_dir).nil?
37
+ end
38
+ abort( "Unable to locate wordnet dictionary. To specify check --help." ) if wordnet_dir.nil?
39
+ else
40
+ wordnet_dir = locate_wordnet opts[:wordnet]
41
+ abort( "Unable to locate wordnet dictionary in directory #{opts[:wordnet]}. Please check and try again." ) if wordnet_dir.nil?
42
+ end
43
+
44
+ # At this point we know we should have a wordnet directory within wordnet_dir
45
+ puts "Found wordnet files in #{wordnet_dir}..." if VERBOSE
46
+
47
+ index_files = POS_FILE_TYPES.map { |pos| wordnet_dir + "index.#{pos}" }
48
+ data_files = POS_FILE_TYPES.map { |pos| wordnet_dir + "data.#{pos}" }
49
+
50
+ (index_files + data_files).each do |required_file|
51
+ abort( "Unable to locate #{required_file} within the wordnet dictionary. Please check your wordnet copy is valid and try again." ) unless required_file.exist?
52
+ abort( "Cannot get readable permissions to #{required_file} within the wordnet dictionary. Please check the file permissions and try again." ) unless required_file.readable?
53
+ end
54
+
55
+ # At this point we know we have the correct files, though we don't know there validity
56
+ puts "Validated existance of wordnet files in #{wordnet_dir}..." if VERBOSE
57
+
58
+ # Build data
59
+
60
+ hash = Rufus::Tokyo::Table.new("data/wordnet.tct")
61
+ POS_FILE_TYPES.each do |file_pos|
62
+
63
+ puts "Building #{file_pos} indexes..." if VERBOSE
64
+
65
+ # add indexes
66
+ (wordnet_dir + "index.#{file_pos}").each_line do |index_line|
67
+ next if index_line[0, 2] == " "
68
+ index_parts = index_line.split(" ")
69
+
70
+ lemma, pos, synset_count, pointer_count = index_parts.shift, index_parts.shift, index_parts.shift.to_i, index_parts.shift.to_i
71
+ pointer_symbols = Array.new(pointer_count).map { POS_FILE_TYPE_TO_SHORT[file_pos] + index_parts.shift }
72
+ sense_count = index_parts.shift
73
+ tagsense_count = pos + index_parts.shift
74
+ synset_ids = Array.new(synset_count).map { POS_FILE_TYPE_TO_SHORT[file_pos] + index_parts.shift }
75
+
76
+ hash[lemma] = { "synset_ids" => '', "tagsense_counts" => '' } if hash[lemma].nil?
77
+
78
+ hash[lemma] = { "lemma" => lemma, "synset_ids" => (hash[lemma]["synset_ids"].split('|') + synset_ids).join('|'), # append synsets
79
+ "tagsense_counts" => (hash[lemma]["tagsense_counts"].split('|') << tagsense_count).join('|') } # append pointer symbols
80
+ end
81
+
82
+ puts "Adding #{file_pos} data..." if VERBOSE
83
+
84
+ # add data
85
+ (wordnet_dir + "data.#{file_pos}").each_line do |data_line|
86
+ next if data_line[0, 2] == " "
87
+ data_line, gloss = data_line.split(" | ")
88
+ data_parts = data_line.split(" ")
89
+
90
+ synset_id, lexical_filenum, synset_type, word_count = POS_FILE_TYPE_TO_SHORT[file_pos] + data_parts.shift, data_parts.shift, data_parts.shift, data_parts.shift.to_i(16)
91
+ words = Array.new(word_count).map { "#{data_parts.shift}.#{data_parts.shift}" }
92
+ relations = Array.new(data_parts.shift.to_i).map { "#{data_parts.shift}.#{data_parts.shift}.#{data_parts.shift}.#{data_parts.shift}" }
93
+
94
+ hash[synset_id] = { "synset_id" => synset_id, "lexical_filenum" => lexical_filenum, "synset_type" => synset_type,
95
+ "words" => words.join('|'), "relations" => relations.join('|'), "gloss" => gloss }
96
+ end
97
+
98
+
99
+ end
100
+ hash.close
101
+
102
+ end
data/data/wordnet.tct ADDED
Binary file
data/examples.rb ADDED
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'lib/words'
4
+
5
+ if __FILE__ == $0
6
+
7
+ wordnet = Words::Words.new
8
+
9
+ puts wordnet.find('bat')
10
+ puts wordnet.find('bat').available_pos.inspect
11
+ puts wordnet.find('bat').lemma
12
+ puts wordnet.find('bat').synsets('noun')
13
+ puts wordnet.find('bat').synsets('noun').last.words.inspect
14
+ puts wordnet.find('bat').synsets('noun').last.relations
15
+ wordnet.find('bat').synsets('noun').last.relations.each { |relation| puts relation.inspect }
16
+ puts wordnet.find('bat').synsets('noun').last.methods
17
+ puts wordnet.find('bat').synsets('noun').last.hyponyms?
18
+ puts wordnet.find('bat').synsets('noun').last.participle_of_verbs?
19
+
20
+ puts wordnet.find('bat').synsets('noun').last.relations(:hyponym)
21
+ puts wordnet.find('bat').synsets('noun').last.relations("~")
22
+ puts wordnet.find('bat').synsets('verb').last.inspect
23
+ puts wordnet.find('bat').synsets('verb').last.words
24
+ puts wordnet.find('bat').synsets('verb').last.words_with_num.inspect
25
+
26
+ wordnet.close
27
+
28
+ end
data/lib/words.rb ADDED
@@ -0,0 +1,229 @@
1
+ # std includes
2
+ require 'pathname'
3
+ require 'set'
4
+
5
+ # gem includes
6
+ require 'rubygems'
7
+ require 'rufus-tokyo'
8
+
9
+ module Words
10
+
11
+ class WordnetConnection
12
+
13
+ def self.wordnet_connection
14
+ @@wordnet_connection
15
+ end
16
+
17
+ def self.wordnet_connection=(x)
18
+ @@wordnet_connection = x
19
+ end
20
+
21
+ end
22
+
23
+ class Relation
24
+
25
+ RELATION_TO_SYMBOL = { "-c" => :member_of_this_domain_topic, "+" => :derivationally_related_form, "%p" => :part_meronym, "~i" => :instance_hyponym, "@" => :hypernym,
26
+ ";r" => :domain_of_synset_region, "!" => :antonym, "#p" => :part_holonym, "%s" => :substance_meronym, ";u" => :domain_of_synset_usage,
27
+ "-r" => :member_of_this_domain_region, "#s" => :substance_holonym, "=" => :attribute, "-u" => :member_of_this_domain_usage, ";c" => :domain_of_synset_topic,
28
+ "%m"=> :member_meronym, "~" => :hyponym, "@i" => :instance_hypernym, "#m" => :member_holonym, "$" => :verb_group, ">" => :cause, "*" => :entailment,
29
+ "\\" => :pertainym, "<" => :participle_of_verb, "&" => :similar_to, "^" => :see_also }
30
+ SYMBOL_TO_RELATION = RELATION_TO_SYMBOL.invert
31
+
32
+ def initialize(relation_construct, source_synset)
33
+ @symbol, @dest_synset_id, @pos, @source_dest = relation_construct.split('.')
34
+ @dest_synset_id = @pos + @dest_synset_id
35
+ @symbol = RELATION_TO_SYMBOL[@symbol]
36
+ @source_synset = source_synset
37
+ end
38
+
39
+ def is_semantic?
40
+ @source_dest == "0000"
41
+ end
42
+
43
+ def source_word
44
+ is_semantic? ? @source_word = nil : @source_word = @source_synset.words[@source_dest[0..1].to_i(16)-1] unless defined? @source_word
45
+ @source_word
46
+ end
47
+
48
+ def destination_word
49
+ is_semantic? ? @destination_word = nil : @destination_word = destination.words[@source_dest[2..3].to_i(16)-1] unless defined? @destination_word
50
+ @destination_word
51
+ end
52
+
53
+ def relation_type?(type)
54
+ case
55
+ when SYMBOL_TO_RELATION.include?(type.to_sym)
56
+ type.to_sym == @symbol
57
+ when RELATION_TO_SYMBOL.include?(pos.to_s)
58
+ POINTER_TO_SYMBOL[type.to_sym] == @symbol
59
+ else
60
+ false
61
+ end
62
+ end
63
+
64
+ def relation_type
65
+ @symbol
66
+ end
67
+
68
+ def destination
69
+ @destination = Synset.new(@dest_synset_id) unless defined? @destination
70
+ @destination
71
+ end
72
+
73
+ def to_s
74
+ @to_s = "#{relation_type.to_s.gsub('_', ' ').capitalize} relation between #{@source_synset.synset_id}'s word \"#{source_word}\" and #{@dest_synset_id}'s word \"#{destination_word}\"" if !is_semantic? && !defined?(@to_s)
75
+ @to_s = "Semantic #{relation_type.to_s.gsub('_', ' ')} relation between #{@source_synset.synset_id} and #{@dest_synset_id}" if is_semantic? && !defined?(@to_s)
76
+ @to_s
77
+ end
78
+
79
+ def inspect
80
+ { :symbol => @symbol, :dest_synset_id => @dest_synset_id, :pos => @pos, :source_dest => @source_dest }.inspect
81
+ end
82
+
83
+ end
84
+
85
+ class Synset
86
+
87
+ SYNSET_TYPE_TO_SYMBOL = {"n" => :noun, "v" => :verb, "a" => :adjective, "r" => :adverb, "s" => :adjective_satallite }
88
+
89
+ def initialize(synset_id)
90
+ @synset_hash = WordnetConnection::wordnet_connection[synset_id]
91
+ # construct some conveniance menthods for relation type access
92
+ Relation::SYMBOL_TO_RELATION.keys.each do |relation_type|
93
+ self.class.send(:define_method, "#{relation_type}s?") do
94
+ relations(relation_type).size > 0
95
+ end
96
+ self.class.send(:define_method, "#{relation_type}s") do
97
+ relations(relation_type)
98
+ end
99
+ end
100
+ end
101
+
102
+ def synset_type
103
+ SYNSET_TYPE_TO_SYMBOL[@synset_hash["synset_type"]]
104
+ end
105
+
106
+ def words
107
+ @words = words_with_num.map { |word_with_num| word_with_num[:word] } unless defined? @words
108
+ @words
109
+ end
110
+
111
+ def size
112
+ words.size
113
+ end
114
+
115
+ def words_with_num
116
+ @words_with_num = @synset_hash["words"].split('|').map { |word| word_parts = word.split('.'); { :word => word_parts[0].gsub('_', ' '), :num => word_parts[1] } } unless defined? @words_with_num
117
+ @words_with_num
118
+ end
119
+
120
+ def synset_id
121
+ @synset_hash["synset_id"]
122
+ end
123
+
124
+ def gloss
125
+ @synset_hash["gloss"]
126
+ end
127
+
128
+ def inspect
129
+ @synset_hash.inspect
130
+ end
131
+
132
+ def relations(type = :all)
133
+ @relations = @synset_hash["relations"].split('|').map { |relation| Relation.new(relation, self) } unless defined? @relations
134
+ case
135
+ when Relation::SYMBOL_TO_RELATION.include?(type.to_sym)
136
+ @relations.select { |relation| relation.relation_type == type.to_sym }
137
+ when Relation::RELATION_TO_SYMBOL.include?(type.to_s)
138
+ @relations.select { |relation| relation.relation_type == Relation::RELATION_TO_SYMBOL[type.to_s] }
139
+ else
140
+ @relations
141
+ end
142
+ end
143
+
144
+ def to_s
145
+ @to_s = "#{synset_type.to_s.capitalize} including word(s): #{words.map { |word| '"' + word + '"' }.join(', ')} meaning: #{gloss}" unless defined? @to_s
146
+ @to_s
147
+ end
148
+
149
+ end
150
+
151
+ class Lemma
152
+
153
+ POS_TO_SYMBOL = {"n" => :noun, "v" => :verb, "a" => :adjective, "r" => :adverb}
154
+ SYMBOL_TO_POS = POS_TO_SYMBOL.invert
155
+
156
+ def initialize(lemma_hash)
157
+ @lemma_hash = lemma_hash
158
+ # construct some conveniance menthods for relation type access
159
+ SYMBOL_TO_POS.keys.each do |pos|
160
+ self.class.send(:define_method, "#{pos}s?") do
161
+ synsets(pos).size > 0
162
+ end
163
+ self.class.send(:define_method, "#{pos}s") do
164
+ synsets(pos)
165
+ end
166
+ end
167
+ end
168
+
169
+ def lemma
170
+ @lemma = @lemma_hash["lemma"].gsub('_', ' ') unless defined? @lemma
171
+ @lemma
172
+ end
173
+
174
+ def available_pos
175
+ @available_pos = synset_ids.map { |synset_id| POS_TO_SYMBOL[synset_id[0,1]] }.uniq unless defined? @available_pos
176
+ @available_pos
177
+ end
178
+
179
+ def to_s
180
+ @to_s = [lemma, " " + available_pos.join("/")].join(",") unless defined? @to_s
181
+ @to_s
182
+ end
183
+
184
+ def synsets(pos = :all)
185
+ relevent_synsets = case
186
+ when SYMBOL_TO_POS.include?(pos.to_sym)
187
+ synset_ids.select { |synset_id| synset_id[0,1] == SYMBOL_TO_POS[pos.to_sym] }
188
+ when POS_TO_SYMBOL.include?(pos.to_s)
189
+ synset_ids.select { |synset_id| synset_id[0,1] == pos.to_s }
190
+ else
191
+ synset_ids
192
+ end
193
+ relevent_synsets.map { |synset_id| Synset.new synset_id }
194
+ end
195
+
196
+ def synset_ids
197
+ @synset_ids = @lemma_hash["synset_ids"].split('|') unless defined? @synset_ids
198
+ @synset_ids
199
+ end
200
+
201
+ def inspect
202
+ @lemma_hash.inspect
203
+ end
204
+
205
+ alias word lemma
206
+
207
+ end
208
+
209
+ class Words
210
+
211
+ def initialize(path = 'data/wordnet.tct')
212
+ if (Pathname.new path).exist?
213
+ WordnetConnection::wordnet_connection = Rufus::Tokyo::Table.new(path)
214
+ else
215
+ abort("Failed to locate the words database at #{(Pathname.new path).realpath}")
216
+ end
217
+ end
218
+
219
+ def find(word)
220
+ Lemma.new WordnetConnection::wordnet_connection[word]
221
+ end
222
+
223
+ def close
224
+ WordnetConnection::wordnet_connection.close
225
+ end
226
+
227
+ end
228
+
229
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,9 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
6
+ require 'words'
7
+
8
+ class Test::Unit::TestCase
9
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestWords < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: words
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Roja Buck
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-01-14 00:00:00 +00:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: trollop
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "1.15"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: rufus-tokyo
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.5
34
+ version:
35
+ description: "A fast, easy to use interface to WordNet\xC2\xAE with cross ruby distribution compatability. We use TokyoCabinet to store the dataset and the excellent rufus-tokyo to interface with it. This allows us to have full compatability across ruby distributions while still remaining both fast and simple to use."
36
+ email: roja@arbia.co.uk
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files:
42
+ - LICENSE
43
+ - README.markdown
44
+ files:
45
+ - .gitignore
46
+ - LICENSE
47
+ - README.markdown
48
+ - Rakefile
49
+ - VERSION
50
+ - build_dataset.rb
51
+ - data/wordnet.tct
52
+ - examples.rb
53
+ - lib/words.rb
54
+ - test/helper.rb
55
+ - test/test_words.rb
56
+ has_rdoc: true
57
+ homepage: http://github.com/roja/words
58
+ licenses: []
59
+
60
+ post_install_message:
61
+ rdoc_options:
62
+ - --charset=UTF-8
63
+ require_paths:
64
+ - lib
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: "0"
70
+ version:
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: "0"
76
+ version:
77
+ requirements: []
78
+
79
+ rubyforge_project:
80
+ rubygems_version: 1.3.5
81
+ signing_key:
82
+ specification_version: 3
83
+ summary: "A fast, easy to use interface to WordNet\xC2\xAE with cross ruby distribution compatability."
84
+ test_files:
85
+ - test/test_words.rb
86
+ - test/helper.rb