wordnet 0.0.5 → 1.0.0.pre.126

Sign up to get free protection for your applications and to get access to all the features.
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
+