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,78 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'sequel'
4
+
5
+ # Use a mock database until the real one is provided by the user
6
+ Sequel::Model.db = Sequel.mock if Sequel::DATABASES.empty?
7
+
8
+ require 'wordnet' unless defined?( WordNet )
9
+ require 'wordnet/mixins'
10
+
11
+ module WordNet
12
+
13
+ # The base WordNet database-backed domain class. It's a subclass of Sequel::Model, so
14
+ # you'll first need to be familiar with Sequel (http://sequel.rubyforge.org/) and
15
+ # especially its Sequel::Model ORM.
16
+ #
17
+ # See the Sequel::Plugins::InlineMigrations module and the documentation for the
18
+ # 'validation_helpers', 'schema', and 'subclasses' Sequel plugins.
19
+ #
20
+ class Model < Sequel::Model
21
+ include WordNet::Loggable
22
+
23
+ plugin :validation_helpers
24
+ plugin :schema
25
+ plugin :subclasses
26
+
27
+
28
+ ### Execute a block after removing all loggers from the current database handle, then
29
+ ### restore them before returning.
30
+ def self::without_sql_logging( logged_db=nil )
31
+ logged_db ||= self.db
32
+
33
+ loggers_to_restore = logged_db.loggers.dup
34
+ logged_db.loggers.clear
35
+ yield
36
+ ensure
37
+ logged_db.loggers.replace( loggers_to_restore )
38
+ end
39
+
40
+
41
+ ### Reset the database connection that all model objects will use.
42
+ ### @param [Sequel::Database] newdb the new database object.
43
+ def self::db=( newdb )
44
+ self.without_sql_logging( newdb ) do
45
+ super
46
+ end
47
+
48
+ self.descendents.each do |subclass|
49
+ WordNet.log.info "Resetting database connection for: %p to: %p" % [ subclass, newdb ]
50
+ subclass.db = newdb
51
+ end
52
+ end
53
+
54
+ end # class Model
55
+
56
+
57
+ ### Overridden version of Sequel.Model() that creates subclasses of WordNet::Model instead
58
+ ### of Sequel::Model.
59
+ ### @see Sequel.Model()
60
+ def self::Model( source )
61
+ unless Sequel::Model::ANONYMOUS_MODEL_CLASSES.key?( source )
62
+ anonclass = nil
63
+ WordNet::Model.without_sql_logging do
64
+ if source.is_a?( Sequel::Database )
65
+ anonclass = Class.new( WordNet::Model )
66
+ anonclass.db = source
67
+ else
68
+ anonclass = Class.new( WordNet::Model ).set_dataset( source )
69
+ end
70
+ end
71
+
72
+ Sequel::Model::ANONYMOUS_MODEL_CLASSES[ source ] = anonclass
73
+ end
74
+
75
+ return Sequel::Model::ANONYMOUS_MODEL_CLASSES[ source ]
76
+ end
77
+
78
+ end # module WordNet
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'wordnet' unless defined?( WordNet )
4
+ require 'wordnet/mixins'
5
+ require 'wordnet/model'
6
+
7
+ # WordNet morph model class
8
+ class WordNet::Morph < WordNet::Model( :morphs )
9
+ include WordNet::Constants
10
+
11
+ set_primary_key :morphid
12
+
13
+ many_to_one :word,
14
+ :join_table => :morphmaps,
15
+ :left_key => :wordid,
16
+ :right_key => :morphid
17
+
18
+
19
+ ### Return the stringified word; alias for #lemma.
20
+ def to_s
21
+ return "%s (%s)" % [ self.morph, self.pos ]
22
+ end
23
+
24
+ end # class WordNet::Morph
25
+
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'wordnet' unless defined?( WordNet )
4
+ require 'wordnet/constants'
5
+ require 'wordnet/model'
6
+
7
+ # WordNet semantic link (pointer) model class
8
+ class WordNet::SemanticLink < WordNet::Model( :semlinks )
9
+ include WordNet::Constants
10
+
11
+
12
+ set_primary_key [:synset1id, :synset2id, :linkid]
13
+
14
+ many_to_one :origin,
15
+ :class => :"WordNet::Synset",
16
+ :key => :synset1id,
17
+ :primary_key => :synsetid
18
+
19
+ one_to_one :target,
20
+ :class => :"WordNet::Synset",
21
+ :key => :synsetid,
22
+ :primary_key => :synset2id,
23
+ :eager => :words
24
+
25
+
26
+ ######
27
+ public
28
+ ######
29
+
30
+ ### Return a stringified version of the SemanticLink.
31
+ def to_s
32
+ return "%s: %s (%s)" % [
33
+ self.type,
34
+ self.target.words.map( &:to_s ).join( ', ' ),
35
+ self.target.pos,
36
+ ]
37
+ end
38
+
39
+
40
+ ### Return the type of link as a Symbol.
41
+ def type
42
+ return WordNet::Synset.linktype_table[ self.linkid ][ :type ]
43
+ end
44
+
45
+
46
+ ### Return the name of the link type as a String.
47
+ def typename
48
+ return WordNet::Synset.linktype_table[ self.linkid ][ :typename ]
49
+ end
50
+
51
+ end # class WordNet::SemanticLink
52
+
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'wordnet' unless defined?( WordNet )
4
+ require 'wordnet/model'
5
+
6
+ # WordNet sense model class
7
+ class WordNet::Sense < WordNet::Model( :senses )
8
+ include WordNet::Constants
9
+
10
+ set_primary_key :senseid
11
+
12
+ many_to_one :synset, :key => :synsetid
13
+ many_to_one :word, :key => :wordid
14
+
15
+ # Sense -> [ LexicalLinks ] -> [ Synsets ]
16
+ one_to_many :lexlinks,
17
+ :class => :"WordNet::LexicalLink",
18
+ :key => [ :synset1id, :word1id ],
19
+ :primary_key => [ :synsetid, :wordid ]
20
+
21
+
22
+ ### Generate a method that will return Synsets related by the given lexical pointer
23
+ ### +type+.
24
+ def self::lexical_link( type, typekey=nil )
25
+ typekey ||= type.to_s.chomp( 's' ).to_sym
26
+
27
+ WordNet.log.debug "Generating a %p method for %p links" % [ type, typekey ]
28
+
29
+ method_body = Proc.new do
30
+ linkinfo = WordNet::Synset.linktype_names[ typekey ] or
31
+ raise ScriptError, "no such link type %p" % [ typekey ]
32
+ ssids = self.lexlinks_dataset.filter( :linkid => linkinfo[:id] ).select( :synset2id )
33
+ self.class.filter( :synsetid => ssids )
34
+ end
35
+ WordNet.log.debug " method body is: %p" % [ method_body ]
36
+
37
+ define_method( type, &method_body )
38
+ end
39
+
40
+
41
+ lexical_link :also_see, :also
42
+ lexical_link :antonym
43
+ lexical_link :derivation
44
+ lexical_link :domain_categories, :domain_category
45
+ lexical_link :domain_member_categories, :domain_member_category
46
+ lexical_link :domain_member_region
47
+ lexical_link :domain_member_usage
48
+ lexical_link :domain_region
49
+ lexical_link :domain_usage
50
+ lexical_link :participle
51
+ lexical_link :pertainym
52
+ lexical_link :verb_group
53
+
54
+ end # class WordNet::Sense
55
+
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'wordnet' unless defined?( WordNet )
4
+ require 'wordnet/model'
5
+ require 'wordnet/constants'
6
+
7
+
8
+ # SUMO terms
9
+ class WordNet::SumoTerm < WordNet::Model( :sumoterms )
10
+ include WordNet::Constants
11
+
12
+ set_primary_key :sumoid
13
+
14
+ # SUMO Term -> [ SUMO Map ] -> [ Synset ]
15
+ many_to_many :synsets,
16
+ :join_table => :sumomaps,
17
+ :left_key => :sumoid,
18
+ :right_key => :synsetid
19
+
20
+ end # class WordNet::SumoTerm
21
+