wordnet 0.0.5 → 1.0.0.pre.126

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 (54) hide show
  1. data/.gemtest +0 -0
  2. data/History.rdoc +5 -0
  3. data/LICENSE +9 -9
  4. data/Manifest.txt +39 -0
  5. data/README.rdoc +60 -0
  6. data/Rakefile +47 -267
  7. data/TODO +9 -0
  8. data/WordNet30-license.txt +31 -0
  9. data/examples/add-laced-boots.rb +35 -0
  10. data/examples/clothes-with-collars.rb +42 -0
  11. data/examples/clothesWithTongues.rb +0 -0
  12. data/examples/domainTree.rb +0 -0
  13. data/examples/memberTree.rb +0 -0
  14. data/lib/wordnet/constants.rb +259 -296
  15. data/lib/wordnet/lexicallink.rb +34 -0
  16. data/lib/wordnet/lexicon.rb +158 -386
  17. data/lib/wordnet/mixins.rb +62 -0
  18. data/lib/wordnet/model.rb +78 -0
  19. data/lib/wordnet/morph.rb +25 -0
  20. data/lib/wordnet/semanticlink.rb +52 -0
  21. data/lib/wordnet/sense.rb +55 -0
  22. data/lib/wordnet/sumoterm.rb +21 -0
  23. data/lib/wordnet/synset.rb +404 -859
  24. data/lib/wordnet/utils.rb +126 -0
  25. data/lib/wordnet/word.rb +119 -0
  26. data/lib/wordnet.rb +113 -76
  27. data/spec/lib/helpers.rb +102 -133
  28. data/spec/linguawordnet.tests.rb +38 -0
  29. data/spec/wordnet/lexicon_spec.rb +96 -186
  30. data/spec/wordnet/model_spec.rb +59 -0
  31. data/spec/wordnet/semanticlink_spec.rb +42 -0
  32. data/spec/wordnet/synset_spec.rb +27 -256
  33. data/spec/wordnet/word_spec.rb +58 -0
  34. data/spec/wordnet_spec.rb +52 -0
  35. data.tar.gz.sig +0 -0
  36. metadata +227 -188
  37. metadata.gz.sig +0 -0
  38. data/ChangeLog +0 -720
  39. data/README +0 -93
  40. data/Rakefile.local +0 -46
  41. data/convertdb.rb +0 -417
  42. data/examples/addLacedBoots.rb +0 -27
  43. data/examples/clothesWithCollars.rb +0 -36
  44. data/rake/dependencies.rb +0 -76
  45. data/rake/helpers.rb +0 -384
  46. data/rake/manual.rb +0 -755
  47. data/rake/packaging.rb +0 -112
  48. data/rake/publishing.rb +0 -303
  49. data/rake/rdoc.rb +0 -35
  50. data/rake/style.rb +0 -62
  51. data/rake/svn.rb +0 -469
  52. data/rake/testing.rb +0 -192
  53. data/rake/verifytask.rb +0 -64
  54. data/utils.rb +0 -838
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require "wntestcase"
4
+
5
+ class LexiconTests < WordNet::TestCase
6
+
7
+ OldBaseballOffset = '00466621%n'
8
+ BaseballOffset = '00471613%n'
9
+
10
+ def test_perl_tests
11
+ synset = nil
12
+ synset2 = nil
13
+
14
+ begin
15
+ synset = @lexicon.lookup_synsets_by_key( BaseballOffset )
16
+ rescue WordNet::LookupError
17
+ synset = @lexicon.lookup_synsets_by_key( OldBaseballOffset )
18
+ end
19
+
20
+ assert_instance_of WordNet::Synset, synset
21
+
22
+ words = ''
23
+ synset.hyponyms.each do |bb_synset|
24
+ bb_synset.words += ["ballser"]
25
+ bb_synset.words.each {|word| words += "#{word}, "}
26
+ end
27
+ assert_match( /hardball/, words )
28
+
29
+ words = ''
30
+ synset2 = @lexicon.lookup_synsets( "travel", WordNet::Verb, 2 )
31
+ synset2.words.each {|word| words += "#{word}, "}
32
+ assert_match( /journey/, words )
33
+
34
+ assert_equal 4, @lexicon.familiarity( "boy", WordNet::Noun )
35
+ assert_equal "blue", @lexicon.morph( "bluest", WordNet::Adjective )
36
+ assert_match( /baseball/, "#{synset}" )
37
+ end
38
+ end
@@ -6,25 +6,15 @@ BEGIN {
6
6
 
7
7
  libdir = basedir + 'lib'
8
8
 
9
- $LOAD_PATH.unshift( libdir ) unless $LOAD_PATH.include?( libdir )
9
+ $LOAD_PATH.unshift( basedir.to_s ) unless $LOAD_PATH.include?( basedir.to_s )
10
+ $LOAD_PATH.unshift( libdir.to_s ) unless $LOAD_PATH.include?( libdir.to_s )
10
11
  }
11
12
 
12
- begin
13
- require 'fileutils'
14
- require 'tmpdir'
15
- require 'bdb'
16
- require 'spec/runner'
17
- require 'spec/lib/helpers'
18
-
19
- require 'wordnet/lexicon'
20
- rescue LoadError
21
- unless Object.const_defined?( :Gem )
22
- require 'rubygems'
23
- retry
24
- end
25
- raise
26
- end
13
+ require 'rspec'
14
+ require 'sequel'
27
15
 
16
+ require 'spec/lib/helpers'
17
+ require 'wordnet'
28
18
 
29
19
 
30
20
  #####################################################################
@@ -32,216 +22,136 @@ end
32
22
  #####################################################################
33
23
 
34
24
  describe WordNet::Lexicon do
35
- include WordNet::SpecHelpers
36
-
37
- TEST_WORDS = {
38
- 'activity' => WordNet::Noun,
39
- 'sword' => WordNet::Noun,
40
- 'density' => WordNet::Noun,
41
- 'burly' => WordNet::Adjective,
42
- 'wispy' => WordNet::Adjective,
43
- 'traditional' => WordNet::Adjective,
44
- 'sit' => WordNet::Verb,
45
- 'take' => WordNet::Verb,
46
- 'joust' => WordNet::Verb,
47
- }
48
-
49
-
50
- before( :each ) do
51
- @path = make_tempdir()
52
- end
53
25
 
54
-
55
- after( :each ) do
56
- FileUtils.rm_rf @path, :verbose => $DEBUG
26
+ before( :all ) do
27
+ setup_logging( :fatal )
28
+ @devdb = Pathname( 'wordnet-defaultdb/data/wordnet-defaultdb/wordnet30.sqlite' ).
29
+ expand_path
57
30
  end
58
31
 
59
-
60
-
61
- #################################################################
62
- ### T E S T S
63
- #################################################################
64
-
65
- it "defaults to being in :readonly mode" do
66
- env = stub( "bdb environment handle", :open_db => nil )
67
- BDB::Env.should_receive( :new ).
68
- with( @path.to_s, WordNet::Lexicon::ENV_FLAGS_RO, WordNet::Lexicon::ENV_OPTIONS ).
69
- and_return( env )
70
-
71
- lex = WordNet::Lexicon.new( @path.to_s )
72
-
73
- lex.should be_readonly()
74
- lex.should_not be_readwrite()
32
+ after( :all ) do
33
+ reset_logging()
75
34
  end
76
-
77
- it "can be created in :writable mode" do
78
- env = stub( "bdb environment handle", :open_db => nil )
79
- BDB::Env.should_receive( :new ).
80
- with( @path.to_s, WordNet::Lexicon::ENV_FLAGS_RW, WordNet::Lexicon::ENV_OPTIONS ).
81
- and_return( env )
82
35
 
83
- lex = WordNet::Lexicon.new( @path.to_s, :writable )
36
+ context "the default_db_uri method" do
84
37
 
85
- lex.should_not be_readonly()
86
- lex.should be_readwrite()
87
- end
88
-
89
- it "passes a read/write flagset to BDB when created in :readwrite mode" do
90
- env = stub( "bdb environment handle", :open_db => nil )
91
- BDB::Env.should_receive( :new ).
92
- with( @path.to_s, WordNet::Lexicon::ENV_FLAGS_RW, WordNet::Lexicon::ENV_OPTIONS ).
93
- and_return( env )
38
+ it "uses the wordnet-defaultdb database gem (if available)" do
39
+ Gem.should_receive( :datadir ).with( 'wordnet-defaultdb' ).at_least( :once ).
40
+ and_return( '/tmp/foo' )
41
+ FileTest.should_receive( :exist? ).with( '/tmp/foo/wordnet30.sqlite' ).
42
+ and_return( true )
94
43
 
95
- lex = WordNet::Lexicon.new( @path.to_s, :readwrite )
96
-
97
- lex.should_not be_readonly()
98
- lex.should be_readwrite()
99
- end
100
-
101
-
102
- describe "created in readonly mode" do
103
-
104
- before( :each ) do
105
- @env = mock( "bdb environment handle" )
106
- BDB::Env.stub!( :new ).and_return( @env )
107
- @env.stub!( :open_db )
108
-
109
- @lexicon = WordNet::Lexicon.new( @path.to_s, :readonly )
44
+ WordNet::Lexicon.default_db_uri.should == "sqlite:/tmp/foo/wordnet30.sqlite"
110
45
  end
111
46
 
47
+ it "uses the development version of the wordnet-defaultdb database gem if it's " +
48
+ "not installed" do
49
+ Gem.should_receive( :datadir ).with( 'wordnet-defaultdb' ).
50
+ and_return( nil )
51
+ FileTest.should_receive( :exist? ).with( @devdb.to_s ).
52
+ and_return( true )
112
53
 
113
- it "doesn't try to remove logs" do
114
- @env.should_not_receive( :log_archive )
115
- @lexicon.clean_logs
54
+ WordNet::Lexicon.default_db_uri.should == "sqlite:#{@devdb}"
116
55
  end
117
-
118
-
119
- end
120
56
 
57
+ it "returns nil if there is no default database" do
58
+ Gem.should_receive( :datadir ).with( 'wordnet-defaultdb' ).
59
+ and_return( nil )
60
+ FileTest.should_receive( :exist? ).with( @devdb.to_s ).
61
+ and_return( false )
121
62
 
122
- describe "created in readwrite mode" do
63
+ WordNet::Lexicon.default_db_uri.should be_nil()
64
+ end
123
65
 
124
- before( :each ) do
125
- @env = mock( "bdb environment handle" )
126
- BDB::Env.stub!( :new ).and_return( @env )
127
- @env.stub!( :open_db )
66
+ end
128
67
 
129
- @lexicon = WordNet::Lexicon.new( @path.to_s, :readwrite )
130
- end
131
-
132
68
 
133
- it "can be closed" do
134
- @env.should_receive( :close )
135
- @lexicon.close
136
- end
69
+ it "raises an exception if created with no arguments and no defaultdb is available" do
70
+ Gem.should_receive( :datadir ).with( 'wordnet-defaultdb' ).at_least( :once ).
71
+ and_return( nil )
72
+ FileTest.should_receive( :exist? ).with( @devdb.to_s ).
73
+ and_return( false )
137
74
 
138
- it "provides a delegator for the checkpoint method of the underlying database" do
139
- @env.should_receive( :checkpoint )
140
- @lexicon.checkpoint
141
- end
142
-
143
- it "provides an interface to clean up database transaction logs" do
144
- @env.should_receive( :log_archive ).with( BDB::ARCH_ABS ).
145
- and_return([ :log1, :log2 ])
146
- File.should_receive( :chmod ).with( 0777, :log1 )
147
- File.should_receive( :delete ).with( :log1 )
148
- File.should_receive( :chmod ).with( 0777, :log2 )
149
- File.should_receive( :delete ).with( :log2 )
150
-
151
- @lexicon.clean_logs
152
- end
153
-
154
-
75
+ expect {
76
+ WordNet::Lexicon.new
77
+ }.to raise_error( WordNet::LexiconError, /no default wordnetsql/i )
155
78
  end
156
-
157
79
 
158
- describe "with a converted WordNet database" do
80
+
81
+ context "with the default database", :requires_database => true do
159
82
 
160
83
  before( :all ) do
161
- @basedir = Pathname.new( __FILE__ ).dirname.parent.parent
162
- @datadir = @basedir + 'ruby-wordnet'
84
+ @lexicon = WordNet::Lexicon.new
163
85
  end
164
86
 
165
- before( :each ) do
166
- pending "you haven't converted the WordNet datafiles yet -- try 'rake convert'" unless
167
- @datadir.directory?
168
-
169
- @lexicon = WordNet::Lexicon.new( @datadir.to_s )
170
- end
87
+ context "via its index operator" do
171
88
 
89
+ it "can look up a Synset by ID" do
90
+ rval = @lexicon[ 101219722 ]
91
+ rval.should be_a( WordNet::Synset )
92
+ rval.words.map( &:to_s ).should include( 'carrot' )
93
+ end
172
94
 
173
- TEST_WORDS.each do |word, pos|
174
- it "returns a Fixnum value for the familiarity of #{word}(#{pos})" do
175
- @lexicon.familiarity( word, pos ).should be_an_instance_of( Fixnum )
95
+ it "can look up a Word by ID" do
96
+ rval = @lexicon[ 21338 ]
97
+ rval.should be_a( WordNet::Word )
98
+ rval.lemma.should == 'carrot'
176
99
  end
177
- end
178
-
179
-
180
- it "returns the root word as the morphological conversion of a dictionary word it knows about" do
181
- @lexicon.morph( "angriest", WordNet::Adjective ).should == 'angry'
182
- end
183
100
 
101
+ it "can look up the synset for a word and a sense" do
102
+ ss = @lexicon[ :boot, 3 ]
103
+ ss.should be_a( WordNet::Synset )
104
+ ss.definition.should == 'footwear that covers the whole foot and lower leg'
105
+ end
184
106
 
185
- it "returns nil as the morphological conversion of a dictionary word it doesn't know about" do
186
- @lexicon.morph( "Passomoquoddy", WordNet::Noun ).should be_nil()
187
107
  end
188
108
 
109
+ end
110
+
111
+ context "with a PostgreSQL database", :requires_pg do
189
112
 
190
- it "returns the 'reverse morph' of dictionary words it knows about" do
191
- @lexicon.reverse_morph( "angry" ).should == 'angriest%a'
113
+ before( :all ) do
114
+ @lexicon = WordNet::Lexicon.new( 'postgres://localhost/wordnet30' )
192
115
  end
193
116
 
117
+ context "via its index operator" do
194
118
 
195
- it "tries looking up a failing via its morphological conversion if the original fails" do
196
- synsets = @lexicon.lookup_synsets( 'angriest', WordNet::Adjective )
197
-
198
- synsets.should_not be_nil()
199
- synsets.first.should be_an_instance_of( WordNet::Synset )
200
- synsets.first.words.should include( 'angry' )
201
- end
119
+ it "can look up a Synset by ID" do
120
+ rval = @lexicon[ 101219722 ]
121
+ rval.should be_a( WordNet::Synset )
122
+ rval.words.map( &:to_s ).should include( 'carrot' )
123
+ end
202
124
 
125
+ it "can look up a Word by ID" do
126
+ rval = @lexicon[ 21338 ]
127
+ rval.should be_a( WordNet::Word )
128
+ rval.lemma.should == 'carrot'
129
+ end
203
130
 
204
- it "returns only the requested sense if a sense is specified" do
205
- synset = @lexicon.lookup_synsets( 'run', WordNet::Verb, 4 )
206
- synset.should be_an_instance_of( WordNet::Synset )
207
- synset.words.first.should =~ /operate/i
208
- end
209
-
210
-
211
- it "can find every compound sense of a word in its dictionary" do
212
- words = @lexicon.grep( 'thing' )
213
-
214
- words.should have(10).members
215
- words.should include( 'thing%n' )
216
- words.should include( 'thing-in-itself%n' )
217
- words.should include( 'thingamabob%n' )
218
- words.should include( 'thingamajig%n' )
219
- words.should include( 'thingmabob%n' )
220
- words.should include( 'thingmajig%n' )
221
- words.should include( 'things%n' )
222
- words.should include( 'thingumabob%n' )
223
- words.should include( 'thingumajig%n' )
224
- words.should include( 'thingummy%n' )
225
- end
226
-
227
-
228
- TEST_WORDS.each do |word, pos|
229
- it "can look up the synset #{word}(#{pos}) by word and part-of-speech" do
230
- synsets = @lexicon.lookup_synsets( word, pos )
231
-
232
- synsets.should have_at_least(1).members
233
- synsets.each do |ss|
234
- ss.should be_an_instance_of( WordNet::Synset )
235
- end
131
+ it "can look up the synset for a word and a sense" do
132
+ ss = @lexicon[ :boot, 3 ]
133
+ ss.should be_a( WordNet::Synset )
134
+ ss.definition.should == 'footwear that covers the whole foot and lower leg'
236
135
  end
237
- end
238
136
 
137
+ it "can look up a synset for a word and a substring of its definition" do
138
+ ss = @lexicon[ :boot, 'kick' ]
139
+ ss.should be_a( WordNet::Synset )
140
+ ss.definition.should =~ /kick/i
141
+ end
239
142
 
240
- it "can act as a factory for new synsets" do
241
- @lexicon.create_synset( "Ruby", WordNet::Noun ).
242
- should be_an_instance_of( WordNet::Synset )
243
- end
143
+ it "can look up a synset for a word and a part of speech" do
144
+ ss = @lexicon[ :boot, :verb ]
145
+ ss.should be_a( WordNet::Synset )
146
+ ss.definition.should =~ /cause to load/i
147
+ end
244
148
 
149
+ it "can look up a synset for a word and an abbreviated part of speech" do
150
+ ss = @lexicon[ :boot, :n ]
151
+ ss.should be_a( WordNet::Synset )
152
+ ss.definition.should =~ /act of delivering/i
153
+ end
154
+ end
245
155
  end
246
156
 
247
157
  end
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ BEGIN {
4
+ require 'pathname'
5
+ basedir = Pathname.new( __FILE__ ).dirname.parent.parent
6
+
7
+ libdir = basedir + 'lib'
8
+
9
+ $LOAD_PATH.unshift( basedir.to_s ) unless $LOAD_PATH.include?( basedir.to_s )
10
+ $LOAD_PATH.unshift( libdir.to_s ) unless $LOAD_PATH.include?( libdir.to_s )
11
+ }
12
+
13
+ require 'rspec'
14
+ require 'sequel'
15
+
16
+ # Use Sequel's own spec helpers
17
+ if Gem::Specification.respond_to?( :find_by_name )
18
+ sequel_spec = Gem::Specification.find_by_name( 'sequel' )
19
+ gem_basedir = sequel_spec.full_gem_path
20
+ $LOAD_PATH.unshift( gem_basedir ) unless $LOAD_PATH.include?( gem_basedir )
21
+ else
22
+ gem_basedir = Pathname( Gem.required_location('sequel', 'sequel.rb') ).dirname.parent.to_s
23
+ $LOAD_PATH.unshift( gem_basedir ) unless $LOAD_PATH.include?( gem_basedir )
24
+ end
25
+ require 'spec/model/spec_helper'
26
+
27
+ require 'spec/lib/helpers'
28
+ require 'wordnet'
29
+ require 'wordnet/model'
30
+
31
+
32
+ #####################################################################
33
+ ### C O N T E X T S
34
+ #####################################################################
35
+
36
+ describe WordNet::Model do
37
+
38
+ before( :all ) do
39
+ setup_logging( :fatal )
40
+ end
41
+
42
+ before( :each ) do
43
+ MODEL_DB.reset
44
+ end
45
+
46
+ after( :all ) do
47
+ reset_logging()
48
+ end
49
+
50
+ it "propagates database handle changes to all of its subclasses" do
51
+ subclass = WordNet::Model( :tests )
52
+ newdb = Sequel.mock
53
+ WordNet::Model.db = newdb
54
+ subclass.db.should equal( newdb )
55
+ end
56
+
57
+
58
+ end
59
+
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ BEGIN {
4
+ require 'pathname'
5
+
6
+ basedir = Pathname.new( __FILE__ ).dirname.parent
7
+ libdir = basedir + 'lib'
8
+
9
+ $LOAD_PATH.unshift( basedir.to_s ) unless $LOAD_PATH.include?( basedir.to_s )
10
+ $LOAD_PATH.unshift( libdir.to_s ) unless $LOAD_PATH.include?( libdir.to_s )
11
+ }
12
+
13
+ require 'rspec'
14
+ require 'spec/lib/helpers'
15
+ require 'wordnet/semanticlink'
16
+
17
+
18
+ #####################################################################
19
+ ### C O N T E X T S
20
+ #####################################################################
21
+
22
+ describe WordNet::SemanticLink, :requires_database => true do
23
+ include WordNet::SpecHelpers
24
+
25
+ before( :all ) do
26
+ setup_logging( :fatal )
27
+ @lexicon = WordNet::Lexicon.new
28
+ end
29
+
30
+ before( :each ) do
31
+ @word = @lexicon[ :parody ]
32
+ @synset = @word.synsets.first
33
+ end
34
+
35
+ after( :all ) do
36
+ reset_logging()
37
+ end
38
+
39
+
40
+ end
41
+
42
+