Linguistics 1.0.3 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -186,7 +186,7 @@ r47 | deveiant | 2003-09-14 05:29:15 -0400 (Sun, 14 Sep 2003) | 13 lines
186
186
 
187
187
  - Touched up the file description a bit.
188
188
 
189
- - @lpError now intitialized: bug spotted by Martin Chase.
189
+ - @lp_error now intitialized: bug spotted by Martin Chase.
190
190
 
191
191
  - Calls to #linkParse no longer trap parse errors. This was done for two
192
192
  reasons:
@@ -266,7 +266,7 @@ r37 | deveiant | 2003-09-11 00:55:11 -0400 (Thu, 11 Sep 2003) | 10 lines
266
266
  - Added support for MyClass::extend( Linguistics ) and class MyClass; include
267
267
  Linguistics; end.
268
268
 
269
- - Modified code in #loadLanguage to minimize the number of requires.
269
+ - Modified code in #load_language to minimize the number of requires.
270
270
 
271
271
  ------------------------------------------------------------------------
272
272
  r36 | deveiant | 2003-09-11 00:52:32 -0400 (Thu, 11 Sep 2003) | 2 lines
data/README CHANGED
@@ -9,25 +9,16 @@
9
9
 
10
10
  == Requirements
11
11
 
12
- * Ruby >= 1.8.0
13
-
14
- The following libraries are required, but are included in the redist/
15
- directory. The installer script should install these for you if you don't
16
- already have them.
17
-
18
- * HashSlice - Adds slicing to the builtin Hash class
12
+ * Ruby >= 1.8.4
19
13
 
20
14
 
21
15
  == Optional
22
16
 
23
- * CrossCase - Provide auto-aliasing of camelCase to under_barred methods and
24
- vice-versa. (Included in redist/)
25
-
26
17
  * Ruby-WordNet (>= 0.02) - adds integration for the Ruby binding for the WordNet� lexical
27
18
  reference system.
28
19
 
29
- URL: http://www.deveiate.org/code/Ruby-WordNet.html
30
- Download: http://www.deveiate.org/code/Ruby-WordNet-0.02.tar.gz
20
+ URL: http://deveiate.org/projects/Ruby-WordNet
21
+ Download: http://deveiate.org/code/Ruby-WordNet-0.02.tar.gz
31
22
 
32
23
  * LinkParser (>= 0.0.4) - adds integration for the Ruby Link Grammar Parser by
33
24
  Martin Chase.
@@ -38,16 +29,16 @@ already have them.
38
29
 
39
30
  == General Information
40
31
 
41
- This module is a framework for building linguistic utilities for Ruby objects in
42
- any language. It includes a generic language-independant front end, a module for
43
- mapping language codes into language names, and a module which contains various
44
- English-language utilities.
32
+ This module is a framework for building linguistic utilities for Ruby objects
33
+ in any language. It includes a generic language-independant front end, a
34
+ module for mapping language codes into language names, and a module which
35
+ contains various English-language utilities.
45
36
 
46
37
 
47
38
  === Method Interface
48
39
 
49
- The Linguistics module comes with a language-independant mechanism for extending
50
- core Ruby classes with linguistic methods.
40
+ The Linguistics module comes with a language-independant mechanism for
41
+ extending core Ruby classes with linguistic methods.
51
42
 
52
43
  It consists of three parts: a core linguistics module which contains the
53
44
  class-extension framework for languages, a generic inflector class that serves
@@ -61,8 +52,8 @@ language-specific methods to be added to objects without cluttering up the
61
52
  interface or risking collision between them, albeit at the cost of three or four
62
53
  more characters per method invocation.
63
54
 
64
- If you don't like extending core Ruby classes, the language modules should also
65
- allow you to use them as a function library as well.
55
+ If you don't like extending core Ruby classes, the language modules should
56
+ also allow you to use them as a function library as well.
66
57
 
67
58
  For example, the English-language module contains a #plural function which can
68
59
  be accessed via a method on a core class:
@@ -77,8 +68,8 @@ or via the Linguistics::EN::plural function directly:
77
68
  plural( "goose" )
78
69
  # => "geese"
79
70
 
80
- The class-extension mechanism actually uses the functional interface behind the
81
- scenes.
71
+ The class-extension mechanism actually uses the functional interface behind
72
+ the scenes.
82
73
 
83
74
  A new feature with the 0.02 release: You can now omit the language-code method
84
75
  for unambiguous methods by calling Linguistics::use with the +:installProxy+
@@ -101,13 +92,13 @@ More about how this works in the documentation for Linguistics::use.
101
92
  To add a new language to the framework, create a file named the same as the
102
93
  ISO639 2- or 3-letter language code for the language you're adding. It must be
103
94
  placed under lib/linguistics/ to be recognized by the linguistics module, but
104
- you can also just require it yourself prior to calling Linguistics::use(). This
105
- file should define a module under Linguistics that is an all-caps version of the
106
- code used in the filename. Any methods you wish to be exposed to users should be
107
- declared as module functions (ie., using Module#module_function).
95
+ you can also just require it yourself prior to calling Linguistics::use().
96
+ This file should define a module under Linguistics that is an all-caps version
97
+ of the code used in the filename. Any methods you wish to be exposed to users
98
+ should be declared as module functions (ie., using Module#module_function).
108
99
 
109
- You may also wish to add your module to the list of default languages by adding
110
- the appropriate symbol to the Linguistics::DefaultLanguages array.
100
+ You may also wish to add your module to the list of default languages by
101
+ adding the appropriate symbol to the Linguistics::DefaultLanguages array.
111
102
 
112
103
  For example, to create a Portuguese-language module, create a file called
113
104
  'lib/linguistics/pt.rb' which contains the following:
@@ -128,8 +119,8 @@ See the English language module (lib/linguistics/en.rb) for an example.
128
119
 
129
120
  See the README.english file for a synopsis.
130
121
 
131
- The English-language module currently contains linguistic functions ported from
132
- a few excellent Perl modules:
122
+ The English-language module currently contains linguistic functions ported
123
+ from a few excellent Perl modules:
133
124
 
134
125
  Lingua::EN::Inflect
135
126
  Lingua::Conjunction
@@ -137,8 +128,8 @@ a few excellent Perl modules:
137
128
 
138
129
  See the lib/linguistics/en.rb file for specific attributions.
139
130
 
140
- New with version 0.02: integration with the Ruby WordNet� and LinkParser modules
141
- (which must be installed separately).
131
+ New with version 0.02: integration with the Ruby WordNet� and LinkParser
132
+ modules (which must be installed separately).
142
133
 
143
134
 
144
135
  == To Do
@@ -148,8 +139,8 @@ New with version 0.02: integration with the Ruby WordNet
148
139
  additional stemming functions and some other strategies are ongoing.
149
140
 
150
141
  * Martin Chase <stillflame at FaerieMUD dot org> is working on an integration
151
- module for his excellent work on a Ruby interface to the CMU Link Grammar (an
152
- english-sentence parser). This will make writing fairly accurate natural
142
+ module for his excellent work on a Ruby interface to the CMU Link Grammar
143
+ (an english-sentence parser). This will make writing fairly accurate natural
153
144
  language parsers in Ruby much easier.
154
145
 
155
146
  * Suggestions (and patches) for any of these items or additional features are
@@ -159,8 +150,8 @@ New with version 0.02: integration with the Ruby WordNet
159
150
 
160
151
  == Legal
161
152
 
162
- This module is Open Source Software which is Copyright (c) 2003 by The FaerieMUD
163
- Consortium. All rights reserved.
153
+ This module is Open Source Software which is Copyright (c) 2003 by The
154
+ FaerieMUD Consortium. All rights reserved.
164
155
 
165
156
  You may use, modify, and/or redistribute this software under the terms of the
166
157
  Perl Artistic License, a copy of which should have been included in this
@@ -168,9 +159,9 @@ distribution (See the file Artistic). If it was not, a copy of it may be
168
159
  obtained from http://language.perl.com/misc/Artistic.html or
169
160
  http://www.faeriemud.org/artistic.html).
170
161
 
171
- THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES,
172
- INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND
173
- FITNESS FOR A PARTICULAR PURPOSE.
162
+ THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
163
+ WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
164
+ MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
174
165
 
175
166
 
176
167
  $Id: README,v 1.6 2003/10/09 13:21:48 deveiant Exp $
data/install.rb CHANGED
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/ruby
2
2
  #
3
- # Linguistics Module Install Script
4
- # $Id: install.rb,v 1.3 2003/10/09 13:23:09 deveiant Exp $
3
+ # Module Install Script
4
+ # $Id: install.rb 11 2005-08-07 03:30:22Z ged $
5
5
  #
6
6
  # Thanks to Masatoshi SEKI for ideas found in his install.rb.
7
7
  #
8
- # Copyright (c) 2001-2004 The FaerieMUD Consortium.
8
+ # Copyright (c) 2001-2005 The FaerieMUD Consortium.
9
9
  #
10
10
  # This is free software. You may use, modify, and/or redistribute this
11
11
  # software under the terms of the Perl Artistic License. (See
@@ -20,17 +20,18 @@ include Config
20
20
 
21
21
  require 'find'
22
22
  require 'ftools'
23
+ require 'optparse'
23
24
 
24
-
25
- $version = %q$Revision: 1.3 $
26
- $rcsId = %q$Id: install.rb,v 1.3 2003/10/09 13:23:09 deveiant Exp $
25
+ $version = %q$Revision: 11 $
26
+ $rcsId = %q$Id: install.rb 11 2005-08-07 03:30:22Z ged $
27
27
 
28
28
  # Define required libraries
29
29
  RequiredLibraries = [
30
- # libraryname, nice name, RAA URL, Download URL
31
- # [ 'hashslice', "Ruby-Hashslice",
32
- # 'http://www.ruby-lang.org/en/raa-list.rhtml?name=Ruby-HashSlice',
33
- # 'http://www.devEiate.org/code/Ruby-HashSlice-1.03.tar.gz' ],
30
+ # libraryname, nice name, RAA URL, Download URL, e.g.,
31
+ #[ 'strscan', "Strscan",
32
+ # 'http://www.ruby-lang.org/en/raa-list.rhtml?name=strscan',
33
+ # 'http://i.loveruby.net/archive/strscan/strscan-0.6.7.tar.gz',
34
+ #],
34
35
  ]
35
36
 
36
37
  class Installer
@@ -122,31 +123,61 @@ class Installer
122
123
 
123
124
  end
124
125
 
126
+
125
127
  if $0 == __FILE__
126
- header "Linguistics Installer #$version"
128
+ dryrun = false
127
129
 
128
- for lib in RequiredLibraries
129
- testForRequiredLibrary( *lib )
130
- end
130
+ # Parse command-line switches
131
+ ARGV.options {|oparser|
132
+ oparser.banner = "Usage: #$0 [options]\n"
131
133
 
132
- viewOnly = ARGV.include? '-n'
133
- verbose = ARGV.include? '-v'
134
+ oparser.on( "--verbose", "-v", TrueClass, "Make progress verbose" ) {
135
+ $VERBOSE = true
136
+ debug_msg "Turned verbose on."
137
+ }
134
138
 
135
- # "Compatibility" with Aoki-san's install.rb
136
- if ARGV.include?( 'config' ) || ARGV.include?( 'setup' )
137
- print "Ok."
138
- exit
139
+ oparser.on( "--dry-run", "-n", TrueClass, "Don't really install anything" ) {
140
+ debug_msg "Turned dry-run on."
141
+ dryrun = true
142
+ }
143
+
144
+ # Handle the 'help' option
145
+ oparser.on( "--help", "-h", "Display this text." ) {
146
+ $stderr.puts oparser
147
+ exit!(0)
148
+ }
149
+
150
+ oparser.parse!
151
+ }
152
+
153
+ # Don't do anything if they expect this to be the three-step install script
154
+ # and they aren't doing the 'install' step.
155
+ if ARGV.include?( "config" )
156
+ for lib in RequiredLibraries
157
+ testForRequiredLibrary( *lib )
158
+ end
159
+ puts "Done."
160
+ elsif ARGV.include?( "setup" )
161
+ puts "Done."
162
+ elsif ARGV.empty?
163
+ for lib in RequiredLibraries
164
+ testForRequiredLibrary( *lib )
165
+ end
139
166
  end
140
167
 
141
- debugMsg "Sitelibdir = '#{CONFIG['sitelibdir']}'"
142
- sitelibdir = CONFIG['sitelibdir']
143
- debugMsg "Sitearchdir = '#{CONFIG['sitearchdir']}'"
144
- sitearchdir = CONFIG['sitearchdir']
168
+ if ARGV.empty? || ARGV.include?( "install" )
169
+ debug_msg "Sitelibdir = '#{CONFIG['sitelibdir']}'"
170
+ sitelibdir = CONFIG['sitelibdir']
171
+ debug_msg "Sitearchdir = '#{CONFIG['sitearchdir']}'"
172
+ sitearchdir = CONFIG['sitearchdir']
173
+
174
+ message "Installing..."
175
+ i = Installer.new( dryrun )
176
+ #i.installFiles( "redist", sitelibdir, 0444, verbose )
177
+ i.installFiles( "lib", sitelibdir, 0444, $VERBOSE )
145
178
 
146
- message "Installing\n"
147
- i = Installer.new( viewOnly )
148
- i.installFiles( "redist", sitelibdir, 0444, verbose )
149
- i.installFiles( "lib", sitelibdir, 0444, verbose )
179
+ message "done.\n"
180
+ end
150
181
  end
151
182
 
152
183
 
@@ -23,7 +23,7 @@
23
23
  #
24
24
  # == Version
25
25
  #
26
- # $Id: linguistics.rb 78 2005-07-13 19:58:43Z ged $
26
+ # $Id: linguistics.rb 95 2007-06-13 05:25:38Z deveiant $
27
27
  #
28
28
 
29
29
  require 'linguistics/iso639'
@@ -35,10 +35,10 @@ module Linguistics
35
35
  ### Class constants
36
36
 
37
37
  # Subversion revision
38
- SVNRev = %q$Rev: 78 $
38
+ SVNRev = %q$Rev: 95 $
39
39
 
40
40
  # Subversion ID
41
- SVNid = %q$Id: linguistics.rb 78 2005-07-13 19:58:43Z ged $
41
+ SVNid = %q$Id: linguistics.rb 95 2007-06-13 05:25:38Z deveiant $
42
42
 
43
43
  # Language module implementors should do something like:
44
44
  # Linguistics::DefaultLanguages.push( :ja ) # or whatever
@@ -86,7 +86,7 @@ module Linguistics
86
86
 
87
87
  ### Autoload linguistic methods defined in the module this object's
88
88
  ### class uses for inflection.
89
- def method_missing( sym, *args )
89
+ def method_missing( sym, *args, &block )
90
90
  return super unless self.class.langmod.respond_to?( sym )
91
91
 
92
92
  self.class.module_eval %{
@@ -95,7 +95,7 @@ module Linguistics
95
95
  end
96
96
  }, "{Autoloaded: " + __FILE__ + "}", __LINE__
97
97
 
98
- self.method( sym ).call( *args )
98
+ self.method( sym ).call( *args, &block )
99
99
  end
100
100
 
101
101
 
@@ -119,11 +119,11 @@ module Linguistics
119
119
  case obj
120
120
  when Class
121
121
  # $stderr.puts "Extending %p" % obj if $DEBUG
122
- self::installLanguageProxy( obj )
122
+ self::install_language_proxy( obj )
123
123
  else
124
124
  sclass = (class << obj; self; end)
125
125
  # $stderr.puts "Extending a object's metaclass: %p" % obj if $DEBUG
126
- self::installLanguageProxy( sclass )
126
+ self::install_language_proxy( sclass )
127
127
  end
128
128
 
129
129
  super
@@ -139,7 +139,7 @@ module Linguistics
139
139
 
140
140
  ### Make an languageProxy class that encapsulates all of the inflect operations
141
141
  ### using the given language module.
142
- def self::makeLanguageProxy( mod )
142
+ def self::make_language_proxy( mod )
143
143
  # $stderr.puts "Making language proxy for mod %p" % [mod]
144
144
  Class::new( LanguageProxyClass ) {
145
145
  @langmod = mod
@@ -148,20 +148,20 @@ module Linguistics
148
148
 
149
149
 
150
150
  ### Install the language proxy
151
- def self::installLanguageProxy( klass, languages=DefaultLanguages )
151
+ def self::install_language_proxy( klass, languages=DefaultLanguages )
152
152
  languages.replace( DefaultLanguages ) if languages.empty?
153
153
 
154
154
  # Create an languageProxy class for each language specified
155
- languages.each {|lang|
155
+ languages.each do |lang|
156
156
  # $stderr.puts "Extending the %p class with %p" %
157
157
  # [ klass, lang ] if $DEBUG
158
158
 
159
159
  # Load the language module (skipping to the next if it's already
160
- # loaded), make an languageProxy class that delegates to it, and figure
161
- # out what the languageProxy method will be called.
162
- mod = loadLanguage( lang.to_s.downcase )
160
+ # loaded), make a languageProxy class that delegates to it, and
161
+ # figure out what the languageProxy method will be called.
162
+ mod = load_language( lang.to_s.downcase )
163
163
  ifaceMeth = mod.name.downcase.sub( /.*:/, '' )
164
- languageProxyClass = makeLanguageProxy( mod )
164
+ languageProxyClass = make_language_proxy( mod )
165
165
 
166
166
  # Install a hash for languageProxy classes and an accessor for the
167
167
  # hash if it's not already present.
@@ -186,14 +186,15 @@ module Linguistics
186
186
  end
187
187
  }, __FILE__, __LINE__
188
188
  end
189
- }
189
+ end
190
190
  end
191
191
 
192
192
 
193
193
 
194
194
  ### Install a regular proxy method in the given klass that will delegate
195
195
  ### calls to missing method to the languageProxy for the given +language+.
196
- def self::installDelegatorProxy( klass, langcode )
196
+ def self::install_delegator_proxy( klass, langcode )
197
+ raise ArgumentError, "Missing langcode" if langcode.nil?
197
198
 
198
199
  # Alias any currently-extant
199
200
  if klass.instance_methods( false ).include?( "method_missing" )
@@ -204,27 +205,29 @@ module Linguistics
204
205
 
205
206
  # Add the #method_missing method that auto-installs delegator methods
206
207
  # for methods supported by the linguistic proxy objects.
207
- klass.module_eval {
208
- define_method( :method_missing ) do |sym, *args|
208
+ klass.module_eval %{
209
+ def method_missing( sym, *args, &block )
209
210
 
210
- if self.send( langcode ).respond_to?( sym )
211
+ # If the linguistic delegator answers the message, install a
212
+ # delegator method and call it.
213
+ if self.send( :#{langcode} ).respond_to?( sym )
211
214
 
212
- # $stderr.puts "Installing linguistic delegator method #{sym} " \
215
+ # $stderr.puts "Installing linguistic delegator method \#{sym} " \
213
216
  # "for the '#{langcode}' proxy"
214
217
  self.class.module_eval %{
215
- def #{sym}( *args )
216
- self.#{langcode}.#{sym}( *args )
218
+ def \#{sym}( *args, &block )
219
+ self.#{langcode}.\#{sym}( *args, &block )
217
220
  end
218
221
  }
219
- self.method( sym ).call( *args )
222
+ self.method( sym ).call( *args, &block )
220
223
 
221
224
  # Otherwise either call the overridden proxy method if there is
222
225
  # one, or just let our parent deal with it.
223
226
  else
224
227
  if self.respond_to?( :__orig_method_missing )
225
- return self.__orig_method_missing( sym, *args )
228
+ return self.__orig_method_missing( sym, *args, &block )
226
229
  else
227
- super( sym, *args )
230
+ super( sym, *args, &block )
228
231
  end
229
232
  end
230
233
  end
@@ -237,6 +240,13 @@ module Linguistics
237
240
  ### L A N G U A G E - I N D E P E N D E N T F U N C T I O N S
238
241
  #################################################################
239
242
 
243
+
244
+ ### Handle auto-magic usage
245
+ def self::const_missing( sym )
246
+ load_language( sym.to_s.downcase )
247
+ end
248
+
249
+
240
250
  ###############
241
251
  module_function
242
252
  ###############
@@ -271,7 +281,7 @@ module Linguistics
271
281
  classes.each {|klass|
272
282
 
273
283
  # Create an languageProxy class for each installed language
274
- installLanguageProxy( klass, languages )
284
+ install_language_proxy( klass, languages )
275
285
 
276
286
  # Install the delegator proxy if configured
277
287
  if config[:installProxy]
@@ -281,14 +291,14 @@ module Linguistics
281
291
  when String
282
292
  langcode = config[:installProxy].intern
283
293
  when TrueClass
284
- langcode = DefaultLanguages[0]
294
+ langcode = languages[0] || DefaultLanguages[0] || :en
285
295
  else
286
296
  raise ArgumentError,
287
297
  "Unexpected value %p for :installProxy" %
288
298
  config[:installProxy]
289
299
  end
290
300
 
291
- installDelegatorProxy( klass, langcode )
301
+ install_delegator_proxy( klass, langcode )
292
302
  end
293
303
  }
294
304
  end
@@ -332,7 +342,7 @@ module Linguistics
332
342
 
333
343
  ### Try to load the module that implements the given language, returning
334
344
  ### the Module object if successful.
335
- def self::loadLanguage( lang )
345
+ def self::load_language( lang )
336
346
  raise "Unknown language code '#{lang}'" unless
337
347
  LanguageCodes.key?( lang )
338
348
 
@@ -342,7 +352,7 @@ module Linguistics
342
352
  mod = LanguageCodes[ lang ][:codes].sort {|a,b|
343
353
  (a.length <=> b.length).nonzero? ||
344
354
  (a <=> b)
345
- }.each {|code|
355
+ }.each do |code|
346
356
  unless Linguistics::const_defined?( code.upcase )
347
357
  begin
348
358
  require "linguistics/#{code}"
@@ -354,7 +364,7 @@ module Linguistics
354
364
 
355
365
  break Linguistics::const_get( code.upcase ) if
356
366
  Linguistics::const_defined?( code.upcase )
357
- }
367
+ end
358
368
 
359
369
  if mod.is_a?( Array )
360
370
  raise LoadError,