Linguistics 1.0.3
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/Artistic +127 -0
 - data/ChangeLog +444 -0
 - data/MANIFEST +19 -0
 - data/README +178 -0
 - data/README.english +245 -0
 - data/TODO +17 -0
 - data/experiments/randobjlist.rb +34 -0
 - data/install.rb +154 -0
 - data/lib/linguistics/en/infinitive.rb +1149 -0
 - data/lib/linguistics/en/linkparser.rb +142 -0
 - data/lib/linguistics/en/wordnet.rb +253 -0
 - data/lib/linguistics/en.rb +1694 -0
 - data/lib/linguistics/iso639.rb +456 -0
 - data/lib/linguistics.rb +368 -0
 - data/redist/crosscase.rb +298 -0
 - data/test.rb +110 -0
 - data/tests/en/conjunction.tests.rb +114 -0
 - data/tests/en/inflect.tests.rb +1378 -0
 - data/tests/lingtestcase.rb +239 -0
 - data/tests/use.tests.rb +99 -0
 - data/utils.rb +689 -0
 - metadata +58 -0
 
    
        data/test.rb
    ADDED
    
    | 
         @@ -0,0 +1,110 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
            #
         
     | 
| 
      
 3 
     | 
    
         
            +
            #	Test suite for Linguistics classes
         
     | 
| 
      
 4 
     | 
    
         
            +
            #
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            BEGIN {
         
     | 
| 
      
 8 
     | 
    
         
            +
            	$basedir = File::dirname( __FILE__ )
         
     | 
| 
      
 9 
     | 
    
         
            +
            	%w{lib tests redist}.each do |dir|
         
     | 
| 
      
 10 
     | 
    
         
            +
            		$LOAD_PATH.unshift File::join( $basedir, dir )
         
     | 
| 
      
 11 
     | 
    
         
            +
            	end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            	require "#$basedir/utils"
         
     | 
| 
      
 14 
     | 
    
         
            +
            	include UtilityFunctions
         
     | 
| 
      
 15 
     | 
    
         
            +
            }
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            verboseOff {
         
     | 
| 
      
 18 
     | 
    
         
            +
            	require 'lingtestcase'
         
     | 
| 
      
 19 
     | 
    
         
            +
            	require 'find'
         
     | 
| 
      
 20 
     | 
    
         
            +
            	require 'test/unit'
         
     | 
| 
      
 21 
     | 
    
         
            +
            	require 'test/unit/testsuite'
         
     | 
| 
      
 22 
     | 
    
         
            +
            	require 'test/unit/ui/console/testrunner'
         
     | 
| 
      
 23 
     | 
    
         
            +
            	require 'optparse'
         
     | 
| 
      
 24 
     | 
    
         
            +
            }
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            # Turn off output buffering
         
     | 
| 
      
 27 
     | 
    
         
            +
            $stderr.sync = $stdout.sync = true
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            # Initialize variables
         
     | 
| 
      
 30 
     | 
    
         
            +
            safelevel = 0
         
     | 
| 
      
 31 
     | 
    
         
            +
            patterns = []
         
     | 
| 
      
 32 
     | 
    
         
            +
            requires = []
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            # Parse command-line switches
         
     | 
| 
      
 35 
     | 
    
         
            +
            ARGV.options {|oparser|
         
     | 
| 
      
 36 
     | 
    
         
            +
            	oparser.banner = "Usage: #$0 [options] [TARGETS]\n"
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            	oparser.on( "--debug", "-d", TrueClass, "Turn debugging on" ) {
         
     | 
| 
      
 39 
     | 
    
         
            +
            		$DEBUG = true
         
     | 
| 
      
 40 
     | 
    
         
            +
            		debugMsg "Turned debugging on."
         
     | 
| 
      
 41 
     | 
    
         
            +
            	}
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            	oparser.on( "--verbose", "-v", TrueClass, "Make progress verbose" ) {
         
     | 
| 
      
 44 
     | 
    
         
            +
            		$VERBOSE = true
         
     | 
| 
      
 45 
     | 
    
         
            +
            		debugMsg "Turned verbose on."
         
     | 
| 
      
 46 
     | 
    
         
            +
            	}
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
            	# Handle the 'help' option
         
     | 
| 
      
 49 
     | 
    
         
            +
            	oparser.on( "--help", "-h", "Display this text." ) {
         
     | 
| 
      
 50 
     | 
    
         
            +
            		$stderr.puts oparser
         
     | 
| 
      
 51 
     | 
    
         
            +
            		exit!(0)
         
     | 
| 
      
 52 
     | 
    
         
            +
            	}
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            	oparser.parse!
         
     | 
| 
      
 55 
     | 
    
         
            +
            }
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
            # Parse test patterns
         
     | 
| 
      
 58 
     | 
    
         
            +
            ARGV.each {|pat| patterns << Regexp::new( pat, Regexp::IGNORECASE )}
         
     | 
| 
      
 59 
     | 
    
         
            +
            $stderr.puts "#{patterns.length} patterns given on the command line"
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            ### Load all the tests from the tests dir
         
     | 
| 
      
 62 
     | 
    
         
            +
            Find.find( File::join($basedir,"tests") ) {|file|
         
     | 
| 
      
 63 
     | 
    
         
            +
            	Find.prune if /\/\./ =~ file or /~$/ =~ file
         
     | 
| 
      
 64 
     | 
    
         
            +
            	Find.prune if /TEMPLATE/ =~ file
         
     | 
| 
      
 65 
     | 
    
         
            +
            	next if File.stat( file ).directory?
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
             	unless patterns.empty?
         
     | 
| 
      
 68 
     | 
    
         
            +
             		Find.prune unless patterns.find {|pat| pat =~ file}
         
     | 
| 
      
 69 
     | 
    
         
            +
             	end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
            	debugMsg "Considering '%s': " % file
         
     | 
| 
      
 72 
     | 
    
         
            +
            	next unless file =~ /\.tests.rb$/
         
     | 
| 
      
 73 
     | 
    
         
            +
            	debugMsg "Requiring '%s'..." % file
         
     | 
| 
      
 74 
     | 
    
         
            +
            	require "#{file}"
         
     | 
| 
      
 75 
     | 
    
         
            +
            	requires << file
         
     | 
| 
      
 76 
     | 
    
         
            +
            }
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
            $stderr.puts "Required #{requires.length} files."
         
     | 
| 
      
 79 
     | 
    
         
            +
            unless patterns.empty?
         
     | 
| 
      
 80 
     | 
    
         
            +
            	$stderr.puts "[" + requires.sort.join( ", " ) + "]"
         
     | 
| 
      
 81 
     | 
    
         
            +
            end
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
            # Build the test suite
         
     | 
| 
      
 84 
     | 
    
         
            +
            class LinguisticsTests
         
     | 
| 
      
 85 
     | 
    
         
            +
            	class << self
         
     | 
| 
      
 86 
     | 
    
         
            +
            		def suite
         
     | 
| 
      
 87 
     | 
    
         
            +
            			suite = Test::Unit::TestSuite.new( "Linguistics" )
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
            			if suite.respond_to?( :add )
         
     | 
| 
      
 90 
     | 
    
         
            +
            				ObjectSpace.each_object( Class ) {|klass|
         
     | 
| 
      
 91 
     | 
    
         
            +
            					suite.add( klass.suite ) if klass < Linguistics::TestCase
         
     | 
| 
      
 92 
     | 
    
         
            +
            				}
         
     | 
| 
      
 93 
     | 
    
         
            +
            			else
         
     | 
| 
      
 94 
     | 
    
         
            +
            				ObjectSpace.each_object( Class ) {|klass|
         
     | 
| 
      
 95 
     | 
    
         
            +
            					suite << klass.suite if klass < Linguistics::TestCase
         
     | 
| 
      
 96 
     | 
    
         
            +
            				}			
         
     | 
| 
      
 97 
     | 
    
         
            +
            			end
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
            			return suite
         
     | 
| 
      
 100 
     | 
    
         
            +
            		end
         
     | 
| 
      
 101 
     | 
    
         
            +
            	end
         
     | 
| 
      
 102 
     | 
    
         
            +
            end
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
            # Run tests
         
     | 
| 
      
 105 
     | 
    
         
            +
            $SAFE = safelevel
         
     | 
| 
      
 106 
     | 
    
         
            +
            Test::Unit::UI::Console::TestRunner.new( LinguisticsTests ).start
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
         @@ -0,0 +1,114 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/ruby -w
         
     | 
| 
      
 2 
     | 
    
         
            +
            #
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Unit test for English conjunctions 
         
     | 
| 
      
 4 
     | 
    
         
            +
            # $Id: conjunction.tests.rb,v 1.2 2003/09/11 05:03:12 deveiant Exp $
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
            # Copyright (c) 2003 The FaerieMUD Consortium.
         
     | 
| 
      
 7 
     | 
    
         
            +
            # 
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            unless defined? Linguistics::TestCase
         
     | 
| 
      
 10 
     | 
    
         
            +
            	testsdir = File::dirname( File::dirname(File::expand_path( __FILE__ )) )
         
     | 
| 
      
 11 
     | 
    
         
            +
            	$LOAD_PATH.unshift testsdir unless $LOAD_PATH.include?( testsdir )
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            	require 'lingtestcase'
         
     | 
| 
      
 14 
     | 
    
         
            +
            end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            ### This test suite tests the stage1 (static) parser and the metagrammar it
         
     | 
| 
      
 18 
     | 
    
         
            +
            ### parses in which the actual parser-generator's behaviour is defined.
         
     | 
| 
      
 19 
     | 
    
         
            +
            class EnglishConjunctionsTestCase < Linguistics::TestCase
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            	Linguistics::use( :en )
         
     | 
| 
      
 22 
     | 
    
         
            +
            	include Linguistics::EN
         
     | 
| 
      
 23 
     | 
    
         
            +
            	
         
     | 
| 
      
 24 
     | 
    
         
            +
            	Tests = {
         
     | 
| 
      
 25 
     | 
    
         
            +
            		# Test name		=> {
         
     | 
| 
      
 26 
     | 
    
         
            +
            		#	target => {
         
     | 
| 
      
 27 
     | 
    
         
            +
            		#		{<options>} => <expected output>
         
     | 
| 
      
 28 
     | 
    
         
            +
            		#	},
         
     | 
| 
      
 29 
     | 
    
         
            +
            		:singleWord => {
         
     | 
| 
      
 30 
     | 
    
         
            +
            			['cat'] => {
         
     | 
| 
      
 31 
     | 
    
         
            +
            				{} => %{a cat}
         
     | 
| 
      
 32 
     | 
    
         
            +
            			},
         
     | 
| 
      
 33 
     | 
    
         
            +
            		},
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            		:twoWord => {
         
     | 
| 
      
 36 
     | 
    
         
            +
            			%w{cat dog} => {
         
     | 
| 
      
 37 
     | 
    
         
            +
            				{} => 'a cat and a dog',
         
     | 
| 
      
 38 
     | 
    
         
            +
            				{:conjunctive => 'plus'} => 'a cat plus a dog',
         
     | 
| 
      
 39 
     | 
    
         
            +
            				{:conjunctive => ''} => 'a cat a dog',
         
     | 
| 
      
 40 
     | 
    
         
            +
            			},
         
     | 
| 
      
 41 
     | 
    
         
            +
            			%w{cat Cat} => {
         
     | 
| 
      
 42 
     | 
    
         
            +
            				{} => %{two cats},
         
     | 
| 
      
 43 
     | 
    
         
            +
            				{:combine => false} => 'a cat and a Cat',
         
     | 
| 
      
 44 
     | 
    
         
            +
            				{:casefold => false} => 'a cat and a Cat',
         
     | 
| 
      
 45 
     | 
    
         
            +
            				{:generalize => true} => 'several cats',
         
     | 
| 
      
 46 
     | 
    
         
            +
            			},
         
     | 
| 
      
 47 
     | 
    
         
            +
            		},
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
            		:manyWord => {
         
     | 
| 
      
 50 
     | 
    
         
            +
            			%w{cat dog fox dog chicken chicken Fox chicken goose Dog goose} => {
         
     | 
| 
      
 51 
     | 
    
         
            +
            				{} => 'three dogs, three chickens, two foxes, two geese, and a cat',
         
     | 
| 
      
 52 
     | 
    
         
            +
            				{:combine => false} => 
         
     | 
| 
      
 53 
     | 
    
         
            +
            					'a cat, a dog, a fox, a dog, a chicken, a chicken, a Fox, a '\
         
     | 
| 
      
 54 
     | 
    
         
            +
            					'chicken, a goose, a Dog, and a goose',
         
     | 
| 
      
 55 
     | 
    
         
            +
            				{:casefold => false} => 
         
     | 
| 
      
 56 
     | 
    
         
            +
            					'three chickens, two dogs, two geese, a cat, a fox, a Fox, '\
         
     | 
| 
      
 57 
     | 
    
         
            +
            					'and a Dog',
         
     | 
| 
      
 58 
     | 
    
         
            +
            				{:generalize => true} => 
         
     | 
| 
      
 59 
     | 
    
         
            +
            					'several dogs, several chickens, several foxes, several '\
         
     | 
| 
      
 60 
     | 
    
         
            +
            					'geese, and a cat',
         
     | 
| 
      
 61 
     | 
    
         
            +
            			}
         
     | 
| 
      
 62 
     | 
    
         
            +
            		},
         
     | 
| 
      
 63 
     | 
    
         
            +
            	}
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
            	# Auto-generate tests for the dataset
         
     | 
| 
      
 66 
     | 
    
         
            +
            	Tests.each_with_index {|test,i|
         
     | 
| 
      
 67 
     | 
    
         
            +
            		name = test[0]
         
     | 
| 
      
 68 
     | 
    
         
            +
            		methname = "test_%03d_%s" %
         
     | 
| 
      
 69 
     | 
    
         
            +
            			[ i + 50, name ]
         
     | 
| 
      
 70 
     | 
    
         
            +
            		define_method( methname ) {
         
     | 
| 
      
 71 
     | 
    
         
            +
            			printTestHeader "Conjunction: #{name}"
         
     | 
| 
      
 72 
     | 
    
         
            +
            			Tests[name].each {|target, tests|
         
     | 
| 
      
 73 
     | 
    
         
            +
            				rval = nil
         
     | 
| 
      
 74 
     | 
    
         
            +
            				tests.each {|opts, output|
         
     | 
| 
      
 75 
     | 
    
         
            +
            					op = "conjunction of %s with options=%s" %
         
     | 
| 
      
 76 
     | 
    
         
            +
            						[ target.inspect, opts.inspect ]
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
            					# Method interface
         
     | 
| 
      
 79 
     | 
    
         
            +
            					assert_nothing_raised( op ) {
         
     | 
| 
      
 80 
     | 
    
         
            +
            						rval = target.en.conjunction( opts )
         
     | 
| 
      
 81 
     | 
    
         
            +
            					}
         
     | 
| 
      
 82 
     | 
    
         
            +
            					assert_equal output, rval, op
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
            					# Function interface
         
     | 
| 
      
 85 
     | 
    
         
            +
            					assert_nothing_raised( op ) {
         
     | 
| 
      
 86 
     | 
    
         
            +
            						rval = conjunction( target, opts )
         
     | 
| 
      
 87 
     | 
    
         
            +
            					}
         
     | 
| 
      
 88 
     | 
    
         
            +
            					assert_equal output, rval, op
         
     | 
| 
      
 89 
     | 
    
         
            +
            				}
         
     | 
| 
      
 90 
     | 
    
         
            +
            			}
         
     | 
| 
      
 91 
     | 
    
         
            +
            		}
         
     | 
| 
      
 92 
     | 
    
         
            +
            	}
         
     | 
| 
      
 93 
     | 
    
         
            +
            	
         
     | 
| 
      
 94 
     | 
    
         
            +
            	### Overridden initializer: auto-generated test methods have an arity of 1
         
     | 
| 
      
 95 
     | 
    
         
            +
            	### even though they don't require an argument (as of the current Ruby CVS),
         
     | 
| 
      
 96 
     | 
    
         
            +
            	### and the default initializer throws an :invalid_test for methods with
         
     | 
| 
      
 97 
     | 
    
         
            +
            	### arity != 0.
         
     | 
| 
      
 98 
     | 
    
         
            +
            	def initialize( test_method_name )
         
     | 
| 
      
 99 
     | 
    
         
            +
                    if !respond_to?( test_method_name )
         
     | 
| 
      
 100 
     | 
    
         
            +
            			throw :invalid_test
         
     | 
| 
      
 101 
     | 
    
         
            +
                    end
         
     | 
| 
      
 102 
     | 
    
         
            +
                    @method_name = test_method_name
         
     | 
| 
      
 103 
     | 
    
         
            +
                    @test_passed = true
         
     | 
| 
      
 104 
     | 
    
         
            +
            	end
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
            	#################################################################
         
     | 
| 
      
 108 
     | 
    
         
            +
            	###	T E S T S
         
     | 
| 
      
 109 
     | 
    
         
            +
            	#################################################################
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
            end
         
     | 
| 
      
 114 
     | 
    
         
            +
             
     |