linguistics 1.0.9 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/.gemtest +0 -0
- data/ChangeLog +849 -342
- data/History.rdoc +11 -0
- data/LICENSE +9 -9
- data/Manifest.txt +44 -0
- data/README.rdoc +226 -0
- data/Rakefile +32 -349
- data/examples/endocs.rb +272 -0
- data/examples/generalize_sentence.rb +2 -1
- data/examples/klingon.rb +22 -0
- data/lib/linguistics.rb +130 -292
- data/lib/linguistics/en.rb +337 -1628
- data/lib/linguistics/en/articles.rb +138 -0
- data/lib/linguistics/en/conjugation.rb +2245 -0
- data/lib/linguistics/en/conjunctions.rb +202 -0
- data/lib/linguistics/en/{infinitive.rb → infinitives.rb} +41 -55
- data/lib/linguistics/en/linkparser.rb +41 -49
- data/lib/linguistics/en/numbers.rb +483 -0
- data/lib/linguistics/en/participles.rb +33 -0
- data/lib/linguistics/en/pluralization.rb +810 -0
- data/lib/linguistics/en/stemmer.rb +75 -0
- data/lib/linguistics/en/titlecase.rb +121 -0
- data/lib/linguistics/en/wordnet.rb +63 -97
- data/lib/linguistics/inflector.rb +89 -0
- data/lib/linguistics/iso639.rb +534 -448
- data/lib/linguistics/languagebehavior.rb +36 -0
- data/lib/linguistics/monkeypatches.rb +42 -0
- data/spec/lib/constants.rb +15 -0
- data/spec/lib/helpers.rb +38 -0
- data/spec/linguistics/en/articles_spec.rb +797 -0
- data/spec/linguistics/en/conjugation_spec.rb +2083 -0
- data/spec/linguistics/en/conjunctions_spec.rb +154 -0
- data/spec/linguistics/en/infinitives_spec.rb +518 -0
- data/spec/linguistics/en/linkparser_spec.rb +66 -0
- data/spec/linguistics/en/numbers_spec.rb +1295 -0
- data/spec/linguistics/en/participles_spec.rb +55 -0
- data/spec/linguistics/en/pluralization_spec.rb +4636 -0
- data/spec/linguistics/en/stemmer_spec.rb +72 -0
- data/spec/linguistics/en/titlecase_spec.rb +841 -0
- data/spec/linguistics/en/wordnet_spec.rb +85 -0
- data/spec/linguistics/en_spec.rb +45 -167
- data/spec/linguistics/inflector_spec.rb +40 -0
- data/spec/linguistics/iso639_spec.rb +49 -53
- data/spec/linguistics/monkeypatches_spec.rb +40 -0
- data/spec/linguistics_spec.rb +46 -76
- metadata +241 -113
- metadata.gz.sig +0 -0
- data/README +0 -166
- data/README.english +0 -245
- data/rake/191_compat.rb +0 -26
- data/rake/dependencies.rb +0 -76
- data/rake/documentation.rb +0 -123
- data/rake/helpers.rb +0 -502
- data/rake/hg.rb +0 -318
- data/rake/manual.rb +0 -787
- data/rake/packaging.rb +0 -129
- data/rake/publishing.rb +0 -341
- data/rake/style.rb +0 -62
- data/rake/svn.rb +0 -668
- data/rake/testing.rb +0 -152
- data/rake/verifytask.rb +0 -64
- data/tests/en/infinitive.tests.rb +0 -207
- data/tests/en/inflect.tests.rb +0 -1389
- data/tests/en/lafcadio.tests.rb +0 -77
- data/tests/en/linkparser.tests.rb +0 -42
- data/tests/en/lprintf.tests.rb +0 -77
- data/tests/en/titlecase.tests.rb +0 -73
- data/tests/en/wordnet.tests.rb +0 -95
data/rake/testing.rb
DELETED
@@ -1,152 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Rake tasklib for testing tasks
|
3
|
-
|
4
|
-
#
|
5
|
-
# Authors:
|
6
|
-
# * Michael Granger <ged@FaerieMUD.org>
|
7
|
-
#
|
8
|
-
|
9
|
-
unless defined?( COVERAGE_MINIMUM )
|
10
|
-
if ENV['COVVERAGE_MINIMUM']
|
11
|
-
COVERAGE_MINIMUM = Float( ENV['COVERAGE_MINIMUM'] )
|
12
|
-
else
|
13
|
-
COVERAGE_MINIMUM = 85.0
|
14
|
-
end
|
15
|
-
end
|
16
|
-
SPEC_FILES = [] unless defined?( SPEC_FILES )
|
17
|
-
TEST_FILES = [] unless defined?( TEST_FILES )
|
18
|
-
|
19
|
-
COMMON_RSPEC_OPTS = [] unless defined?( COMMON_RSPEC_OPTS )
|
20
|
-
|
21
|
-
COVERAGE_TARGETDIR = BASEDIR + 'coverage' unless defined?( COVERAGE_TARGETDIR )
|
22
|
-
RCOV_EXCLUDES = 'spec,tests,/Library/Ruby,/var/lib,/usr/local/lib' unless
|
23
|
-
defined?( RCOV_EXCLUDES )
|
24
|
-
|
25
|
-
|
26
|
-
desc "Run all defined tests"
|
27
|
-
task :test do
|
28
|
-
unless SPEC_FILES.empty?
|
29
|
-
log "Running specs"
|
30
|
-
Rake::Task['spec:quiet'].invoke
|
31
|
-
end
|
32
|
-
|
33
|
-
unless TEST_FILES.empty?
|
34
|
-
log "Running unit tests"
|
35
|
-
Rake::Task[:unittests].invoke
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
|
40
|
-
### RSpec specifications
|
41
|
-
begin
|
42
|
-
gem 'rspec', '>= 2.0.0'
|
43
|
-
|
44
|
-
require 'rspec'
|
45
|
-
require 'rspec/core/rake_task'
|
46
|
-
|
47
|
-
### Task: spec
|
48
|
-
desc "Run specs"
|
49
|
-
task :spec => 'spec:doc'
|
50
|
-
task :specs => :spec
|
51
|
-
|
52
|
-
namespace :spec do
|
53
|
-
desc "Run rspec every time there's a change to one of the files"
|
54
|
-
task :autotest do
|
55
|
-
require 'autotest'
|
56
|
-
Autotest.add_discovery { "rspec2" }
|
57
|
-
Autotest.run
|
58
|
-
end
|
59
|
-
|
60
|
-
desc "Generate regular color 'doc' spec output"
|
61
|
-
RSpec::Core::RakeTask.new( :doc ) do |task|
|
62
|
-
task.rspec_opts = COMMON_RSPEC_OPTS + ['-f', 'd', '-c']
|
63
|
-
end
|
64
|
-
|
65
|
-
desc "Generate spec output with profiling"
|
66
|
-
RSpec::Core::RakeTask.new( :profile ) do |task|
|
67
|
-
task.rspec_opts = COMMON_RSPEC_OPTS + ['-f', 'p', '-p']
|
68
|
-
end
|
69
|
-
|
70
|
-
desc "Generate quiet non-colored plain-text output"
|
71
|
-
RSpec::Core::RakeTask.new( :quiet ) do |task|
|
72
|
-
task.rspec_opts = COMMON_RSPEC_OPTS + ['-f', 'p']
|
73
|
-
end
|
74
|
-
|
75
|
-
desc "Generate HTML output"
|
76
|
-
RSpec::Core::RakeTask.new( :html ) do |task|
|
77
|
-
task.rspec_opts = COMMON_RSPEC_OPTS + ['-f', 'h']
|
78
|
-
end
|
79
|
-
|
80
|
-
|
81
|
-
end
|
82
|
-
|
83
|
-
### Task: coverage (via RCov)
|
84
|
-
desc "Build test coverage reports"
|
85
|
-
RSpec::Core::RakeTask.new( :coverage ) do |task|
|
86
|
-
task.ruby_opts = [ "-I#{LIBDIR}" ]
|
87
|
-
task.rspec_opts = ['-f', 'p', '-b']
|
88
|
-
task.rcov_opts = RCOV_OPTS
|
89
|
-
task.rcov = true
|
90
|
-
end
|
91
|
-
|
92
|
-
### Task: rcov
|
93
|
-
task :rcov => :coverage
|
94
|
-
|
95
|
-
### Other coverage tasks
|
96
|
-
namespace :coverage do
|
97
|
-
desc "Generate a detailed text coverage report"
|
98
|
-
RSpec::Core::RakeTask.new( :text ) do |task|
|
99
|
-
task.rcov_opts = RCOV_OPTS + ['--text-report']
|
100
|
-
task.rcov = true
|
101
|
-
end
|
102
|
-
|
103
|
-
desc "Show differences in coverage from last run"
|
104
|
-
RSpec::Core::RakeTask.new( :diff ) do |task|
|
105
|
-
task.rspec_opts = ['-f', 'p', '-b']
|
106
|
-
task.rcov_opts = RCOV_OPTS - ['--save'] + ['--text-coverage-diff']
|
107
|
-
task.rcov = true
|
108
|
-
end
|
109
|
-
|
110
|
-
desc "Run RCov in 'spec-only' mode to check coverage from specs"
|
111
|
-
RSpec::Core::RakeTask.new( :speconly ) do |task|
|
112
|
-
task.rcov_opts = ['--exclude', RCOV_EXCLUDES, '--text-report', '--save']
|
113
|
-
task.rcov = true
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
CLOBBER.include( COVERAGE_TARGETDIR )
|
118
|
-
rescue LoadError => err
|
119
|
-
task :no_rspec do
|
120
|
-
$stderr.puts "Specification tasks not defined: %s" % [ err.message ]
|
121
|
-
end
|
122
|
-
|
123
|
-
task :spec => :no_rspec
|
124
|
-
namespace :spec do
|
125
|
-
task :autotest => :no_rspec
|
126
|
-
task :doc => :no_rspec
|
127
|
-
task :profile => :no_rspec
|
128
|
-
task :quiet => :no_rspec
|
129
|
-
task :html => :no_rspec
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
|
134
|
-
### Test::Unit tests
|
135
|
-
begin
|
136
|
-
require 'rake/testtask'
|
137
|
-
|
138
|
-
Rake::TestTask.new( :unittests ) do |task|
|
139
|
-
task.libs += [LIBDIR]
|
140
|
-
task.test_files = TEST_FILES
|
141
|
-
task.verbose = true
|
142
|
-
end
|
143
|
-
|
144
|
-
rescue LoadError => err
|
145
|
-
task :no_test do
|
146
|
-
$stderr.puts "Test tasks not defined: %s" % [ err.message ]
|
147
|
-
end
|
148
|
-
|
149
|
-
task :unittests => :no_rspec
|
150
|
-
end
|
151
|
-
|
152
|
-
|
data/rake/verifytask.rb
DELETED
@@ -1,64 +0,0 @@
|
|
1
|
-
#####################################################################
|
2
|
-
### S U B V E R S I O N T A S K S A N D H E L P E R S
|
3
|
-
#####################################################################
|
4
|
-
|
5
|
-
require 'rake/tasklib'
|
6
|
-
|
7
|
-
#
|
8
|
-
# Work around the inexplicable behaviour of the original RDoc::VerifyTask, which
|
9
|
-
# errors if your coverage isn't *exactly* the threshold.
|
10
|
-
#
|
11
|
-
|
12
|
-
# A task that can verify that the RCov coverage doesn't
|
13
|
-
# drop below a certain threshold. It should be run after
|
14
|
-
# running Spec::Rake::SpecTask.
|
15
|
-
class VerifyTask < Rake::TaskLib
|
16
|
-
|
17
|
-
COVERAGE_PERCENTAGE_PATTERN =
|
18
|
-
%r{<tt class='coverage_code'>(\d+\.\d+)%</tt>}
|
19
|
-
|
20
|
-
# Name of the task. Defaults to :verify_rcov
|
21
|
-
attr_accessor :name
|
22
|
-
|
23
|
-
# Path to the index.html file generated by RCov, which
|
24
|
-
# is the file containing the total coverage.
|
25
|
-
# Defaults to 'coverage/index.html'
|
26
|
-
attr_accessor :index_html
|
27
|
-
|
28
|
-
# Whether or not to output details. Defaults to true.
|
29
|
-
attr_accessor :verbose
|
30
|
-
|
31
|
-
# The threshold value (in percent) for coverage. If the
|
32
|
-
# actual coverage is not equal to this value, the task will raise an
|
33
|
-
# exception.
|
34
|
-
attr_accessor :threshold
|
35
|
-
|
36
|
-
def initialize( name=:verify )
|
37
|
-
@name = name
|
38
|
-
@index_html = 'coverage/index.html'
|
39
|
-
@verbose = true
|
40
|
-
yield self if block_given?
|
41
|
-
raise "Threshold must be set" if @threshold.nil?
|
42
|
-
define
|
43
|
-
end
|
44
|
-
|
45
|
-
def define
|
46
|
-
desc "Verify that rcov coverage is at least #{threshold}%"
|
47
|
-
|
48
|
-
task @name do
|
49
|
-
total_coverage = nil
|
50
|
-
if match = File.read( index_html ).match( COVERAGE_PERCENTAGE_PATTERN )
|
51
|
-
total_coverage = Float( match[1] )
|
52
|
-
else
|
53
|
-
raise "Couldn't find the coverage percentage in #{index_html}"
|
54
|
-
end
|
55
|
-
|
56
|
-
puts "Coverage: #{total_coverage}% (threshold: #{threshold}%)" if verbose
|
57
|
-
if total_coverage < threshold
|
58
|
-
raise "Coverage must be at least #{threshold}% but was #{total_coverage}%"
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
# vim: set nosta noet ts=4 sw=4:
|
@@ -1,207 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby -w
|
2
|
-
#
|
3
|
-
# Unit test for English infinitive (stem) forms.
|
4
|
-
# $Id: infinitive.tests.rb,v 21e0fa69b1a3 2008/09/06 05:20:07 ged $
|
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 case tests the English infinitive function.
|
18
|
-
class EnglishInfinitiveTestCase < Linguistics::TestCase
|
19
|
-
|
20
|
-
Linguistics::use( :en )
|
21
|
-
include Linguistics::EN
|
22
|
-
|
23
|
-
### Auto-generate tests for the dataset beneath the '__END__'
|
24
|
-
begin
|
25
|
-
inDataSection = false
|
26
|
-
methodCounter = 5
|
27
|
-
|
28
|
-
# Read the lines of this file below the __END__, splitting each
|
29
|
-
# non-comment line into rule, original word, and expected infinitive
|
30
|
-
# form. Then generate a test method for each one.
|
31
|
-
File::readlines( __FILE__ ).find_all {|line|
|
32
|
-
case line
|
33
|
-
when /^__END_DATA__$/; inDataSection = false
|
34
|
-
when /^__END__$/; inDataSection = true; false
|
35
|
-
else inDataSection end
|
36
|
-
}.each {|line|
|
37
|
-
next if /^\s*#/ =~ line
|
38
|
-
rule, oword, stemword = line.split( /\s+/ )
|
39
|
-
|
40
|
-
# Add a test method for the method interface with a name generated
|
41
|
-
# from the origin word and the method counter.
|
42
|
-
methodname = "test_%04d_method_infinitive%s" %
|
43
|
-
[ methodCounter, oword.capitalize.gsub(/\W+/, '') ]
|
44
|
-
define_method( methodname.intern ) {||
|
45
|
-
rval = ''
|
46
|
-
printTestHeader "English: Stem of '#{oword}' (method)"
|
47
|
-
|
48
|
-
assert_nothing_raised { rval = oword.en.infinitive }
|
49
|
-
assert_instance_of Linguistics::EN::Infinitive, rval
|
50
|
-
assert_block( "Method iface: Stem for #{oword}" ) {
|
51
|
-
stemword == rval or stemword == rval.word2
|
52
|
-
}
|
53
|
-
assert_equal rule, rval.rule, "Method iface: Infinitive rule for #{oword}"
|
54
|
-
}
|
55
|
-
|
56
|
-
methodCounter += 1
|
57
|
-
|
58
|
-
# Add a test method for the functional interface with a name
|
59
|
-
# generated from the origin word and the method counter.
|
60
|
-
methodname = "test_%04d_function_infinitive%s" %
|
61
|
-
[ methodCounter, oword.capitalize.gsub(/\W+/, '') ]
|
62
|
-
define_method( methodname.intern ) {||
|
63
|
-
rval = ''
|
64
|
-
printTestHeader "English: Stem of '#{oword}' (functional)"
|
65
|
-
|
66
|
-
assert_nothing_raised { rval = infinitive( oword ) }
|
67
|
-
assert_instance_of Linguistics::EN::Infinitive, rval
|
68
|
-
assert_block( "Function iface: Stem for #{oword}" ) {
|
69
|
-
stemword == rval or stemword == rval.word2
|
70
|
-
}
|
71
|
-
assert_equal rule, rval.rule, "Function iface: Infinitive rule for #{oword}"
|
72
|
-
}
|
73
|
-
|
74
|
-
methodCounter += 1
|
75
|
-
}
|
76
|
-
end
|
77
|
-
|
78
|
-
|
79
|
-
### Overridden initializer: auto-generated test methods have an arity of 1
|
80
|
-
### even though they don't require an argument (as of the current Ruby CVS),
|
81
|
-
### and the default initializer throws an :invalid_test for methods with
|
82
|
-
### arity != 0.
|
83
|
-
def initialize( test_method_name )
|
84
|
-
if !respond_to?( test_method_name )
|
85
|
-
throw :invalid_test
|
86
|
-
end
|
87
|
-
@method_name = test_method_name
|
88
|
-
@test_passed = true
|
89
|
-
end
|
90
|
-
|
91
|
-
|
92
|
-
#################################################################
|
93
|
-
### T E S T S
|
94
|
-
#################################################################
|
95
|
-
|
96
|
-
### Test to be sure the infinitive module loaded.
|
97
|
-
def test_000_module
|
98
|
-
printTestHeader "English: Infinitive method"
|
99
|
-
assert_respond_to Linguistics::EN, :infinitive
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
|
104
|
-
### Dataset is copied from Lingua::EN::Infinitive by Ron Savage (with a few
|
105
|
-
### bugfixes).
|
106
|
-
__END__
|
107
|
-
1 aches ache
|
108
|
-
1 arches arch
|
109
|
-
2 vases vase
|
110
|
-
2 basses bass
|
111
|
-
3 axes axe
|
112
|
-
3 fixes fix
|
113
|
-
4 hazes haze
|
114
|
-
4 buzzes buzz
|
115
|
-
6a caress caress
|
116
|
-
6b bans ban
|
117
|
-
7 Jones's Jones
|
118
|
-
8 creater creater
|
119
|
-
9 reacter reacter
|
120
|
-
10 copier copy
|
121
|
-
11 baker bake
|
122
|
-
11 smaller small
|
123
|
-
12a curried curry
|
124
|
-
12b bored bore
|
125
|
-
12b seated seat
|
126
|
-
# Can't handle these 2 with the special code as for the following 5 because after
|
127
|
-
# chopping the suffix, we are not left with a one-syllable word. Ie it's too hard.
|
128
|
-
# Yes, that was 5 not 7. Look for the doubled-consonant in the middle of the word.
|
129
|
-
# The special code is in Infinitive.pm @ line 1188.
|
130
|
-
#12b bootstrapped bootstrap
|
131
|
-
#12b bootstrapping bootstrap
|
132
|
-
12b tipped tip
|
133
|
-
12b kitted kit
|
134
|
-
12b capped cap
|
135
|
-
12b chopped chop
|
136
|
-
13a flies fly
|
137
|
-
13b palates palate
|
138
|
-
14a liveliest lively
|
139
|
-
14b wisest wise
|
140
|
-
14b strongest strong
|
141
|
-
15 living live
|
142
|
-
15 laughing laugh
|
143
|
-
15 swaying sway
|
144
|
-
15 catching catch
|
145
|
-
15 smiling smile
|
146
|
-
15 swimming swim
|
147
|
-
15 running run
|
148
|
-
15 floating float
|
149
|
-
15 keyboarding keyboard
|
150
|
-
15 wrestling wrestle
|
151
|
-
15 traveling travel
|
152
|
-
15 traipsing traipse
|
153
|
-
16 stylist style
|
154
|
-
16 dentist dent
|
155
|
-
17 cubism cube
|
156
|
-
17 socialism social
|
157
|
-
18 scarcity scarce
|
158
|
-
18 rapidity rapid
|
159
|
-
19 immunize immune
|
160
|
-
19 lionize lion
|
161
|
-
20c livable live
|
162
|
-
20c portable port
|
163
|
-
22 nobility noble
|
164
|
-
23 identifiable identify
|
165
|
-
24 psychologist psychology
|
166
|
-
25 photographic photography
|
167
|
-
26 stylistic stylist
|
168
|
-
27 martensitic martensite
|
169
|
-
27 politic polite
|
170
|
-
28 ladylike lady
|
171
|
-
29 biologic biology
|
172
|
-
30 battlement battle
|
173
|
-
31 supplemental supplement
|
174
|
-
32 thermometry thermometer
|
175
|
-
33 inadvertence inadvertent
|
176
|
-
34 potency potent
|
177
|
-
35 discipleship disciple
|
178
|
-
36 mystical mystic
|
179
|
-
37 regional region
|
180
|
-
37 national nation
|
181
|
-
38 horribly horrible
|
182
|
-
39 scantily scanty
|
183
|
-
40 partly part
|
184
|
-
41a dutiful duty
|
185
|
-
41b harmful harm
|
186
|
-
42a likelihood likely
|
187
|
-
42b neighborhood neighbor
|
188
|
-
42b neighbourhood neighbour
|
189
|
-
43a penniless penny
|
190
|
-
43b listless list
|
191
|
-
44a heartiness hearty
|
192
|
-
44b coolness cool
|
193
|
-
45 specification specify
|
194
|
-
46 rationalization rationalize
|
195
|
-
47 detection detect
|
196
|
-
48 exertion exert
|
197
|
-
49 creation create
|
198
|
-
50 creator create
|
199
|
-
51 detector detect
|
200
|
-
52 creative creation
|
201
|
-
52 decisive decision
|
202
|
-
53 Australian Australia
|
203
|
-
54 Jeffersonian Jefferson
|
204
|
-
irregular rove reeve
|
205
|
-
irregular dove dive
|
206
|
-
irregular snuck sneak
|
207
|
-
irregular wot wit
|
data/tests/en/inflect.tests.rb
DELETED
@@ -1,1389 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby -w
|
2
|
-
#
|
3
|
-
# Unit test for English inflection
|
4
|
-
# $Id: inflect.tests.rb,v 21e0fa69b1a3 2008/09/06 05:20:07 ged $
|
5
|
-
#
|
6
|
-
# Copyright (c) 2003, 2005 The FaerieMUD Consortium.
|
7
|
-
#
|
8
|
-
# Much of this test was adapted from the test script for Lingua::EN::Inflect by
|
9
|
-
# Damien Conway:
|
10
|
-
#
|
11
|
-
# Copyright (c) 1997-2000, Damian Conway. All Rights Reserved.
|
12
|
-
# This module is free software. It may be used, redistributed
|
13
|
-
# and/or modified under the same terms as Perl itself.
|
14
|
-
#
|
15
|
-
|
16
|
-
unless defined? Linguistics::TestCase
|
17
|
-
testsdir = File::dirname( File::dirname(File::expand_path( __FILE__ )) )
|
18
|
-
$LOAD_PATH.unshift testsdir unless $LOAD_PATH.include?( testsdir )
|
19
|
-
|
20
|
-
require 'lingtestcase'
|
21
|
-
end
|
22
|
-
|
23
|
-
|
24
|
-
### This test case tests the english pluralization routines of the Linguistics
|
25
|
-
### module.
|
26
|
-
class EnglishInflectionTestCase < Linguistics::TestCase
|
27
|
-
|
28
|
-
InflectFromItems = [ %w{foo bar}, "foo bar", 15, 18.13 ]
|
29
|
-
|
30
|
-
NumberTests = [
|
31
|
-
["0", "zero", "zero", "zero", "zero", "zeroth", ],
|
32
|
-
["1", "one", "one", "one", "one", "first", ],
|
33
|
-
["2", "two", "two", "two", "two", "second", ],
|
34
|
-
["3", "three", "three", "three", "three", "third", ],
|
35
|
-
["4", "four", "four", "four", "four", "fourth", ],
|
36
|
-
["5", "five", "five", "five", "five", "fifth", ],
|
37
|
-
["6", "six", "six", "six", "six", "sixth", ],
|
38
|
-
["7", "seven", "seven", "seven", "seven", "seventh", ],
|
39
|
-
["8", "eight", "eight", "eight", "eight", "eighth", ],
|
40
|
-
["9", "nine", "nine", "nine", "nine", "ninth", ],
|
41
|
-
["10", "ten", "one, zero", "ten", "ten", "tenth", ],
|
42
|
-
["11", "eleven", "one, one", "eleven", "eleven", "eleventh", ],
|
43
|
-
["12", "twelve", "one, two", "twelve", "twelve", "twelfth", ],
|
44
|
-
["13", "thirteen", "one, three", "thirteen", "thirteen", "thirteenth", ],
|
45
|
-
["14", "fourteen", "one, four", "fourteen", "fourteen", "fourteenth", ],
|
46
|
-
["15", "fifteen", "one, five", "fifteen", "fifteen", "fifteenth", ],
|
47
|
-
["16", "sixteen", "one, six", "sixteen", "sixteen", "sixteenth", ],
|
48
|
-
["17", "seventeen", "one, seven", "seventeen", "seventeen", "seventeenth", ],
|
49
|
-
["18", "eighteen", "one, eight", "eighteen", "eighteen", "eighteenth", ],
|
50
|
-
["19", "nineteen", "one, nine", "nineteen", "nineteen", "nineteenth", ],
|
51
|
-
["20", "twenty", "two, zero", "twenty", "twenty", "twentieth", ],
|
52
|
-
["21", "twenty-one", "two, one", "twenty-one", "twenty-one", "twenty-first", ],
|
53
|
-
["29", "twenty-nine", "two, nine", "twenty-nine", "twenty-nine", "twenty-ninth", ],
|
54
|
-
["99", "ninety-nine", "nine, nine", "ninety-nine", "ninety-nine", "ninety-ninth", ],
|
55
|
-
|
56
|
-
["100", "one hundred", "one, zero, zero", "ten, zero", "one zero zero",
|
57
|
-
"one hundredth", ],
|
58
|
-
["101", "one hundred and one", "one, zero, one", "ten, one", "one zero one",
|
59
|
-
"one hundred and first", ],
|
60
|
-
["110", "one hundred and ten", "one, one, zero", "eleven, zero", "one ten",
|
61
|
-
"one hundred and tenth", ],
|
62
|
-
["111", "one hundred and eleven", "one, one, one", "eleven, one", "one eleven",
|
63
|
-
"one hundred and eleventh", ],
|
64
|
-
["900", "nine hundred", "nine, zero, zero", "ninety, zero", "nine zero zero",
|
65
|
-
"nine hundredth", ],
|
66
|
-
["999", "nine hundred and ninety-nine", "nine, nine, nine", "ninety-nine, nine",
|
67
|
-
"nine ninety-nine", "nine hundred and ninety-ninth", ],
|
68
|
-
|
69
|
-
["1000", "one thousand", "one, zero, zero, zero", "ten, zero zero",
|
70
|
-
"one zero zero, zero", "one thousandth", ],
|
71
|
-
["1001", "one thousand and one", "one, zero, zero, one", "ten, zero one",
|
72
|
-
"one zero zero, one", "one thousand and first", ],
|
73
|
-
["1010", "one thousand and ten", "one, zero, one, zero", "ten, ten",
|
74
|
-
"one zero one, zero", "one thousand and tenth", ],
|
75
|
-
["1100", "one thousand, one hundred", "one, one, zero, zero",
|
76
|
-
"eleven, zero zero", "one ten, zero", "one thousand, one hundredth", ],
|
77
|
-
["2000", "two thousand", "two, zero, zero, zero", "twenty, zero zero",
|
78
|
-
"two zero zero, zero", "two thousandth", ],
|
79
|
-
["10000", "ten thousand", "one, zero, zero, zero, zero", "ten, zero zero, zero",
|
80
|
-
"one zero zero, zero zero", "ten thousandth", ],
|
81
|
-
|
82
|
-
["100000", "one hundred thousand", "one, zero, zero, zero, zero, zero",
|
83
|
-
"ten, zero zero, zero zero", "one zero zero, zero zero zero",
|
84
|
-
"one hundred thousandth", ],
|
85
|
-
["100001", "one hundred thousand and one", "one, zero, zero, zero, zero, one",
|
86
|
-
"ten, zero zero, zero one", "one zero zero, zero zero one",
|
87
|
-
"one hundred thousand and first", ],
|
88
|
-
["123456", "one hundred and twenty-three thousand, four hundred and fifty-six",
|
89
|
-
"one, two, three, four, five, six", "twelve, thirty-four, fifty-six",
|
90
|
-
"one twenty-three, four fifty-six",
|
91
|
-
"one hundred and twenty-three thousand, four hundred and fifty-sixth", ],
|
92
|
-
["0123456", "one hundred and twenty-three thousand, four hundred and fifty-six",
|
93
|
-
"zero, one, two, three, four, five, six",
|
94
|
-
"zero one, twenty-three, forty-five, six",
|
95
|
-
"zero twelve, three forty-five, six",
|
96
|
-
"one hundred and twenty-three thousand, four hundred and fifty-sixth", ],
|
97
|
-
|
98
|
-
["1234567",
|
99
|
-
"one million, two hundred and thirty-four thousand, five hundred and sixty-seven",
|
100
|
-
"one, two, three, four, five, six, seven", "twelve, thirty-four, fifty-six, seven",
|
101
|
-
"one twenty-three, four fifty-six, seven",
|
102
|
-
"one million, two hundred and thirty-four thousand, five hundred and sixty-seventh", ],
|
103
|
-
["12345678",
|
104
|
-
"twelve million, three hundred and forty-five thousand, six hundred and seventy-eight",
|
105
|
-
"one, two, three, four, five, six, seven, eight",
|
106
|
-
"twelve, thirty-four, fifty-six, seventy-eight",
|
107
|
-
"one twenty-three, four fifty-six, seventy-eight",
|
108
|
-
"twelve million, three hundred and forty-five thousand, six hundred and seventy-eighth", ],
|
109
|
-
["12_345_678",
|
110
|
-
"twelve million, three hundred and forty-five thousand, six hundred and seventy-eight",
|
111
|
-
"one, two, three, four, five, six, seven, eight",
|
112
|
-
"twelve, thirty-four, fifty-six, seventy-eight",
|
113
|
-
"one twenty-three, four fifty-six, seventy-eight", ],
|
114
|
-
["1234,5678",
|
115
|
-
"twelve million, three hundred and forty-five thousand, six hundred and seventy-eight",
|
116
|
-
"one, two, three, four, five, six, seven, eight",
|
117
|
-
"twelve, thirty-four, fifty-six, seventy-eight",
|
118
|
-
"one twenty-three, four fifty-six, seventy-eight", ],
|
119
|
-
["1234567890",
|
120
|
-
"one billion, two hundred and thirty-four million, five hundred and sixty-seven thousand, eight hundred and ninety",
|
121
|
-
"one, two, three, four, five, six, seven, eight, nine, zero",
|
122
|
-
"twelve, thirty-four, fifty-six, seventy-eight, ninety",
|
123
|
-
"one twenty-three, four fifty-six, seven eighty-nine, zero",
|
124
|
-
"one billion, two hundred and thirty-four million, five hundred and sixty-seven thousand, eight hundred and ninetieth", ],
|
125
|
-
["123456789012345",
|
126
|
-
"one hundred and twenty-three trillion, four hundred and fifty-six billion, seven hundred and eighty-nine million, twelve thousand, three hundred and forty-five",
|
127
|
-
"one, two, three, four, five, six, seven, eight, nine, zero, one, two, three, four, five",
|
128
|
-
"twelve, thirty-four, fifty-six, seventy-eight, ninety, twelve, thirty-four, five",
|
129
|
-
"one twenty-three, four fifty-six, seven eighty-nine, zero twelve, three forty-five",
|
130
|
-
"one hundred and twenty-three trillion, four hundred and fifty-six billion, seven hundred and eighty-nine million, twelve thousand, three hundred and forty-fifth", ],
|
131
|
-
["12345678901234567890",
|
132
|
-
"twelve quintillion, three hundred and forty-five quadrillion, six hundred and seventy-eight trillion, nine hundred and one billion, two hundred and thirty-four million, five hundred and sixty-seven thousand, eight hundred and ninety",
|
133
|
-
"one, two, three, four, five, six, seven, eight, nine, zero, one, two, three, four, five, six, seven, eight, nine, zero",
|
134
|
-
"twelve, thirty-four, fifty-six, seventy-eight, ninety, twelve, thirty-four, fifty-six, seventy-eight, ninety",
|
135
|
-
"one twenty-three, four fifty-six, seven eighty-nine, zero twelve, three forty-five, six seventy-eight, ninety",
|
136
|
-
"twelve quintillion, three hundred and forty-five quadrillion, six hundred and seventy-eight trillion, nine hundred and one billion, two hundred and thirty-four million, five hundred and sixty-seven thousand, eight hundred and ninetieth", ],
|
137
|
-
|
138
|
-
["0.987654", "zero point nine eight seven six five four",
|
139
|
-
"zero, point, nine, eight, seven, six, five, four",
|
140
|
-
"zero, point, ninety-eight, seventy-six, fifty-four",
|
141
|
-
"zero, point, nine eighty-seven, six fifty-four",
|
142
|
-
"zero point nine eight seven six five fourth", ],
|
143
|
-
[".987654", "point nine eight seven six five four",
|
144
|
-
"point, nine, eight, seven, six, five, four",
|
145
|
-
"point, ninety-eight, seventy-six, fifty-four",
|
146
|
-
"point, nine eighty-seven, six fifty-four",
|
147
|
-
"point nine eight seven six five fourth", ],
|
148
|
-
["9.87654", "nine point eight seven six five four",
|
149
|
-
"nine, point, eight, seven, six, five, four",
|
150
|
-
"nine, point, eighty-seven, sixty-five, four",
|
151
|
-
"nine, point, eight seventy-six, fifty-four",
|
152
|
-
"nine point eight seven six five fourth", ],
|
153
|
-
["98.7654", "ninety-eight point seven six five four",
|
154
|
-
"nine, eight, point, seven, six, five, four",
|
155
|
-
"ninety-eight, point, seventy-six, fifty-four",
|
156
|
-
"ninety-eight, point, seven sixty-five, four",
|
157
|
-
"ninety-eight point seven six five fourth", ],
|
158
|
-
["987.654", "nine hundred and eighty-seven point six five four",
|
159
|
-
"nine, eight, seven, point, six, five, four",
|
160
|
-
"ninety-eight, seven, point, sixty-five, four",
|
161
|
-
"nine eighty-seven, point, six fifty-four",
|
162
|
-
"nine hundred and eighty-seven point six five fourth", ],
|
163
|
-
["9876.54", "nine thousand, eight hundred and seventy-six point five four",
|
164
|
-
"nine, eight, seven, six, point, five, four",
|
165
|
-
"ninety-eight, seventy-six, point, fifty-four",
|
166
|
-
"nine eighty-seven, six, point, fifty-four",
|
167
|
-
"nine thousand, eight hundred and seventy-six point five fourth", ],
|
168
|
-
["98765.4", "ninety-eight thousand, seven hundred and sixty-five point four",
|
169
|
-
"nine, eight, seven, six, five, point, four",
|
170
|
-
"ninety-eight, seventy-six, five, point, four",
|
171
|
-
"nine eighty-seven, sixty-five, point, four",
|
172
|
-
"ninety-eight thousand, seven hundred and sixty-five point fourth", ],
|
173
|
-
["101.202.303", "one hundred and one point two zero two three zero three",
|
174
|
-
"one, zero, one, point, two, zero, two, point, three, zero, three",
|
175
|
-
"ten, one, point, twenty, two, point, thirty, three",
|
176
|
-
"one zero one, point, two zero two, point, three zero three",
|
177
|
-
]
|
178
|
-
]
|
179
|
-
|
180
|
-
|
181
|
-
Ordinals = {
|
182
|
-
:numbers => {
|
183
|
-
0 => "0th",
|
184
|
-
1 => "1st",
|
185
|
-
2 => "2nd",
|
186
|
-
3 => "3rd",
|
187
|
-
4 => "4th",
|
188
|
-
5 => "5th",
|
189
|
-
6 => "6th",
|
190
|
-
7 => "7th",
|
191
|
-
8 => "8th",
|
192
|
-
9 => "9th",
|
193
|
-
10 => "10th",
|
194
|
-
11 => "11th",
|
195
|
-
12 => "12th",
|
196
|
-
13 => "13th",
|
197
|
-
14 => "14th",
|
198
|
-
15 => "15th",
|
199
|
-
16 => "16th",
|
200
|
-
17 => "17th",
|
201
|
-
18 => "18th",
|
202
|
-
19 => "19th",
|
203
|
-
20 => "20th",
|
204
|
-
21 => "21st",
|
205
|
-
22 => "22nd",
|
206
|
-
23 => "23rd",
|
207
|
-
24 => "24th",
|
208
|
-
100 => "100th",
|
209
|
-
101 => "101st",
|
210
|
-
102 => "102nd",
|
211
|
-
103 => "103rd",
|
212
|
-
104 => "104th",
|
213
|
-
},
|
214
|
-
|
215
|
-
:words => {
|
216
|
-
'zero' => "zeroth",
|
217
|
-
'one' => "first",
|
218
|
-
'two' => "second",
|
219
|
-
'three' => "third",
|
220
|
-
'four' => "fourth",
|
221
|
-
'five' => "fifth",
|
222
|
-
'six' => "sixth",
|
223
|
-
'seven' => "seventh",
|
224
|
-
'eight' => "eighth",
|
225
|
-
'nine' => "ninth",
|
226
|
-
'ten' => "tenth",
|
227
|
-
|
228
|
-
'eleven' => "eleventh",
|
229
|
-
'twelve' => "twelfth",
|
230
|
-
'thirteen' => "thirteenth",
|
231
|
-
'fourteen' => "fourteenth",
|
232
|
-
'fifteen' => "fifteenth",
|
233
|
-
'sixteen' => "sixteenth",
|
234
|
-
'seventeen' => "seventeenth",
|
235
|
-
'eighteen' => "eighteenth",
|
236
|
-
'nineteen' => "nineteenth",
|
237
|
-
'twenty' => "twentieth",
|
238
|
-
|
239
|
-
'twenty-one' => "twenty-first",
|
240
|
-
'twenty-two' => "twenty-second",
|
241
|
-
'twenty-three' => "twenty-third",
|
242
|
-
'twenty-four' => "twenty-fourth",
|
243
|
-
'one hundred' => "one hundredth",
|
244
|
-
|
245
|
-
'one hundred and one' => "one hundred and first",
|
246
|
-
'one hundred and two' => "one hundred and second",
|
247
|
-
'one hundred and three' => "one hundred and third",
|
248
|
-
'one hundred and four' => "one hundred and fourth",
|
249
|
-
}
|
250
|
-
}
|
251
|
-
|
252
|
-
PresentParticiples = {
|
253
|
-
'sees' => "seeing",
|
254
|
-
'eats' => "eating",
|
255
|
-
'bats' => "batting",
|
256
|
-
'hates' => "hating",
|
257
|
-
'spies' => "spying",
|
258
|
-
}
|
259
|
-
|
260
|
-
|
261
|
-
PluralDataLine = /^\s*(.*?)\s*->\s*(.*?)\s*(?:\|\s*(.*?)\s*)?(?:#\s*(.*))?$/
|
262
|
-
ArticleDataLine = /^\s+(an?)\s+(.*?)\s*$/
|
263
|
-
|
264
|
-
### Auto-generate tests for pluralization and indefinite articles
|
265
|
-
begin
|
266
|
-
inDataSection = false
|
267
|
-
methodCounter = 100
|
268
|
-
File::readlines( __FILE__ ).find_all do |line|
|
269
|
-
case line
|
270
|
-
when /^__END_DATA__$/
|
271
|
-
inDataSection = false
|
272
|
-
false
|
273
|
-
|
274
|
-
when /^__END__$/
|
275
|
-
inDataSection = true
|
276
|
-
false
|
277
|
-
|
278
|
-
else
|
279
|
-
inDataSection
|
280
|
-
end
|
281
|
-
end.each do |line|
|
282
|
-
case line
|
283
|
-
when PluralDataLine
|
284
|
-
singular, plural, altplural, comment = $~.to_a[1,4]
|
285
|
-
methodName = "test_%04d_pluralize%s" %
|
286
|
-
[ methodCounter, singular.gsub(/\W+/, '').capitalize ]
|
287
|
-
define_method( methodName.intern ) {||
|
288
|
-
printTestHeader "English: Plural of '#{singular}'"
|
289
|
-
assertPlural( singular, plural, altplural, comment )
|
290
|
-
}
|
291
|
-
methodCounter += 1
|
292
|
-
|
293
|
-
when ArticleDataLine
|
294
|
-
article, word = $~.to_a[1,2]
|
295
|
-
methodName = "test_%04d_%s%s" %
|
296
|
-
[ methodCounter, article, word.gsub(/\W+/, '').capitalize ]
|
297
|
-
define_method( methodName.intern ) {||
|
298
|
-
printTestHeader "English: Indefinite article for '#{word}'"
|
299
|
-
assertArticle( article, word )
|
300
|
-
}
|
301
|
-
|
302
|
-
methodCounter += 1
|
303
|
-
else
|
304
|
-
debug_msg "Skipped test data line '#{line.chomp}'"
|
305
|
-
end
|
306
|
-
end
|
307
|
-
end
|
308
|
-
|
309
|
-
### Overridden initializer: auto-generated test methods have an arity of 1
|
310
|
-
### even though they don't require an argument (as of the current Ruby CVS),
|
311
|
-
### and the default initializer throws an :invalid_test for methods with
|
312
|
-
### arity != 0.
|
313
|
-
def initialize( test_method_name )
|
314
|
-
if !respond_to?( test_method_name )
|
315
|
-
throw :invalid_test
|
316
|
-
end
|
317
|
-
@method_name = test_method_name
|
318
|
-
@test_passed = true
|
319
|
-
|
320
|
-
Linguistics::use( :en )
|
321
|
-
end
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
#################################################################
|
326
|
-
### T E S T S
|
327
|
-
#################################################################
|
328
|
-
|
329
|
-
def test_0000_loaded
|
330
|
-
assert_respond_to Linguistics::EN, :numwords
|
331
|
-
end
|
332
|
-
|
333
|
-
|
334
|
-
def test_0030_numwords
|
335
|
-
printTestHeader "English: Numbers to words"
|
336
|
-
rval = nil
|
337
|
-
|
338
|
-
NumberTests.each do
|
339
|
-
|origin, regular, group1, group2, group3, numord, ordnum|
|
340
|
-
|
341
|
-
op = "Regular numwords for #{origin}"
|
342
|
-
assert_nothing_raised( op ) { rval = origin.en.numwords }
|
343
|
-
assert_equal regular, rval, op
|
344
|
-
|
345
|
-
op = "Group 1 numwords for #{origin}"
|
346
|
-
assert_nothing_raised( op ) { rval = origin.en.numwords( :group => 1 ) }
|
347
|
-
assert_equal group1, rval, op
|
348
|
-
|
349
|
-
op = "Group 2 numwords for #{origin}"
|
350
|
-
assert_nothing_raised( op ) { rval = origin.en.numwords( :group => 2 ) }
|
351
|
-
assert_equal group2, rval, op
|
352
|
-
|
353
|
-
op = "Group 3 numwords for #{origin}"
|
354
|
-
assert_nothing_raised( op ) { rval = origin.en.numwords( :group => 3 ) }
|
355
|
-
assert_equal group3, rval, op
|
356
|
-
|
357
|
-
if numord
|
358
|
-
op = "Numwords -> ordinal for #{origin}"
|
359
|
-
assert_nothing_raised( op ) { rval = origin.en.numwords.en.ordinal }
|
360
|
-
assert_equal numord, rval, op
|
361
|
-
end
|
362
|
-
end
|
363
|
-
end
|
364
|
-
|
365
|
-
|
366
|
-
def test_numwords_with_an_symboland_should_use_it_to_join_words
|
367
|
-
rval = nil
|
368
|
-
|
369
|
-
assert_nothing_raised do
|
370
|
-
rval = 2006.en.numwords( :and => ' ' )
|
371
|
-
end
|
372
|
-
|
373
|
-
assert_equal "two thousand six", rval
|
374
|
-
end
|
375
|
-
|
376
|
-
|
377
|
-
def test_0040_ordinalNumbers
|
378
|
-
printTestHeader "English: Numbers to ordinals"
|
379
|
-
rval = nil
|
380
|
-
|
381
|
-
Ordinals[:numbers].each do |input,output|
|
382
|
-
op = "Ordinal for #{input.inspect}"
|
383
|
-
assert_nothing_raised( op ) { rval = input.en.ordinal }
|
384
|
-
assert_kind_of String, rval, op
|
385
|
-
assert_equal output, rval, op
|
386
|
-
end
|
387
|
-
end
|
388
|
-
|
389
|
-
|
390
|
-
def test_0045_ordinalWords
|
391
|
-
printTestHeader "English: Number words to ordinals"
|
392
|
-
rval = nil
|
393
|
-
|
394
|
-
Ordinals[:numbers].each do |input,output|
|
395
|
-
op = "Ordinal for #{input.inspect}"
|
396
|
-
assert_nothing_raised( op ) { rval = input.en.ordinal }
|
397
|
-
assert_kind_of String, rval, op
|
398
|
-
assert_equal output, rval, op
|
399
|
-
end
|
400
|
-
end
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
#
|
405
|
-
# Common routines for auto-generated test methods
|
406
|
-
#
|
407
|
-
|
408
|
-
def assertPlural( singular, plural, altplural, comment )
|
409
|
-
rval, pl_noun, pl_verb, pl, pl_val, altpl_val = [nil] * 6
|
410
|
-
|
411
|
-
isNv = false
|
412
|
-
case comment
|
413
|
-
when /verb/i
|
414
|
-
isNv = 'verb'
|
415
|
-
when /noun/i
|
416
|
-
isNv = 'noun'
|
417
|
-
end
|
418
|
-
|
419
|
-
op = "Pluralizing '#{singular}': "
|
420
|
-
assert_nothing_raised( op + "plural verb" ) {
|
421
|
-
pl_verb = singular.en.plural_verb
|
422
|
-
}
|
423
|
-
assert_nothing_raised( op + "plural noun" ) {
|
424
|
-
pl_noun = singular.en.plural_noun
|
425
|
-
}
|
426
|
-
assert_nothing_raised( op + "plural" ) {
|
427
|
-
pl = singular.en.plural
|
428
|
-
}
|
429
|
-
|
430
|
-
if !altplural.nil? && !altplural.empty?
|
431
|
-
begin
|
432
|
-
assert_nothing_raised( op + "classical" ) {
|
433
|
-
Linguistics::classical = true
|
434
|
-
altpl_val = singular.en.plural
|
435
|
-
}
|
436
|
-
ensure
|
437
|
-
Linguistics::classical = false
|
438
|
-
end
|
439
|
-
end
|
440
|
-
|
441
|
-
pl_val = isNv ? (isNv == "noun" ? pl_noun : pl_verb) : pl
|
442
|
-
|
443
|
-
assert_equal plural, pl_val, "Plural of '#{singular}'"
|
444
|
-
assert_equal altplural, altpl_val,
|
445
|
-
"Classical plural of '#{singular}'" unless
|
446
|
-
altplural.nil? or altplural.empty?
|
447
|
-
end
|
448
|
-
|
449
|
-
|
450
|
-
def assertArticle( article, word )
|
451
|
-
rval = nil
|
452
|
-
op = "Indefinite article for '#{word}'"
|
453
|
-
assert_nothing_raised( op ) {
|
454
|
-
rval = word.en.a
|
455
|
-
}
|
456
|
-
assert_equal "#{article} #{word}", rval, op
|
457
|
-
end
|
458
|
-
|
459
|
-
|
460
|
-
end
|
461
|
-
|
462
|
-
|
463
|
-
### Dataset is from Lingua::EN::Inflect's test suite.
|
464
|
-
__END__
|
465
|
-
|
466
|
-
a -> some # INDEFINITE ARTICLE
|
467
|
-
a -> as # NOUN FORM
|
468
|
-
A.C.R.O.N.Y.M. -> A.C.R.O.N.Y.M.s
|
469
|
-
abscissa -> abscissas|abscissae
|
470
|
-
Achinese -> Achinese
|
471
|
-
acropolis -> acropolises
|
472
|
-
adieu -> adieus|adieux
|
473
|
-
adjutant general -> adjutant generals
|
474
|
-
aegis -> aegises
|
475
|
-
afflatus -> afflatuses
|
476
|
-
afreet -> afreets|afreeti
|
477
|
-
afrit -> afrits|afriti
|
478
|
-
agendum -> agenda
|
479
|
-
aide-de-camp -> aides-de-camp
|
480
|
-
Alabaman -> Alabamans
|
481
|
-
albino -> albinos
|
482
|
-
album -> albums
|
483
|
-
Alfurese -> Alfurese
|
484
|
-
alga -> algae
|
485
|
-
alias -> aliases
|
486
|
-
alto -> altos|alti
|
487
|
-
alumna -> alumnae
|
488
|
-
alumnus -> alumni
|
489
|
-
alveolus -> alveoli
|
490
|
-
am -> are
|
491
|
-
am going -> are going
|
492
|
-
ambassador-at-large -> ambassadors-at-large
|
493
|
-
Amboinese -> Amboinese
|
494
|
-
Americanese -> Americanese
|
495
|
-
amoeba -> amoebas|amoebae
|
496
|
-
Amoyese -> Amoyese
|
497
|
-
an -> some # INDEFINITE ARTICLE
|
498
|
-
analysis -> analyses
|
499
|
-
anathema -> anathemas|anathemata
|
500
|
-
Andamanese -> Andamanese
|
501
|
-
Angolese -> Angolese
|
502
|
-
Annamese -> Annamese
|
503
|
-
antenna -> antennas|antennae
|
504
|
-
anus -> anuses
|
505
|
-
apex -> apexes|apices
|
506
|
-
apex's -> apexes'|apices' # POSSESSIVE FORM
|
507
|
-
aphelion -> aphelia
|
508
|
-
apparatus -> apparatuses|apparatus
|
509
|
-
appendix -> appendixes|appendices
|
510
|
-
apple -> apples
|
511
|
-
aquarium -> aquariums|aquaria
|
512
|
-
Aragonese -> Aragonese
|
513
|
-
Arakanese -> Arakanese
|
514
|
-
archipelago -> archipelagos
|
515
|
-
are -> are
|
516
|
-
are made -> are made
|
517
|
-
armadillo -> armadillos
|
518
|
-
arpeggio -> arpeggios
|
519
|
-
arthritis -> arthritises
|
520
|
-
asbestos -> asbestoses
|
521
|
-
asparagus -> asparaguses
|
522
|
-
ass -> asses
|
523
|
-
Assamese -> Assamese
|
524
|
-
asylum -> asylums
|
525
|
-
asyndeton -> asyndeta
|
526
|
-
at it -> at them # ACCUSATIVE
|
527
|
-
ate -> ate
|
528
|
-
atlas -> atlases
|
529
|
-
attorney general -> attorneys general
|
530
|
-
attorney of record -> attorneys of record
|
531
|
-
aurora -> auroras|aurorae
|
532
|
-
aviatrix -> aviatrixes|aviatrices
|
533
|
-
aviatrix's -> aviatrixes'|aviatrices'
|
534
|
-
Avignonese -> Avignonese
|
535
|
-
axe -> axes
|
536
|
-
axis -> axes
|
537
|
-
Azerbaijanese -> Azerbaijanese
|
538
|
-
bacillus -> bacilli
|
539
|
-
bacterium -> bacteria
|
540
|
-
Bahaman -> Bahamans
|
541
|
-
Balinese -> Balinese
|
542
|
-
bamboo -> bamboos
|
543
|
-
banjo -> banjoes
|
544
|
-
bass -> basses # INSTRUMENT, NOT FISH
|
545
|
-
basso -> bassos|bassi
|
546
|
-
bathos -> bathoses
|
547
|
-
beau -> beaus|beaux
|
548
|
-
beef -> beefs|beeves
|
549
|
-
beneath it -> beneath them # ACCUSATIVE
|
550
|
-
Bengalese -> Bengalese
|
551
|
-
bent -> bent # VERB FORM
|
552
|
-
bent -> bents # NOUN FORM
|
553
|
-
Bernese -> Bernese
|
554
|
-
Bhutanese -> Bhutanese
|
555
|
-
bias -> biases
|
556
|
-
biceps -> biceps
|
557
|
-
bison -> bisons|bison
|
558
|
-
Bolognese -> Bolognese
|
559
|
-
bonus -> bonuses
|
560
|
-
Borghese -> Borghese
|
561
|
-
boss -> bosses
|
562
|
-
Bostonese -> Bostonese
|
563
|
-
box -> boxes
|
564
|
-
boy -> boys
|
565
|
-
bravo -> bravoes
|
566
|
-
bream -> bream
|
567
|
-
breeches -> breeches
|
568
|
-
bride-to-be -> brides-to-be
|
569
|
-
britches -> britches
|
570
|
-
bronchitis -> bronchitises
|
571
|
-
bronchus -> bronchi
|
572
|
-
brother -> brothers|brethren
|
573
|
-
brother's -> brothers'|brethren's
|
574
|
-
buffalo -> buffaloes|buffalo
|
575
|
-
Buginese -> Buginese
|
576
|
-
buoy -> buoys
|
577
|
-
bureau -> bureaus|bureaux
|
578
|
-
Burman -> Burmans
|
579
|
-
Burmese -> Burmese
|
580
|
-
bursitis -> bursitises
|
581
|
-
bus -> buses
|
582
|
-
buzz -> buzzes
|
583
|
-
buzzes -> buzz # VERB FORM
|
584
|
-
by it -> by them # ACCUSATIVE
|
585
|
-
caddis -> caddises
|
586
|
-
cake -> cakes
|
587
|
-
Calabrese -> Calabrese
|
588
|
-
calf -> calves
|
589
|
-
callus -> calluses
|
590
|
-
Camaldolese -> Camaldolese
|
591
|
-
cameo -> cameos
|
592
|
-
campus -> campuses
|
593
|
-
can -> cans # NOUN FORM
|
594
|
-
can -> can # VERB FORM (all pers.)
|
595
|
-
candelabrum -> candelabra
|
596
|
-
cannabis -> cannabises
|
597
|
-
canto -> cantos
|
598
|
-
Cantonese -> Cantonese
|
599
|
-
cantus -> cantus
|
600
|
-
canvas -> canvases
|
601
|
-
CAPITAL -> CAPITALS
|
602
|
-
carcinoma -> carcinomas|carcinomata
|
603
|
-
care -> cares
|
604
|
-
cargo -> cargoes
|
605
|
-
Carlylese -> Carlylese
|
606
|
-
carp -> carp
|
607
|
-
Cassinese -> Cassinese
|
608
|
-
cat -> cats
|
609
|
-
catfish -> catfish
|
610
|
-
Celanese -> Celanese
|
611
|
-
Ceylonese -> Ceylonese
|
612
|
-
chairman -> chairmen
|
613
|
-
chamois -> chamois
|
614
|
-
chaos -> chaoses
|
615
|
-
chapeau -> chapeaus|chapeaux
|
616
|
-
charisma -> charismas|charismata
|
617
|
-
chases -> chase
|
618
|
-
chassis -> chassis
|
619
|
-
chateau -> chateaus|chateaux
|
620
|
-
cherub -> cherubs|cherubim
|
621
|
-
chickenpox -> chickenpox
|
622
|
-
chief -> chiefs
|
623
|
-
child -> children
|
624
|
-
Chinese -> Chinese
|
625
|
-
chorus -> choruses
|
626
|
-
church -> churches
|
627
|
-
cicatrix -> cicatrixes|cicatrices
|
628
|
-
circus -> circuses
|
629
|
-
class -> classes
|
630
|
-
classes -> class # VERB FORM
|
631
|
-
clippers -> clippers
|
632
|
-
clitoris -> clitorises|clitorides
|
633
|
-
cod -> cod
|
634
|
-
codex -> codices
|
635
|
-
coitus -> coitus
|
636
|
-
commando -> commandos
|
637
|
-
compendium -> compendiums|compendia
|
638
|
-
Congoese -> Congoese
|
639
|
-
Congolese -> Congolese
|
640
|
-
conspectus -> conspectuses
|
641
|
-
contralto -> contraltos|contralti
|
642
|
-
contretemps -> contretemps
|
643
|
-
conundrum -> conundrums
|
644
|
-
corps -> corps
|
645
|
-
corpus -> corpuses|corpora
|
646
|
-
cortex -> cortexes|cortices
|
647
|
-
cosmos -> cosmoses
|
648
|
-
court martial -> courts martial
|
649
|
-
cow -> cows|kine
|
650
|
-
cranium -> craniums|crania
|
651
|
-
crescendo -> crescendos
|
652
|
-
criterion -> criteria
|
653
|
-
curriculum -> curriculums|curricula
|
654
|
-
dais -> daises
|
655
|
-
data point -> data points
|
656
|
-
datum -> data
|
657
|
-
debris -> debris
|
658
|
-
decorum -> decorums
|
659
|
-
deer -> deer
|
660
|
-
delphinium -> delphiniums
|
661
|
-
desideratum -> desiderata
|
662
|
-
diabetes -> diabetes
|
663
|
-
dictum -> dictums|dicta
|
664
|
-
did -> did
|
665
|
-
did need -> did need
|
666
|
-
digitalis -> digitalises
|
667
|
-
dingo -> dingoes
|
668
|
-
diploma -> diplomas|diplomata
|
669
|
-
discus -> discuses
|
670
|
-
dish -> dishes
|
671
|
-
ditto -> dittos
|
672
|
-
djinn -> djinn
|
673
|
-
does -> do
|
674
|
-
dog -> dogs
|
675
|
-
dogma -> dogmas|dogmata
|
676
|
-
dominatrix -> dominatrixes|dominatrices
|
677
|
-
domino -> dominoes
|
678
|
-
Dongolese -> Dongolese
|
679
|
-
drama -> dramas|dramata
|
680
|
-
drum -> drums
|
681
|
-
dwarf -> dwarves
|
682
|
-
dynamo -> dynamos
|
683
|
-
edema -> edemas|edemata
|
684
|
-
eland -> elands|eland
|
685
|
-
elf -> elves
|
686
|
-
elk -> elks|elk
|
687
|
-
embryo -> embryos
|
688
|
-
emporium -> emporiums|emporia
|
689
|
-
encephalitis -> encephalitises
|
690
|
-
enconium -> enconiums|enconia
|
691
|
-
enema -> enemas|enemata
|
692
|
-
enigma -> enigmas|enigmata
|
693
|
-
ephemeris -> ephemerides
|
694
|
-
epidermis -> epidermises
|
695
|
-
erratum -> errata
|
696
|
-
ethos -> ethoses
|
697
|
-
eucalyptus -> eucalyptuses
|
698
|
-
extremum -> extrema
|
699
|
-
eyas -> eyases
|
700
|
-
factotum -> factotums
|
701
|
-
Faroese -> Faroese
|
702
|
-
fauna -> faunas|faunae
|
703
|
-
fax -> faxes
|
704
|
-
Ferrarese -> Ferrarese
|
705
|
-
ferry -> ferries
|
706
|
-
fetus -> fetuses
|
707
|
-
fiance -> fiances
|
708
|
-
fiancee -> fiancees
|
709
|
-
fiasco -> fiascos
|
710
|
-
fish -> fish
|
711
|
-
fizz -> fizzes
|
712
|
-
flamingo -> flamingoes
|
713
|
-
flora -> floras|florae
|
714
|
-
flounder -> flounder
|
715
|
-
focus -> focuses|foci
|
716
|
-
foetus -> foetuses
|
717
|
-
folio -> folios
|
718
|
-
Foochowese -> Foochowese
|
719
|
-
foot -> feet
|
720
|
-
foot's -> feet's # POSSESSIVE FORM
|
721
|
-
foramen -> foramens|foramina
|
722
|
-
formula -> formulas|formulae
|
723
|
-
forum -> forums
|
724
|
-
fought -> fought
|
725
|
-
fox -> foxes
|
726
|
-
from him -> from them
|
727
|
-
from it -> from them # ACCUSATIVE
|
728
|
-
fungus -> funguses|fungi
|
729
|
-
Gabunese -> Gabunese
|
730
|
-
gallows -> gallows
|
731
|
-
ganglion -> ganglions|ganglia
|
732
|
-
gas -> gases
|
733
|
-
gateau -> gateaus|gateaux
|
734
|
-
gave -> gave
|
735
|
-
generalissimo -> generalissimos
|
736
|
-
Genevese -> Genevese
|
737
|
-
genie -> genies|genii
|
738
|
-
genius -> geniuses|genii
|
739
|
-
Genoese -> Genoese
|
740
|
-
genus -> genera
|
741
|
-
German -> Germans
|
742
|
-
ghetto -> ghettos
|
743
|
-
Gilbertese -> Gilbertese
|
744
|
-
glottis -> glottises
|
745
|
-
Goanese -> Goanese
|
746
|
-
goose -> geese
|
747
|
-
Governor General -> Governors General
|
748
|
-
goy -> goys|goyim
|
749
|
-
graffiti -> graffiti
|
750
|
-
graffito -> graffiti
|
751
|
-
guano -> guanos
|
752
|
-
guardsman -> guardsmen
|
753
|
-
Guianese -> Guianese
|
754
|
-
gumma -> gummas|gummata
|
755
|
-
gymnasium -> gymnasiums|gymnasia
|
756
|
-
had -> had
|
757
|
-
had thought -> had thought
|
758
|
-
Hainanese -> Hainanese
|
759
|
-
handkerchief -> handkerchiefs
|
760
|
-
Hararese -> Hararese
|
761
|
-
Harlemese -> Harlemese
|
762
|
-
harmonium -> harmoniums
|
763
|
-
has -> have
|
764
|
-
has become -> have become
|
765
|
-
has been -> have been
|
766
|
-
has-been -> has-beens
|
767
|
-
Havanese -> Havanese
|
768
|
-
have -> have
|
769
|
-
have conceded -> have conceded
|
770
|
-
he -> they
|
771
|
-
headquarters -> headquarters
|
772
|
-
Heavenese -> Heavenese
|
773
|
-
helix -> helices
|
774
|
-
hepatitis -> hepatitises
|
775
|
-
her -> them # PRONOUN
|
776
|
-
her -> their # POSSESSIVE ADJ
|
777
|
-
hero -> heroes
|
778
|
-
herpes -> herpes
|
779
|
-
hers -> theirs # POSSESSIVE NOUN
|
780
|
-
herself -> themselves
|
781
|
-
hiatus -> hiatuses|hiatus
|
782
|
-
highlight -> highlights
|
783
|
-
hijinks -> hijinks
|
784
|
-
him -> them
|
785
|
-
himself -> themselves
|
786
|
-
hippopotamus -> hippopotamuses|hippopotami
|
787
|
-
Hiroshiman -> Hiroshimans
|
788
|
-
his -> their # POSSESSIVE ADJ
|
789
|
-
his -> theirs # POSSESSIVE NOUN
|
790
|
-
honorarium -> honorariums|honoraria
|
791
|
-
hoof -> hoofs|hooves
|
792
|
-
Hoosierese -> Hoosierese
|
793
|
-
Hottentotese -> Hottentotese
|
794
|
-
house -> houses
|
795
|
-
housewife -> housewives
|
796
|
-
hubris -> hubrises
|
797
|
-
human -> humans
|
798
|
-
Hunanese -> Hunanese
|
799
|
-
hydra -> hydras|hydrae
|
800
|
-
hyperbaton -> hyperbata
|
801
|
-
hyperbola -> hyperbolas|hyperbolae
|
802
|
-
I -> we
|
803
|
-
ibis -> ibises
|
804
|
-
ignoramus -> ignoramuses
|
805
|
-
impetus -> impetuses|impetus
|
806
|
-
incubus -> incubuses|incubi
|
807
|
-
index -> indexes|indices
|
808
|
-
Indochinese -> Indochinese
|
809
|
-
inferno -> infernos
|
810
|
-
innings -> innings
|
811
|
-
Inspector General -> Inspectors General
|
812
|
-
interregnum -> interregnums|interregna
|
813
|
-
iris -> irises|irides
|
814
|
-
is -> are
|
815
|
-
is eaten -> are eaten
|
816
|
-
it -> they # NOMINATIVE
|
817
|
-
its -> their # POSSESSIVE FORM
|
818
|
-
itself -> themselves
|
819
|
-
jackanapes -> jackanapes
|
820
|
-
Japanese -> Japanese
|
821
|
-
Javanese -> Javanese
|
822
|
-
Jerry -> Jerrys
|
823
|
-
jerry -> jerries
|
824
|
-
jinx -> jinxes
|
825
|
-
jinxes -> jinx # VERB FORM
|
826
|
-
Johnsonese -> Johnsonese
|
827
|
-
Jones -> Joneses
|
828
|
-
jumbo -> jumbos
|
829
|
-
Kanarese -> Kanarese
|
830
|
-
Kiplingese -> Kiplingese
|
831
|
-
knife -> knives # NOUN FORM
|
832
|
-
knife -> knife # VERB FORM (1st/2nd pers.)
|
833
|
-
knifes -> knife # VERB FORM (3rd pers.)
|
834
|
-
Kongoese -> Kongoese
|
835
|
-
Kongolese -> Kongolese
|
836
|
-
lacuna -> lacunas|lacunae
|
837
|
-
lady in waiting -> ladies in waiting
|
838
|
-
Lapponese -> Lapponese
|
839
|
-
larynx -> larynxes|larynges
|
840
|
-
latex -> latexes|latices
|
841
|
-
leaf -> leaf # VERB FORM (1st/2nd pers.)
|
842
|
-
leaf -> leaves # NOUN FORM
|
843
|
-
leafs -> leaf # VERB FORM (3rd pers.)
|
844
|
-
Lebanese -> Lebanese
|
845
|
-
lemma -> lemmas|lemmata
|
846
|
-
lens -> lenses
|
847
|
-
Leonese -> Leonese
|
848
|
-
lick of the cat -> licks of the cat
|
849
|
-
Lieutenant General -> Lieutenant Generals
|
850
|
-
life -> lives
|
851
|
-
Liman -> Limans
|
852
|
-
lingo -> lingos
|
853
|
-
loaf -> loaves
|
854
|
-
locus -> loci
|
855
|
-
Londonese -> Londonese
|
856
|
-
Lorrainese -> Lorrainese
|
857
|
-
lothario -> lotharios
|
858
|
-
louse -> lice
|
859
|
-
Lucchese -> Lucchese
|
860
|
-
lumbago -> lumbagos
|
861
|
-
lumen -> lumens|lumina
|
862
|
-
lustrum -> lustrums|lustra
|
863
|
-
lyceum -> lyceums
|
864
|
-
lymphoma -> lymphomas|lymphomata
|
865
|
-
lynx -> lynxes
|
866
|
-
Lyonese -> Lyonese
|
867
|
-
M.I.A. -> M.I.A.s
|
868
|
-
Macanese -> Macanese
|
869
|
-
Macassarese -> Macassarese
|
870
|
-
mackerel -> mackerel
|
871
|
-
made -> made
|
872
|
-
Madurese -> Madurese
|
873
|
-
magma -> magmas|magmata
|
874
|
-
magneto -> magnetos
|
875
|
-
Major General -> Major Generals
|
876
|
-
Malabarese -> Malabarese
|
877
|
-
Maltese -> Maltese
|
878
|
-
man -> men
|
879
|
-
mandamus -> mandamuses
|
880
|
-
manifesto -> manifestos
|
881
|
-
mantis -> mantises
|
882
|
-
marquis -> marquises
|
883
|
-
Mary -> Marys
|
884
|
-
maximum -> maximums|maxima
|
885
|
-
measles -> measles
|
886
|
-
medico -> medicos
|
887
|
-
medium -> mediums|media
|
888
|
-
medium's -> mediums'|media's
|
889
|
-
medusa -> medusas|medusae
|
890
|
-
memorandum -> memorandums|memoranda
|
891
|
-
meniscus -> menisci
|
892
|
-
Messinese -> Messinese
|
893
|
-
metamorphosis -> metamorphoses
|
894
|
-
metropolis -> metropolises
|
895
|
-
mews -> mews
|
896
|
-
miasma -> miasmas|miasmata
|
897
|
-
Milanese -> Milanese
|
898
|
-
milieu -> milieus|milieux
|
899
|
-
millenium -> milleniums|millenia
|
900
|
-
minimum -> minimums|minima
|
901
|
-
minx -> minxes
|
902
|
-
miss -> miss # VERB FORM (1st/2nd pers.)
|
903
|
-
miss -> misses # NOUN FORM
|
904
|
-
misses -> miss # VERB FORM (3rd pers.)
|
905
|
-
mittamus -> mittamuses
|
906
|
-
Modenese -> Modenese
|
907
|
-
momentum -> momentums|momenta
|
908
|
-
money -> monies
|
909
|
-
mongoose -> mongooses
|
910
|
-
moose -> mooses|moose
|
911
|
-
mother-in-law -> mothers-in-law
|
912
|
-
mouse -> mice
|
913
|
-
mumps -> mumps
|
914
|
-
Muranese -> Muranese
|
915
|
-
murex -> murices
|
916
|
-
museum -> museums
|
917
|
-
mustachio -> mustachios
|
918
|
-
my -> our # POSSESSIVE FORM
|
919
|
-
myself -> ourselves
|
920
|
-
mythos -> mythoi
|
921
|
-
Nakayaman -> Nakayamans
|
922
|
-
Nankingese -> Nankingese
|
923
|
-
nasturtium -> nasturtiums
|
924
|
-
Navarrese -> Navarrese
|
925
|
-
nebula -> nebulas|nebulae
|
926
|
-
Nepalese -> Nepalese
|
927
|
-
neuritis -> neuritises
|
928
|
-
neurosis -> neuroses
|
929
|
-
news -> news
|
930
|
-
nexus -> nexus
|
931
|
-
Niasese -> Niasese
|
932
|
-
Nicobarese -> Nicobarese
|
933
|
-
nimbus -> nimbuses|nimbi
|
934
|
-
Nipponese -> Nipponese
|
935
|
-
no -> noes
|
936
|
-
nostrum -> nostrums
|
937
|
-
noumenon -> noumena
|
938
|
-
nova -> novas|novae
|
939
|
-
nucleolus -> nucleoluses|nucleoli
|
940
|
-
nucleus -> nuclei
|
941
|
-
oaf -> oafs
|
942
|
-
octavo -> octavos
|
943
|
-
octopus -> octopuses|octopodes
|
944
|
-
oedema -> oedemas|oedemata
|
945
|
-
Oklahoman -> Oklahomans
|
946
|
-
omnibus -> omnibuses
|
947
|
-
on it -> on them # ACCUSATIVE
|
948
|
-
onus -> onuses
|
949
|
-
opera -> operas
|
950
|
-
optimum -> optimums|optima
|
951
|
-
opus -> opuses|opera
|
952
|
-
organon -> organa
|
953
|
-
ought to be -> ought to be # VERB (UNLIKE bride to be)
|
954
|
-
ovum -> ova
|
955
|
-
ox -> oxen
|
956
|
-
ox's -> oxen's # POSSESSIVE FORM
|
957
|
-
oxymoron -> oxymorons|oxymora
|
958
|
-
Panaman -> Panamans
|
959
|
-
parabola -> parabolas|parabolae
|
960
|
-
Parmese -> Parmese
|
961
|
-
pathos -> pathoses
|
962
|
-
pegasus -> pegasuses
|
963
|
-
Pekingese -> Pekingese
|
964
|
-
pelvis -> pelvises
|
965
|
-
pendulum -> pendulums
|
966
|
-
penis -> penises|penes
|
967
|
-
penumbra -> penumbras|penumbrae
|
968
|
-
perihelion -> perihelia
|
969
|
-
persona -> personae
|
970
|
-
petroleum -> petroleums
|
971
|
-
phalanx -> phalanxes|phalanges
|
972
|
-
PhD -> PhDs
|
973
|
-
phenomenon -> phenomena
|
974
|
-
philtrum -> philtrums
|
975
|
-
photo -> photos
|
976
|
-
phylum -> phylums|phyla
|
977
|
-
piano -> pianos|piani
|
978
|
-
Piedmontese -> Piedmontese
|
979
|
-
pincer -> pincers
|
980
|
-
pincers -> pincers
|
981
|
-
Pistoiese -> Pistoiese
|
982
|
-
plateau -> plateaus|plateaux
|
983
|
-
play -> plays
|
984
|
-
plexus -> plexuses|plexus
|
985
|
-
pliers -> pliers
|
986
|
-
plies -> ply # VERB FORM
|
987
|
-
polis -> polises
|
988
|
-
Polonese -> Polonese
|
989
|
-
pontifex -> pontifexes|pontifices
|
990
|
-
portmanteau -> portmanteaus|portmanteaux
|
991
|
-
Portuguese -> Portuguese
|
992
|
-
potato -> potatoes
|
993
|
-
pox -> pox
|
994
|
-
pragma -> pragmas|pragmata
|
995
|
-
premium -> premiums
|
996
|
-
prima donna -> prima donnas|prime donne
|
997
|
-
pro -> pros
|
998
|
-
proceedings -> proceedings
|
999
|
-
prolegomenon -> prolegomena
|
1000
|
-
proof -> proofs
|
1001
|
-
proof of concept -> proofs of concept
|
1002
|
-
prosecutrix -> prosecutrixes|prosecutrices
|
1003
|
-
prospectus -> prospectuses|prospectus
|
1004
|
-
protozoan -> protozoans
|
1005
|
-
protozoon -> protozoa
|
1006
|
-
put -> put
|
1007
|
-
quantum -> quantums|quanta
|
1008
|
-
quartermaster general -> quartermasters general
|
1009
|
-
quarto -> quartos
|
1010
|
-
quorum -> quorums
|
1011
|
-
rabies -> rabies
|
1012
|
-
radius -> radiuses|radii
|
1013
|
-
radix -> radices
|
1014
|
-
rebus -> rebuses
|
1015
|
-
reindeer -> reindeer
|
1016
|
-
rhino -> rhinos
|
1017
|
-
rhinoceros -> rhinoceroses|rhinoceros
|
1018
|
-
Romagnese -> Romagnese
|
1019
|
-
Romanese -> Romanese
|
1020
|
-
romeo -> romeos
|
1021
|
-
roof -> roofs
|
1022
|
-
rostrum -> rostrums|rostra
|
1023
|
-
ruckus -> ruckuses
|
1024
|
-
salmon -> salmon
|
1025
|
-
Sangirese -> Sangirese
|
1026
|
-
sank -> sank
|
1027
|
-
Sarawakese -> Sarawakese
|
1028
|
-
sarcoma -> sarcomas|sarcomata
|
1029
|
-
sassafras -> sassafrases
|
1030
|
-
saw -> saws # NOUN FORM
|
1031
|
-
saw -> saw # VERB FORM (1st/2nd pers.)
|
1032
|
-
saws -> saw # VERB FORM (3rd pers.)
|
1033
|
-
scarf -> scarves
|
1034
|
-
schema -> schemas|schemata
|
1035
|
-
scissors -> scissors
|
1036
|
-
Scotsman -> Scotsmen
|
1037
|
-
sea-bass -> sea-bass
|
1038
|
-
self -> selves
|
1039
|
-
Selman -> Selmans
|
1040
|
-
Senegalese -> Senegalese
|
1041
|
-
seraph -> seraphs|seraphim
|
1042
|
-
series -> series
|
1043
|
-
shall eat -> shall eat
|
1044
|
-
Shavese -> Shavese
|
1045
|
-
Shawanese -> Shawanese
|
1046
|
-
she -> they
|
1047
|
-
sheaf -> sheaves
|
1048
|
-
shears -> shears
|
1049
|
-
sheep -> sheep
|
1050
|
-
shelf -> shelves
|
1051
|
-
should have -> should have
|
1052
|
-
Siamese -> Siamese
|
1053
|
-
Sienese -> Sienese
|
1054
|
-
Sikkimese -> Sikkimese
|
1055
|
-
silex -> silices
|
1056
|
-
simplex -> simplexes|simplices
|
1057
|
-
Singhalese -> Singhalese
|
1058
|
-
Sinhalese -> Sinhalese
|
1059
|
-
sinus -> sinuses|sinus
|
1060
|
-
size -> sizes
|
1061
|
-
sizes -> size #VERB FORM
|
1062
|
-
smallpox -> smallpox
|
1063
|
-
Smith -> Smiths
|
1064
|
-
Sogdianese -> Sogdianese
|
1065
|
-
soliloquy -> soliloquies
|
1066
|
-
solo -> solos|soli
|
1067
|
-
soma -> somas|somata
|
1068
|
-
son of a bitch -> sons of bitches
|
1069
|
-
Sonaman -> Sonamans
|
1070
|
-
soprano -> sopranos|soprani
|
1071
|
-
sought -> sought
|
1072
|
-
species -> species
|
1073
|
-
spectrum -> spectrums|spectra
|
1074
|
-
speculum -> speculums|specula
|
1075
|
-
spent -> spent
|
1076
|
-
spermatozoon -> spermatozoa
|
1077
|
-
sphinx -> sphinxes|sphinges
|
1078
|
-
stadium -> stadiums|stadia
|
1079
|
-
stamen -> stamens|stamina
|
1080
|
-
status -> statuses|status
|
1081
|
-
stereo -> stereos
|
1082
|
-
stigma -> stigmas|stigmata
|
1083
|
-
stimulus -> stimuli
|
1084
|
-
stoma -> stomas|stomata
|
1085
|
-
storey -> storeys
|
1086
|
-
story -> stories
|
1087
|
-
stratum -> strata
|
1088
|
-
strife -> strifes
|
1089
|
-
stylo -> stylos
|
1090
|
-
stylus -> styluses|styli
|
1091
|
-
succubus -> succubuses|succubi
|
1092
|
-
Sudanese -> Sudanese
|
1093
|
-
suffix -> suffixes
|
1094
|
-
Sundanese -> Sundanese
|
1095
|
-
superior -> superiors
|
1096
|
-
Surgeon-General -> Surgeons-General
|
1097
|
-
surplus -> surpluses
|
1098
|
-
Swahilese -> Swahilese
|
1099
|
-
swine -> swines|swine
|
1100
|
-
syringe -> syringes
|
1101
|
-
syrinx -> syrinxes|syringes
|
1102
|
-
tableau -> tableaus|tableaux
|
1103
|
-
Tacoman -> Tacomans
|
1104
|
-
tattoo -> tattoos
|
1105
|
-
tempo -> tempos|tempi
|
1106
|
-
Tenggerese -> Tenggerese
|
1107
|
-
testatrix -> testatrixes|testatrices
|
1108
|
-
testes -> testes
|
1109
|
-
testis -> testes
|
1110
|
-
that -> those
|
1111
|
-
their -> their # POSSESSIVE FORM (GENDER-INCLUSIVE)
|
1112
|
-
themself -> themselves # ugly but gaining currency
|
1113
|
-
they -> they # for indeterminate gender
|
1114
|
-
this -> these
|
1115
|
-
thought -> thought # VERB FORM
|
1116
|
-
thought -> thoughts # NOUN FORM
|
1117
|
-
Times -> Timeses
|
1118
|
-
Timorese -> Timorese
|
1119
|
-
Tirolese -> Tirolese
|
1120
|
-
to her -> to them
|
1121
|
-
to herself -> to themselves
|
1122
|
-
to him -> to them
|
1123
|
-
to himself -> to themselves
|
1124
|
-
to it -> to them
|
1125
|
-
to it -> to them # ACCUSATIVE
|
1126
|
-
to itself -> to themselves
|
1127
|
-
to me -> to us
|
1128
|
-
to myself -> to ourselves
|
1129
|
-
to them -> to them # for indeterminate gender
|
1130
|
-
to themself -> to themselves # ugly but gaining currency
|
1131
|
-
to you -> to you
|
1132
|
-
to yourself -> to yourselves
|
1133
|
-
Tocharese -> Tocharese
|
1134
|
-
tomato -> tomatoes
|
1135
|
-
Tonkinese -> Tonkinese
|
1136
|
-
tonsillitis -> tonsillitises
|
1137
|
-
tooth -> teeth
|
1138
|
-
Torinese -> Torinese
|
1139
|
-
torus -> toruses|tori
|
1140
|
-
trapezium -> trapeziums|trapezia
|
1141
|
-
trauma -> traumas|traumata
|
1142
|
-
travois -> travois
|
1143
|
-
trellis -> trellises
|
1144
|
-
tries -> try
|
1145
|
-
trilby -> trilbys
|
1146
|
-
trousers -> trousers
|
1147
|
-
trousseau -> trousseaus|trousseaux
|
1148
|
-
trout -> trout
|
1149
|
-
try -> tries
|
1150
|
-
tuna -> tuna
|
1151
|
-
turf -> turfs|turves
|
1152
|
-
Tyrolese -> Tyrolese
|
1153
|
-
ultimatum -> ultimatums|ultimata
|
1154
|
-
umbilicus -> umbilicuses|umbilici
|
1155
|
-
umbra -> umbras|umbrae
|
1156
|
-
uterus -> uteruses|uteri
|
1157
|
-
vacuum -> vacuums|vacua
|
1158
|
-
vellum -> vellums
|
1159
|
-
velum -> velums|vela
|
1160
|
-
Vermontese -> Vermontese
|
1161
|
-
Veronese -> Veronese
|
1162
|
-
vertebra -> vertebrae
|
1163
|
-
vertex -> vertexes|vertices
|
1164
|
-
Viennese -> Viennese
|
1165
|
-
Vietnamese -> Vietnamese
|
1166
|
-
virus -> viruses
|
1167
|
-
vixen -> vixens
|
1168
|
-
vortex -> vortexes|vortices
|
1169
|
-
walrus -> walruses
|
1170
|
-
was -> were
|
1171
|
-
was faced with -> were faced with
|
1172
|
-
was hoping -> were hoping
|
1173
|
-
Wenchowese -> Wenchowese
|
1174
|
-
were -> were
|
1175
|
-
were found -> were found
|
1176
|
-
wharf -> wharves
|
1177
|
-
whiting -> whiting
|
1178
|
-
Whitmanese -> Whitmanese
|
1179
|
-
wife -> wives
|
1180
|
-
wildebeest -> wildebeests|wildebeest
|
1181
|
-
will -> will # VERB FORM
|
1182
|
-
will -> wills # NOUN FORM
|
1183
|
-
will eat -> will eat # VERB FORM
|
1184
|
-
wills -> will # VERB FORM
|
1185
|
-
wish -> wishes
|
1186
|
-
with him -> with them
|
1187
|
-
with it -> with them # ACCUSATIVE
|
1188
|
-
wolf -> wolves
|
1189
|
-
woman -> women
|
1190
|
-
woman of substance -> women of substance
|
1191
|
-
woman's -> women's # POSSESSIVE FORM
|
1192
|
-
woodlouse -> woodlice
|
1193
|
-
Yakiman -> Yakimans
|
1194
|
-
Yengeese -> Yengeese
|
1195
|
-
Yokohaman -> Yokohamans
|
1196
|
-
you -> you
|
1197
|
-
your -> your # POSSESSIVE FORM
|
1198
|
-
yourself -> yourselves
|
1199
|
-
Yuman -> Yumans
|
1200
|
-
Yunnanese -> Yunnanese
|
1201
|
-
zoon -> zoa
|
1202
|
-
|
1203
|
-
an A.B.C
|
1204
|
-
an AI
|
1205
|
-
an AGE
|
1206
|
-
an agendum
|
1207
|
-
an aide-de-camp
|
1208
|
-
an albino
|
1209
|
-
a B.L.T. sandwich
|
1210
|
-
a BMW
|
1211
|
-
a BLANK
|
1212
|
-
a bacterium
|
1213
|
-
a Burmese restaurant
|
1214
|
-
a C.O.
|
1215
|
-
a CCD
|
1216
|
-
a COLON
|
1217
|
-
a cameo
|
1218
|
-
a CAPITAL
|
1219
|
-
a D.S.M.
|
1220
|
-
a DNR
|
1221
|
-
a DINNER
|
1222
|
-
a dynamo
|
1223
|
-
an E.K.G.
|
1224
|
-
an ECG
|
1225
|
-
an EGG
|
1226
|
-
an embryo
|
1227
|
-
an erratum
|
1228
|
-
a eucalyptus
|
1229
|
-
an Euler number
|
1230
|
-
a eulogy
|
1231
|
-
a euphemism
|
1232
|
-
a euphoria
|
1233
|
-
a ewe
|
1234
|
-
a ewer
|
1235
|
-
an extremum
|
1236
|
-
an eye
|
1237
|
-
an F.B.I. agent
|
1238
|
-
an FSM
|
1239
|
-
a FACT
|
1240
|
-
a FAQ
|
1241
|
-
an F.A.Q.
|
1242
|
-
a fish
|
1243
|
-
a G-string
|
1244
|
-
a GSM phone
|
1245
|
-
a GOD
|
1246
|
-
a genus
|
1247
|
-
a Governor General
|
1248
|
-
an H-Bomb
|
1249
|
-
an H.M.S Ark Royal
|
1250
|
-
an HSL colour space
|
1251
|
-
a HAL 9000
|
1252
|
-
an H.A.L. 9000
|
1253
|
-
a has-been
|
1254
|
-
a height
|
1255
|
-
an heir
|
1256
|
-
a honed blade
|
1257
|
-
an honest man
|
1258
|
-
a honeymoon
|
1259
|
-
an honorarium
|
1260
|
-
an honorary degree
|
1261
|
-
an honoree
|
1262
|
-
an honorific
|
1263
|
-
a Hough transform
|
1264
|
-
a hound
|
1265
|
-
an hour
|
1266
|
-
an hourglass
|
1267
|
-
a houri
|
1268
|
-
a house
|
1269
|
-
an I.O.U.
|
1270
|
-
an IQ
|
1271
|
-
an IDEA
|
1272
|
-
an inferno
|
1273
|
-
an Inspector General
|
1274
|
-
a jumbo
|
1275
|
-
a knife
|
1276
|
-
an L.E.D.
|
1277
|
-
a LED
|
1278
|
-
an LCD
|
1279
|
-
a lady in waiting
|
1280
|
-
a leaf
|
1281
|
-
an M.I.A.
|
1282
|
-
a MIASMA
|
1283
|
-
an MTV channel
|
1284
|
-
a Major General
|
1285
|
-
an N.C.O.
|
1286
|
-
an NCO
|
1287
|
-
a NATO country
|
1288
|
-
a note
|
1289
|
-
an O.K.
|
1290
|
-
an OK
|
1291
|
-
an OLE
|
1292
|
-
an octavo
|
1293
|
-
an octopus
|
1294
|
-
an okay
|
1295
|
-
a once-and-future-king
|
1296
|
-
an oncologist
|
1297
|
-
a one night stand
|
1298
|
-
an onerous task
|
1299
|
-
an opera
|
1300
|
-
an optimum
|
1301
|
-
an opus
|
1302
|
-
an ox
|
1303
|
-
a Ph.D.
|
1304
|
-
a PET
|
1305
|
-
a P.E.T. scan
|
1306
|
-
a plateau
|
1307
|
-
a quantum
|
1308
|
-
an R.S.V.P.
|
1309
|
-
an RSVP
|
1310
|
-
a REST
|
1311
|
-
a reindeer
|
1312
|
-
an S.O.S.
|
1313
|
-
a SUM
|
1314
|
-
an SST
|
1315
|
-
a salmon
|
1316
|
-
a T.N.T. bomb
|
1317
|
-
a TNT bomb
|
1318
|
-
a TENT
|
1319
|
-
a thought
|
1320
|
-
a tomato
|
1321
|
-
a U-boat
|
1322
|
-
a U.F.O.
|
1323
|
-
a UFO
|
1324
|
-
a ubiquity
|
1325
|
-
a unicorn
|
1326
|
-
an unidentified flying object
|
1327
|
-
a uniform
|
1328
|
-
a unimodal system
|
1329
|
-
an unimpressive record
|
1330
|
-
an uninformed opinion
|
1331
|
-
an uninvited guest
|
1332
|
-
a union
|
1333
|
-
a uniplex
|
1334
|
-
a uniprocessor
|
1335
|
-
a unique opportunity
|
1336
|
-
a unisex hairdresser
|
1337
|
-
a unison
|
1338
|
-
a unit
|
1339
|
-
a unitarian
|
1340
|
-
a united front
|
1341
|
-
a unity
|
1342
|
-
a univalent bond
|
1343
|
-
a univariate statistic
|
1344
|
-
a universe
|
1345
|
-
an unordered meal
|
1346
|
-
a uranium atom
|
1347
|
-
an urban myth
|
1348
|
-
an urbane miss
|
1349
|
-
an urchin
|
1350
|
-
a urea detector
|
1351
|
-
a urethane monomer
|
1352
|
-
an urge
|
1353
|
-
an urgency
|
1354
|
-
a urinal
|
1355
|
-
an urn
|
1356
|
-
a usage
|
1357
|
-
a use
|
1358
|
-
an usher
|
1359
|
-
a usual suspect
|
1360
|
-
a usurer
|
1361
|
-
a usurper
|
1362
|
-
a utensil
|
1363
|
-
a utility
|
1364
|
-
an utmost urgency
|
1365
|
-
a utopia
|
1366
|
-
an utterance
|
1367
|
-
a V.I.P.
|
1368
|
-
a VIPER
|
1369
|
-
a viper
|
1370
|
-
an X-ray
|
1371
|
-
an X.O.
|
1372
|
-
a XYLAPHONE
|
1373
|
-
an XY chromosome
|
1374
|
-
a xenophobe
|
1375
|
-
a Y-shaped pipe
|
1376
|
-
a Y.Z. plane
|
1377
|
-
a YMCA
|
1378
|
-
an YBLENT eye
|
1379
|
-
an yblent eye
|
1380
|
-
an yclad body
|
1381
|
-
a yellowing
|
1382
|
-
a yield
|
1383
|
-
a youth
|
1384
|
-
a youth
|
1385
|
-
an ypsiliform junction
|
1386
|
-
an yttrium atom
|
1387
|
-
a zoo
|
1388
|
-
|
1389
|
-
__END_DATA__
|