rwdeliza 0.03

Sign up to get free protection for your applications and to get access to all the features.
Files changed (222) hide show
  1. data/ElizaData/database/db.1 +7015 -0
  2. data/ElizaData/database/db.10 +7001 -0
  3. data/ElizaData/database/db.11 +7001 -0
  4. data/ElizaData/database/db.12 +7003 -0
  5. data/ElizaData/database/db.13 +7003 -0
  6. data/ElizaData/database/db.14 +7008 -0
  7. data/ElizaData/database/db.15 +7001 -0
  8. data/ElizaData/database/db.16 +7001 -0
  9. data/ElizaData/database/db.17 +7001 -0
  10. data/ElizaData/database/db.18 +7001 -0
  11. data/ElizaData/database/db.19 +7001 -0
  12. data/ElizaData/database/db.2 +7001 -0
  13. data/ElizaData/database/db.20 +5467 -0
  14. data/ElizaData/database/db.3 +7001 -0
  15. data/ElizaData/database/db.4 +7001 -0
  16. data/ElizaData/database/db.5 +7001 -0
  17. data/ElizaData/database/db.6 +7001 -0
  18. data/ElizaData/database/db.7 +7001 -0
  19. data/ElizaData/database/db.8 +7001 -0
  20. data/ElizaData/database/db.9 +7001 -0
  21. data/ElizaData/responses/hello.res +1 -0
  22. data/ElizaData/responses/i_agree.res +1 -0
  23. data/ElizaData/responses/i_am_listening_to_you.res +1 -0
  24. data/ElizaData/responses/please_explain.res +1 -0
  25. data/ElizaData/responses/thank_you.res +1 -0
  26. data/ElizaData/tiny.dict +211 -0
  27. data/ElizaData/words/adjectives1.words +906 -0
  28. data/ElizaData/words/adjectives2w.words +1 -0
  29. data/ElizaData/words/noun0.words +15 -0
  30. data/ElizaData/words/noun1.words +1391 -0
  31. data/ElizaData/words/noun2.words +1924 -0
  32. data/ElizaData/words/noun4.words +330 -0
  33. data/ElizaData/words/pronoun1.words +6 -0
  34. data/ElizaData/words/verb4.words +350 -0
  35. data/ElizaData/words/verb42.words +391 -0
  36. data/ElizaData/words/verb42w.words +1 -0
  37. data/ElizaData/words/verb43.words +402 -0
  38. data/ElizaData/words/verb43w.words +1 -0
  39. data/ElizaData/words/verb45.words +452 -0
  40. data/ElizaData/words/verb4w.words +1 -0
  41. data/ElizaData/words/verb5.words +13 -0
  42. data/ElizaData/words/verb61.words +35 -0
  43. data/ElizaData/words/verb62.words +41 -0
  44. data/ElizaData/words/verb83.words +17 -0
  45. data/Readme.txt +462 -0
  46. data/bin/rwdeliza +19 -0
  47. data/code/01rwdcore/01rwdcore.rb +29 -0
  48. data/code/01rwdcore/02helptexthashbegin.rb +4 -0
  49. data/code/01rwdcore/03helptexthash.rb +23 -0
  50. data/code/01rwdcore/04helptextend.rb +6 -0
  51. data/code/01rwdcore/jumplinkcommand.rb +26 -0
  52. data/code/01rwdcore/openhelpwindow.rb +31 -0
  53. data/code/01rwdcore/returntomain.rb +10 -0
  54. data/code/01rwdcore/rundocuments.rb +10 -0
  55. data/code/01rwdcore/runeditconfiguration.rb +10 -0
  56. data/code/01rwdcore/runhelpabout.rb +10 -0
  57. data/code/01rwdcore/runopentinkerdocument.rb +7 -0
  58. data/code/01rwdcore/rwdtinkerversion.rb +22 -0
  59. data/code/01rwdcore/rwdwindowreturn.rb +9 -0
  60. data/code/01rwdcore/selectiontab.rb +9 -0
  61. data/code/01rwdcore/setuphelpaboutoptions.rb +13 -0
  62. data/code/01rwdcore/setuptinkerdocuments.rb +6 -0
  63. data/code/01rwdcore/test_cases.rb +109 -0
  64. data/code/01rwdcore/test_harness.rb +13 -0
  65. data/code/01rwdcore/uploadreturns.rb +62 -0
  66. data/code/dd0viewphoto/dd0viewphoto.rb +3 -0
  67. data/code/superant.com.rwdeliza/0uninstallapplet.rb +10 -0
  68. data/code/superant.com.rwdeliza/eliza01.rb +45 -0
  69. data/code/superant.com.rwdeliza/helptexthashrwdeliza.rb +39 -0
  70. data/code/superant.com.rwdeliza/openhelpwindowrwdeliza.rb +23 -0
  71. data/code/superant.com.rwdeliza/runrwdshellwindow.rb +12 -0
  72. data/code/superant.com.rwdeliza/rwdtinkerversion.rb +10 -0
  73. data/code/superant.com.rwdeliza/tagsentence.rb +39 -0
  74. data/code/superant.com.rwdtinkerbackwindow/diagnostictab.rb +19 -0
  75. data/code/superant.com.rwdtinkerbackwindow/helptexthashtinkerwin2.rb +61 -0
  76. data/code/superant.com.rwdtinkerbackwindow/initiateapplets.rb +240 -0
  77. data/code/superant.com.rwdtinkerbackwindow/installgemapplet.rb +34 -0
  78. data/code/superant.com.rwdtinkerbackwindow/installremotegem.rb +20 -0
  79. data/code/superant.com.rwdtinkerbackwindow/listgemdirs.rb +12 -0
  80. data/code/superant.com.rwdtinkerbackwindow/listgemzips.rb +53 -0
  81. data/code/superant.com.rwdtinkerbackwindow/listinstalledfiles.rb +12 -0
  82. data/code/superant.com.rwdtinkerbackwindow/listzips.rb +27 -0
  83. data/code/superant.com.rwdtinkerbackwindow/loadconfigurationrecord.rb +22 -0
  84. data/code/superant.com.rwdtinkerbackwindow/loadconfigurationvariables.rb +14 -0
  85. data/code/superant.com.rwdtinkerbackwindow/network.rb +87 -0
  86. data/code/superant.com.rwdtinkerbackwindow/openappletname.rb +19 -0
  87. data/code/superant.com.rwdtinkerbackwindow/openhelpwindowtinkerwin2.rb +38 -0
  88. data/code/superant.com.rwdtinkerbackwindow/remotegemlist.rb +24 -0
  89. data/code/superant.com.rwdtinkerbackwindow/removeapplet.rb +46 -0
  90. data/code/superant.com.rwdtinkerbackwindow/removeappletvariables.rb +52 -0
  91. data/code/superant.com.rwdtinkerbackwindow/runremoteinstall.rb +11 -0
  92. data/code/superant.com.rwdtinkerbackwindow/runrwdtinkerbackwindow.rb +15 -0
  93. data/code/superant.com.rwdtinkerbackwindow/rwdtinkerwin2version.rb +13 -0
  94. data/code/superant.com.rwdtinkerbackwindow/saveconfigurationrecord.rb +19 -0
  95. data/code/superant.com.rwdtinkerbackwindow/viewappletcontents.rb +22 -0
  96. data/code/superant.com.rwdtinkerbackwindow/viewgemappletcontents.rb +24 -0
  97. data/code/superant.com.words/dictlookup.rb +20 -0
  98. data/code/superant.com.words/runfortunewindow.rb +14 -0
  99. data/code/superant.com.words/runrwdwordsbackwindow.rb +10 -0
  100. data/code/superant.com.words/runrwdwordsversion.rb +14 -0
  101. data/code/superant.com.words/rwdtinkerversion.rb +10 -0
  102. data/code/zz0applicationend/zz0end.rb +4 -0
  103. data/configuration/language.dist +8 -0
  104. data/configuration/rwdapplicationidentity.dist +3 -0
  105. data/configuration/rwdtinker.dist +18 -0
  106. data/configuration/rwdweliza-0.03.dist +31 -0
  107. data/configuration/tinkerwin2variables.dist +17 -0
  108. data/gui/00coreguibegin/applicationguitop.rwd +4 -0
  109. data/gui/frontwindow0/cc0openphoto.rwd +22 -0
  110. data/gui/frontwindowselections/00selectiontabbegin.rwd +11 -0
  111. data/gui/frontwindowselections/jumplinkcommands.rwd +15 -0
  112. data/gui/frontwindowselections/wwselectionend.rwd +3 -0
  113. data/gui/frontwindowtdocuments/00documentbegin.rwd +6 -0
  114. data/gui/frontwindowtdocuments/tinkerdocuments.rwd +14 -0
  115. data/gui/frontwindowtdocuments/zzdocumentend.rwd +8 -0
  116. data/gui/helpaboutbegin/zzzrwdlasttab.rwd +6 -0
  117. data/gui/helpaboutbegin/zzzzhelpscreenstart.rwd +3 -0
  118. data/gui/helpaboutbegin/zzzzzzhelpabouttab.rwd +15 -0
  119. data/gui/helpaboutzend/helpscreenend.rwd +3 -0
  120. data/gui/helpaboutzend/zhelpscreenstart2.rwd +3 -0
  121. data/gui/helpaboutzend/zzzzhelpabout2.rwd +15 -0
  122. data/gui/helpaboutzend/zzzzhelpscreen2end.rwd +3 -0
  123. data/gui/tinkerbackwindows/superant.com.refreshwindow/fortunerefreshwindowtwo.rwd +9 -0
  124. data/gui/tinkerbackwindows/superant.com.rwdeliza/1appname.rwd +5 -0
  125. data/gui/tinkerbackwindows/superant.com.rwdeliza/1eliza.rwd +21 -0
  126. data/gui/tinkerbackwindows/superant.com.rwdeliza/4sentance.rwd +21 -0
  127. data/gui/tinkerbackwindows/superant.com.rwdeliza/98jumplinkcommands.rwd +17 -0
  128. data/gui/tinkerbackwindows/superant.com.rwdeliza/zbackend.rwd +6 -0
  129. data/gui/tinkerbackwindows/superant.com.rwdschedulebackwindow/1appname.rwd +5 -0
  130. data/gui/tinkerbackwindows/superant.com.rwdschedulebackwindow/20downloadftp.rwd +45 -0
  131. data/gui/tinkerbackwindows/superant.com.rwdschedulebackwindow/67viewconfiguration.rwd +29 -0
  132. data/gui/tinkerbackwindows/superant.com.rwdschedulebackwindow/70rwddiagnostics.rwd +16 -0
  133. data/gui/tinkerbackwindows/superant.com.rwdschedulebackwindow/m01menubegin.rwd +18 -0
  134. data/gui/tinkerbackwindows/superant.com.rwdschedulebackwindow/zvbackend.rwd +6 -0
  135. data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/1appname.rwd +5 -0
  136. data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/40rwdlistzips.rwd +41 -0
  137. data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/45installremotezip.rwd +44 -0
  138. data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/50rwdlistapplets.rwd +44 -0
  139. data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/60editconfiguration.rwd +30 -0
  140. data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/70rwddiagnostics.rwd +29 -0
  141. data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/81jumplinkcommands.rwd +17 -0
  142. data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/9backend.rwd +6 -0
  143. data/gui/tinkerbackwindows/superant.com.tinkerhelpwindow/1appname.rwd +31 -0
  144. data/gui/tinkerbackwindows/superant.com.tinkerhelpwindow/9end.rwd +4 -0
  145. data/gui/tinkerbackwindows/superant.com.versionwindow/1appname.rwd +19 -0
  146. data/gui/tinkerbackwindows/superant.com.versionwindow/helpaboutwindow.rwd +17 -0
  147. data/gui/tinkerbackwindows/superant.com.words/1appname.rwd +4 -0
  148. data/gui/tinkerbackwindows/superant.com.words/1dictionary.rwd +19 -0
  149. data/gui/tinkerbackwindows/superant.com.words/3rwdfortune.rwd +14 -0
  150. data/gui/tinkerbackwindows/superant.com.words/77jumplinkcommands.rwd +17 -0
  151. data/gui/tinkerbackwindows/superant.com.words/z9end.rwd +6 -0
  152. data/gui/zzcoreguiend/yy9rwdend.rwd +4 -0
  153. data/init.rb +277 -0
  154. data/installed/rwdweliza-0.03.inf +24 -0
  155. data/installed/temp.rb +1 -0
  156. data/lang/en/rwdcore/languagefile.rb +58 -0
  157. data/lang/es/rwdcore/languagefile-es.rb +62 -0
  158. data/lang/fr/rwdcore/languagefile.rb +64 -0
  159. data/lang/jp/rwdcore/languagefile.rb +72 -0
  160. data/lang/nl/rwdcore/languagefile.rb +75 -0
  161. data/lib/dict.rb +438 -0
  162. data/lib/druida.rb +499 -0
  163. data/lib/hashslice.rb +71 -0
  164. data/lib/linguistics.rb +360 -0
  165. data/lib/linguistics/en.rb +1601 -0
  166. data/lib/linguistics/en/infinitive.rb +1148 -0
  167. data/lib/linguistics/en/linkparser.rb +142 -0
  168. data/lib/linguistics/en/wordnet.rb +253 -0
  169. data/lib/linguistics/iso639.rb +456 -0
  170. data/lib/linkparser.rb +461 -0
  171. data/lib/linkparser/connection.rb +81 -0
  172. data/lib/linkparser/connector.rb +201 -0
  173. data/lib/linkparser/definition.rb +225 -0
  174. data/lib/linkparser/dictionary.rb +208 -0
  175. data/lib/linkparser/linkage.rb +185 -0
  176. data/lib/linkparser/log.rb +39 -0
  177. data/lib/linkparser/sentence.rb +79 -0
  178. data/lib/linkparser/utils.rb +540 -0
  179. data/lib/linkparser/word.rb +92 -0
  180. data/lib/rconftool.rb +380 -0
  181. data/lib/rwd/browser.rb +123 -0
  182. data/lib/rwd/ftools.rb +174 -0
  183. data/lib/rwd/mime.rb +328 -0
  184. data/lib/rwd/net.rb +866 -0
  185. data/lib/rwd/ruby.rb +889 -0
  186. data/lib/rwd/rwd.rb +1942 -0
  187. data/lib/rwd/sgml.rb +236 -0
  188. data/lib/rwd/thread.rb +63 -0
  189. data/lib/rwd/tree.rb +371 -0
  190. data/lib/rwd/xml.rb +101 -0
  191. data/lib/zip/ioextras.rb +114 -0
  192. data/lib/zip/stdrubyext.rb +111 -0
  193. data/lib/zip/tempfile_bugfixed.rb +195 -0
  194. data/lib/zip/zip.rb +1378 -0
  195. data/lib/zip/zipfilesystem.rb +558 -0
  196. data/lib/zip/ziprequire.rb +61 -0
  197. data/rwd_files/HowTo_Eliza.txt +195 -0
  198. data/rwd_files/HowTo_Tinker.txt +471 -0
  199. data/rwd_files/HowTo_TinkerWin2.txt +202 -0
  200. data/rwd_files/Readme.txt +57 -0
  201. data/rwd_files/RubyWebDialogs.html +6 -0
  202. data/rwd_files/favicon.ico +0 -0
  203. data/rwd_files/rdoc-style.css +175 -0
  204. data/rwd_files/rwdapplications.html +54 -0
  205. data/rwd_files/tinker.png +0 -0
  206. data/rwdconfig.dist +21 -0
  207. data/rwdeliza.rb +1 -0
  208. data/tests/RubyGauge.rb +179 -0
  209. data/tests/checkdepends.sh +4 -0
  210. data/tests/cleancnf.sh +6 -0
  211. data/tests/makedist-rwdweliza.rb +56 -0
  212. data/tests/makedist.rb +66 -0
  213. data/tests/rdep.rb +354 -0
  214. data/tests/totranslate.lang +93 -0
  215. data/zips/rwdwaddresses-1.05.zip +0 -0
  216. data/zips/rwdwcalc-0.61.zip +0 -0
  217. data/zips/rwdwgutenberg-0.09.zip +0 -0
  218. data/zips/rwdwschedule-1.04.zip +0 -0
  219. data/zips/rwdwshell-1.04.zip +0 -0
  220. data/zips/temp.rb +1 -0
  221. data/zips/wrubyslippers-1.06.zip +0 -0
  222. metadata +282 -0
@@ -0,0 +1,1148 @@
1
+ #!/usr/bin/ruby
2
+ #
3
+ # This file contains functions for deriving the infinitive forms of conjugated
4
+ # English words. Requiring this file adds functions and constants to the
5
+ # Linguistics::EN module.
6
+ #
7
+ # == Authors
8
+ #
9
+ # * Michael Granger <ged@FaerieMUD.org>
10
+ #
11
+ # == Copyright
12
+ #
13
+ # Copyright (c) 2003 The FaerieMUD Consortium. All rights reserved.
14
+ #
15
+ # This module is free software. You may use, modify, and/or redistribute this
16
+ # software under the terms of the Perl Artistic License. (See
17
+ # http://language.perl.com/misc/Artistic.html)
18
+ #
19
+ # This code was ported from the excellent 'Lingua::EN::Infinitive' Perl module
20
+ # by Ron Savage, which is distributed under the following license:
21
+ #
22
+ # Australian copyright (c) 1999-2002 Ron Savage.
23
+ #
24
+ # All Programs of mine are 'OSI Certified Open Source Software';
25
+ # you can redistribute them and/or modify them under the terms of
26
+ # The Artistic License, a copy of which is available at:
27
+ # http://www.opensource.org/licenses/index.html
28
+ #
29
+ # # == Version
30
+ #
31
+ # $Id: infinitive.rb,v 1.2 2003/09/14 10:35:32 deveiant Exp $
32
+ #
33
+
34
+ module Linguistics
35
+ module EN
36
+
37
+ # Irregular words => infinitive forms
38
+ IrregularInfinitives = {
39
+ 'abided' => 'abide',
40
+ 'abode' => 'abide',
41
+ 'am' => 'be',
42
+ 'are' => 'be',
43
+ 'arisen' => 'arise',
44
+ 'arose' => 'arise',
45
+ 'ate' => 'eat',
46
+ 'awaked' => 'awake',
47
+ 'awoke' => 'awake',
48
+ 'bade' => 'bid',
49
+ 'beaten' => 'beat',
50
+ 'became' => 'become',
51
+ 'been' => 'be',
52
+ 'befallen' => 'befall',
53
+ 'befell' => 'befall',
54
+ 'began' => 'begin',
55
+ 'begat' => 'beget',
56
+ 'begot' => 'beget',
57
+ 'begotten' => 'beget',
58
+ 'begun' => 'begin',
59
+ 'beheld' => 'behold',
60
+ 'bent' => 'bend',
61
+ 'bereaved' => 'bereave',
62
+ 'bereft' => 'bereave',
63
+ 'beseeched' => 'beseech',
64
+ 'besought' => 'beseech',
65
+ 'bespoke' => 'bespeak',
66
+ 'bespoken' => 'bespeak',
67
+ 'bestrewed' => 'bestrew',
68
+ 'bestrewn' => 'bestrew',
69
+ 'bestrid' => 'bestride',
70
+ 'bestridden' => 'bestride',
71
+ 'bestrode' => 'bestride',
72
+ 'betaken' => 'betake',
73
+ 'bethought' => 'bethink',
74
+ 'betook' => 'betake',
75
+ 'betted' => 'bet',
76
+ 'bidden' => 'bid',
77
+ 'bided' => 'bide',
78
+ 'bit' => 'bite',
79
+ 'bitten' => 'bite',
80
+ 'bled' => 'bleed',
81
+ 'blended' => 'blend',
82
+ 'blent' => 'blend',
83
+ 'blessed' => 'bless',
84
+ 'blest' => 'bless',
85
+ 'blew' => 'blow',
86
+ 'blown' => 'blow',
87
+ 'bode' => 'bide',
88
+ 'bore' => 'bear',
89
+ 'born' => 'bear',
90
+ 'borne' => 'bear',
91
+ 'bought' => 'buy',
92
+ 'bound' => 'bind',
93
+ 'bred' => 'breed',
94
+ 'broadcasted' => 'broadcast',
95
+ 'broke' => 'break',
96
+ 'broken' => 'break',
97
+ 'brought' => 'bring',
98
+ 'browbeaten' => 'browbeat',
99
+ 'built' => 'build',
100
+ 'burned' => 'burn',
101
+ 'burnt' => 'burn',
102
+ 'came' => 'come',
103
+ 'caught' => 'catch',
104
+ 'chid' => 'chide',
105
+ 'chidden' => 'chide',
106
+ 'chided' => 'chide',
107
+ 'chose' => 'choose',
108
+ 'chosen' => 'choose',
109
+ 'clad' => 'clothe',
110
+ 'clave' => 'cleave',
111
+ 'cleaved' => 'cleave',
112
+ 'cleft' => 'cleave',
113
+ 'clothed' => 'clothe',
114
+ 'clove' => 'cleave',
115
+ 'cloven' => 'cleave',
116
+ 'clung' => 'cling',
117
+ 'costed' => 'cost',
118
+ 'could' => 'can',
119
+ 'crept' => 'creep',
120
+ 'crew' => 'crow',
121
+ 'crowed' => 'crow',
122
+ 'dealt' => 'deal',
123
+ 'did' => 'do',
124
+ 'done' => 'do',
125
+ 'dove' => 'dive',
126
+ 'drank' => 'drink',
127
+ 'drawn' => 'draw',
128
+ 'dreamed' => 'dream',
129
+ 'dreamt' => 'dream',
130
+ 'drew' => 'draw',
131
+ 'driven' => 'drive',
132
+ 'drove' => 'drive',
133
+ 'drunk' => 'drink',
134
+ 'dug' => 'dig',
135
+ 'dwelled' => 'dwell',
136
+ 'dwelt' => 'dwell',
137
+ 'eaten' => 'eat',
138
+ 'fallen' => 'fall',
139
+ 'fed' => 'feed',
140
+ 'fell' => 'fall',
141
+ 'felt' => 'feel',
142
+ 'fled' => 'flee',
143
+ 'flew' => 'fly',
144
+ 'flown' => 'fly',
145
+ 'flung' => 'fling',
146
+ 'forbad' => 'forbid',
147
+ 'forbade' => 'forbid',
148
+ 'forbidden' => 'forbid',
149
+ 'forbore' => 'forbear',
150
+ 'forborne' => 'forbear',
151
+ 'fordid' => 'fordo',
152
+ 'fordone' => 'fordo',
153
+ 'forecasted' => 'forecast',
154
+ 'foregone' => 'forego',
155
+ 'foreknew' => 'foreknow',
156
+ 'foreknown' => 'foreknow',
157
+ 'foreran' => 'forerun',
158
+ 'foresaw' => 'foresee',
159
+ 'foreshowed' => 'foreshow',
160
+ 'foreshown' => 'foreshow',
161
+ 'foretold' => 'foretell',
162
+ 'forewent' => 'forego',
163
+ 'forgave' => 'forgive',
164
+ 'forgiven' => 'forgive',
165
+ 'forgot' => 'forget',
166
+ 'forgotten' => 'forget',
167
+ 'forsaken' => 'forsake',
168
+ 'forseen' => 'foresee',
169
+ 'forsook' => 'forsake',
170
+ 'forswore' => 'forswear',
171
+ 'forsworn' => 'forswear',
172
+ 'fought' => 'fight',
173
+ 'found' => 'find',
174
+ 'froze' => 'freeze',
175
+ 'frozen' => 'freeze',
176
+ 'gainsaid' => 'gainsay',
177
+ 'gave' => 'give',
178
+ 'gilded' => 'gild',
179
+ 'gilt' => 'gild',
180
+ 'girded' => 'gird',
181
+ 'girt' => 'gird',
182
+ 'given' => 'give',
183
+ 'gone' => 'go',
184
+ 'got' => 'get',
185
+ 'gotten' => 'get',
186
+ 'graved' => 'grave',
187
+ 'graven' => 'grave',
188
+ 'grew' => 'grow',
189
+ 'ground' => 'grind',
190
+ 'grown' => 'grow',
191
+ 'had' => 'have',
192
+ 'hamstringed' => 'hamstring',
193
+ 'hamstrung' => 'hamstring',
194
+ 'hanged' => 'hang',
195
+ 'heard' => 'hear',
196
+ 'heaved' => 'heave',
197
+ 'held' => 'hold',
198
+ 'hewed' => 'hew',
199
+ 'hewn' => 'hew',
200
+ 'hid' => 'hide',
201
+ 'hidden' => 'hide',
202
+ 'hove' => 'heave',
203
+ 'hung' => 'hang',
204
+ 'inlaid' => 'inlay',
205
+ 'is' => 'be',
206
+ 'kept' => 'keep',
207
+ 'kneeled' => 'kneel',
208
+ 'knelt' => 'kneel',
209
+ 'knew' => 'know',
210
+ 'knitted' => 'knit',
211
+ 'known' => 'know',
212
+ 'laded' => 'lade',
213
+ 'laden' => 'lade',
214
+ 'laid' => 'lay',
215
+ 'lain' => 'lie',
216
+ 'lay' => 'lie',
217
+ 'leaned' => 'lean',
218
+ 'leant' => 'lean',
219
+ 'leaped' => 'leap',
220
+ 'leapt' => 'leap',
221
+ 'learned' => 'learn',
222
+ 'learnt' => 'learn',
223
+ 'led' => 'lead',
224
+ 'left' => 'leave',
225
+ 'lent' => 'lend',
226
+ 'lighted' => 'light',
227
+ 'lit' => 'light',
228
+ 'lost' => 'lose',
229
+ 'made' => 'make',
230
+ 'meant' => 'mean',
231
+ 'melted' => 'melt',
232
+ 'met' => 'meet',
233
+ 'might' => 'may',
234
+ 'misdealt' => 'misdeal',
235
+ 'misgave' => 'misgive',
236
+ 'misgiven' => 'misgive',
237
+ 'mislaid' => 'mislay',
238
+ 'misled' => 'mislead',
239
+ 'mistaken' => 'mistake',
240
+ 'mistook' => 'mistake',
241
+ 'misunderstood' => 'misunderstand',
242
+ 'molten' => 'melt',
243
+ 'mowed' => 'mow',
244
+ 'mown' => 'mow',
245
+ 'outate' => 'outeat',
246
+ 'outbade' => 'outbid',
247
+ 'outbidden' => 'outbid',
248
+ 'outbred' => 'outbreed',
249
+ 'outdid' => 'outdo',
250
+ 'outdone' => 'outdo',
251
+ 'outeaten' => 'outeat',
252
+ 'outfought' => 'outfight',
253
+ 'outgone' => 'outgo',
254
+ 'outgrew' => 'outgrow',
255
+ 'outgrown' => 'outgrow',
256
+ 'outlaid' => 'outlay',
257
+ 'outran' => 'outrun',
258
+ 'outridden' => 'outride',
259
+ 'outrode' => 'outride',
260
+ 'outsat' => 'outsit',
261
+ 'outshone' => 'outshine',
262
+ 'outshot' => 'outshoot',
263
+ 'outsold' => 'outsell',
264
+ 'outspent' => 'outspend',
265
+ 'outthrew' => 'outthrow',
266
+ 'outthrown' => 'outthrow',
267
+ 'outwent' => 'outgo',
268
+ 'outwore' => 'outwear',
269
+ 'outworn' => 'outwear',
270
+ 'overate' => 'overeat',
271
+ 'overbade' => 'overbid',
272
+ 'overbidden' => 'overbid',
273
+ 'overblew' => 'overblow',
274
+ 'overblown' => 'overblow',
275
+ 'overbore' => 'overbear',
276
+ 'overborn' => 'overbear',
277
+ 'overborne' => 'overbear',
278
+ 'overbought' => 'overbuy',
279
+ 'overbuilt' => 'overbuild',
280
+ 'overcame' => 'overcome',
281
+ 'overdid' => 'overdo',
282
+ 'overdone' => 'overdo',
283
+ 'overdrawn' => 'overdraw',
284
+ 'overdrew' => 'overdraw',
285
+ 'overdriven' => 'overdrive',
286
+ 'overdrove' => 'overdrive',
287
+ 'overeaten' => 'overeat',
288
+ 'overfed' => 'overfeed',
289
+ 'overflew' => 'overfly',
290
+ 'overflown' => 'overfly',
291
+ 'overgrew' => 'overgrow',
292
+ 'overgrown' => 'overgrow',
293
+ 'overhanged' => 'overhang',
294
+ 'overheard' => 'overhear',
295
+ 'overhung' => 'overhang',
296
+ 'overladed' => 'overlade',
297
+ 'overladen' => 'overlade',
298
+ 'overlaid' => 'overlay',
299
+ 'overlain' => 'overlie',
300
+ 'overlay' => 'overlie',
301
+ 'overleaped' => 'overleap',
302
+ 'overleapt' => 'overleap',
303
+ 'overpaid' => 'overpay',
304
+ 'overran' => 'overrun',
305
+ 'overridden' => 'override',
306
+ 'overrode' => 'override',
307
+ 'oversaw' => 'oversee',
308
+ 'overseen' => 'oversee',
309
+ 'oversewed' => 'oversew',
310
+ 'oversewn' => 'oversew',
311
+ 'overshot' => 'overshoot',
312
+ 'overslept' => 'oversleep',
313
+ 'overspent' => 'overspend',
314
+ 'overtaken' => 'overtake',
315
+ 'overthrew' => 'overthrow',
316
+ 'overthrown' => 'overthrow',
317
+ 'overtook' => 'overtake',
318
+ 'overwinded' => 'overwind',
319
+ 'overwound' => 'overwind',
320
+ 'overwritten' => 'overwrite',
321
+ 'overwrote' => 'overwrite',
322
+ 'paid' => 'pay',
323
+ 'partaken' => 'partake',
324
+ 'partook' => 'partake',
325
+ 'prechose' => 'prechoose',
326
+ 'prechosen' => 'prechoose',
327
+ 'proved' => 'prove',
328
+ 'proven' => 'prove',
329
+ 'quitted' => 'quit',
330
+ 'ran' => 'run',
331
+ 'rang' => 'ring',
332
+ 'reaved' => 'reave',
333
+ 'rebuilt' => 'rebuild',
334
+ 'reeved' => 'reeve',
335
+ 'reft' => 'reave',
336
+ 'relaid' => 'relay',
337
+ 'rent' => 'rend',
338
+ 'repaid' => 'repay',
339
+ 'retold' => 'retell',
340
+ 'ridded' => 'rid',
341
+ 'ridden' => 'ride',
342
+ 'risen' => 'rise',
343
+ 'rived' => 'rive',
344
+ 'riven' => 'rive',
345
+ 'rode' => 'ride',
346
+ 'rose' => 'rise',
347
+ 'rove' => 'reeve',
348
+ 'rung' => 'ring',
349
+ 'said' => 'say',
350
+ 'sang' => 'sing',
351
+ 'sank' => 'sink',
352
+ 'sat' => 'sit',
353
+ 'saw' => 'see',
354
+ 'sawed' => 'saw',
355
+ 'sawn' => 'saw',
356
+ 'seen' => 'see',
357
+ 'sent' => 'send',
358
+ 'sewed' => 'sew',
359
+ 'sewn' => 'sew',
360
+ 'shaken' => 'shake',
361
+ 'shaved' => 'shave',
362
+ 'shaven' => 'shave',
363
+ 'sheared' => 'shear',
364
+ 'shined' => 'shine',
365
+ 'shod' => 'shoe',
366
+ 'shoed' => 'shoe',
367
+ 'shone' => 'shine',
368
+ 'shook' => 'shake',
369
+ 'shorn' => 'shear',
370
+ 'shot' => 'shoot',
371
+ 'showed' => 'show',
372
+ 'shown' => 'show',
373
+ 'shrank' => 'shrink',
374
+ 'shredded' => 'shred',
375
+ 'shrived' => 'shrive',
376
+ 'shriven' => 'shrive',
377
+ 'shrove' => 'shrive',
378
+ 'shrunk' => 'shrink',
379
+ 'shrunken' => 'shrink',
380
+ 'slain' => 'slay',
381
+ 'slept' => 'sleep',
382
+ 'slew' => 'slay',
383
+ 'slid' => 'slide',
384
+ 'slidden' => 'slide',
385
+ 'slung' => 'sling',
386
+ 'slunk' => 'slink',
387
+ 'smelled' => 'smell',
388
+ 'smelt' => 'smell',
389
+ 'smitten' => 'smite',
390
+ 'smote' => 'smite',
391
+ 'snuck' => 'sneak',
392
+ 'sold' => 'sell',
393
+ 'sought' => 'seek',
394
+ 'sowed' => 'sow',
395
+ 'sown' => 'sow',
396
+ 'span' => 'spin',
397
+ 'spat' => 'spit',
398
+ 'sped' => 'speed',
399
+ 'speeded' => 'speed',
400
+ 'spelled' => 'spell',
401
+ 'spelt' => 'spell',
402
+ 'spent' => 'spend',
403
+ 'spilled' => 'spill',
404
+ 'spilt' => 'spill',
405
+ 'spoiled' => 'spoil',
406
+ 'spoilt' => 'spoil',
407
+ 'spoke' => 'speak',
408
+ 'spoken' => 'speak',
409
+ 'sprang' => 'spring',
410
+ 'sprung' => 'spring',
411
+ 'spun' => 'spin',
412
+ 'stank' => 'stink',
413
+ 'staved' => 'stave',
414
+ 'stole' => 'steal',
415
+ 'stolen' => 'steal',
416
+ 'stood' => 'stand',
417
+ 'stove' => 'stave',
418
+ 'strewed' => 'strew',
419
+ 'strewn' => 'strew',
420
+ 'stricken' => 'strike',
421
+ 'strid' => 'stride',
422
+ 'stridden' => 'stride',
423
+ 'strived' => 'strive',
424
+ 'striven' => 'strive',
425
+ 'strode' => 'stride',
426
+ 'strove' => 'strive',
427
+ 'struck' => 'strike',
428
+ 'strung' => 'string',
429
+ 'stuck' => 'stick',
430
+ 'stung' => 'sting',
431
+ 'stunk' => 'stink',
432
+ 'sung' => 'sing',
433
+ 'sunk' => 'sink',
434
+ 'sunken' => 'sink',
435
+ 'swam' => 'swim',
436
+ 'sweated' => 'sweat',
437
+ 'swelled' => 'swell',
438
+ 'swept' => 'sweep',
439
+ 'swollen' => 'swell',
440
+ 'swore' => 'swear',
441
+ 'sworn' => 'swear',
442
+ 'swum' => 'swim',
443
+ 'swung' => 'swing',
444
+ 'taken' => 'take',
445
+ 'taught' => 'teach',
446
+ 'thought' => 'think',
447
+ 'threw' => 'throw',
448
+ 'thrived' => 'thrive',
449
+ 'thriven' => 'thrive',
450
+ 'throve' => 'thrive',
451
+ 'thrown' => 'throw',
452
+ 'told' => 'tell',
453
+ 'took' => 'take',
454
+ 'tore' => 'tear',
455
+ 'torn' => 'tear',
456
+ 'trod' => 'tread',
457
+ 'trodden' => 'tread',
458
+ 'unbent' => 'unbend',
459
+ 'unbound' => 'unbind',
460
+ 'unbuilt' => 'unbuild',
461
+ 'underbought' => 'underbuy',
462
+ 'underfed' => 'underfeed',
463
+ 'undergone' => 'undergo',
464
+ 'underlaid' => 'underlay',
465
+ 'underlain' => 'underlie',
466
+ 'underlay' => 'underlie',
467
+ 'underpaid' => 'underpay',
468
+ 'underran' => 'underrun',
469
+ 'undershot' => 'undershoot',
470
+ 'undersold' => 'undersell',
471
+ 'understood' => 'understand',
472
+ 'undertaken' => 'undertake',
473
+ 'undertook' => 'undertake',
474
+ 'underwent' => 'undergo',
475
+ 'underwritten' => 'underwrite',
476
+ 'underwrote' => 'underwrite',
477
+ 'undid' => 'undo',
478
+ 'undone' => 'undo',
479
+ 'undrawn' => 'undraw',
480
+ 'undrew' => 'undraw',
481
+ 'unfroze' => 'unfreeze',
482
+ 'unfrozen' => 'unfreeze',
483
+ 'ungirded' => 'ungird',
484
+ 'ungirt' => 'ungird',
485
+ 'unhanged' => 'unhang',
486
+ 'unhung' => 'unhang',
487
+ 'unknitted' => 'unknit',
488
+ 'unladed' => 'unlade',
489
+ 'unladen' => 'unlade',
490
+ 'unlaid' => 'unlay',
491
+ 'unlearned' => 'unlearn',
492
+ 'unlearnt' => 'unlearn',
493
+ 'unmade' => 'unmake',
494
+ 'unreeved' => 'unreeve',
495
+ 'unrove' => 'unreeve',
496
+ 'unsaid' => 'unsay',
497
+ 'unslung' => 'unsling',
498
+ 'unspoke' => 'unspeak',
499
+ 'unspoken' => 'unspeak',
500
+ 'unstrung' => 'unstring',
501
+ 'unstuck' => 'unstick',
502
+ 'unswore' => 'unswear',
503
+ 'unsworn' => 'unswear',
504
+ 'untaught' => 'unteach',
505
+ 'unthought' => 'unthink',
506
+ 'untrod' => 'untread',
507
+ 'untrodden' => 'untread',
508
+ 'unwinded' => 'unwind',
509
+ 'unwound' => 'unwind',
510
+ 'unwove' => 'unweave',
511
+ 'unwoven' => 'unweave',
512
+ 'upbuilt' => 'upbuild',
513
+ 'upheld' => 'uphold',
514
+ 'uprisen' => 'uprise',
515
+ 'uprose' => 'uprise',
516
+ 'upswept' => 'upsweep',
517
+ 'upswung' => 'upswing',
518
+ 'waked' => 'wake',
519
+ 'was' => 'be',
520
+ 'waylaid' => 'waylay',
521
+ 'wedded' => 'wed',
522
+ 'went' => 'go',
523
+ 'wept' => 'weep',
524
+ 'were' => 'be',
525
+ 'wetted' => 'wet',
526
+ 'winded' => 'wind',
527
+ 'wist' => 'wit',
528
+ 'wot' => 'wit',
529
+ 'withdrawn' => 'withdraw',
530
+ 'withdrew' => 'withdraw',
531
+ 'withheld' => 'withhold',
532
+ 'withstood' => 'withstand',
533
+ 'woke' => 'wake',
534
+ 'woken' => 'wake',
535
+ 'won' => 'win',
536
+ 'wore' => 'wear',
537
+ 'worked' => 'work',
538
+ 'worn' => 'wear',
539
+ 'wound' => 'wind',
540
+ 'wove' => 'weave',
541
+ 'woven' => 'weave',
542
+ 'written' => 'write',
543
+ 'wrote' => 'write',
544
+ 'wrought' => 'work',
545
+ 'wrung' => 'wring',
546
+ }
547
+
548
+ # Mapping of word suffixes to infinitive rules.
549
+ InfSuffixRules = {
550
+ # '<suffix>' => {
551
+ # :order => <sort order>,
552
+ # :rule => <rule number>,
553
+
554
+ # :word1 == 0 => Use 0, the index of the longest prefix
555
+ # within @{$prefix{$self->{'suffix'} } }, below.
556
+
557
+ # :word1 == 1 => Use 1, the index of the 2nd longest prefix
558
+ # within @{$prefix{$self->{'suffix'} } }, below.
559
+
560
+ # :word1 == -1 => Use the index of the shortest prefix
561
+ # within @{$prefix{$self->{'suffix'} } }, below + a letter.
562
+
563
+ # :word1 == -2 => Use the index of the shortest prefix
564
+ # within @{$prefix{$self->{'suffix'} } }, below + a letter,
565
+ # and use the shortest prefix as well.
566
+
567
+ # :word1 == -3 => Use the index of the shortest prefix
568
+ # within @{$prefix{$self->{'suffix'} } }, below + meter,
569
+ # and use the shortest prefix + metre as well.
570
+
571
+ # :word1 == -4 => Use the original string.
572
+ 'hes' => {
573
+ :order => 1011,
574
+ :rule => '1',
575
+ :word1 => 0, # Longest prefix.
576
+ :suffix1 => '',
577
+ :suffix2 => '',
578
+ },
579
+ 'ses' => {
580
+ :order => 1021,
581
+ :rule => '2',
582
+ :word1 => 0, # Longest prefix.
583
+ :suffix1 => '',
584
+ :suffix2 => '',
585
+ },
586
+ 'xes' => {
587
+ :order => 1031,
588
+ :rule => '3',
589
+ :word1 => 0, # Longest prefix.
590
+ :suffix1 => '',
591
+ :suffix2 => '',
592
+ },
593
+ 'zes' => {
594
+ :order => 1041,
595
+ :rule => '4',
596
+ :word1 => 0, # Longest prefix.
597
+ :suffix1 => '',
598
+ :suffix2 => '',
599
+ },
600
+ 'iless' => {
601
+ :order => 1051,
602
+ :rule => '43a',
603
+ :word1 => -1, # Shortest prefix.
604
+ :suffix1 => 'y',
605
+ :suffix2 => '',
606
+ },
607
+ 'less' => {
608
+ :order => 1052,
609
+ :rule => '43b',
610
+ :word1 => -1, # Shortest prefix.
611
+ :suffix1 => '',
612
+ :suffix2 => '',
613
+ },
614
+ 'iness' => {
615
+ :order => 1053,
616
+ :rule => '44a',
617
+ :word1 => -1, # Shortest prefix.
618
+ :suffix1 => 'y',
619
+ :suffix2 => '',
620
+ },
621
+ 'ness' => {
622
+ :order => 1054,
623
+ :rule => '44b',
624
+ :word1 => -1, # Shortest prefix.
625
+ :suffix1 => '',
626
+ :suffix2 => '',
627
+ },
628
+ "'s" => {
629
+ :order => 1055,
630
+ :rule => '7',
631
+ :word1 => -1, # Shortest prefix.
632
+ :suffix1 => '',
633
+ :suffix2 => '',
634
+ },
635
+ 'ies' => {
636
+ :order => 1056,
637
+ :rule => '13a',
638
+ :word1 => -1, # Shortest prefix.
639
+ :suffix1 => 'y',
640
+ :suffix2 => '',
641
+ },
642
+ 'es' => {
643
+ :order => 1057,
644
+ :rule => '13b',
645
+ :word1 => 0, # Longest prefix.
646
+ :suffix1 => '',
647
+ :suffix2 => '',
648
+ },
649
+ 'ss' => {
650
+ :order => 1061,
651
+ :rule => '6a',
652
+ :word1 => -4, # Original string.
653
+ :suffix1 => '',
654
+ :suffix2 => '',
655
+ },
656
+ 's' => {
657
+ :order => 1062,
658
+ :rule => '6b',
659
+ :word1 => -1, # Shortest prefix.
660
+ :suffix1 => '',
661
+ :suffix2 => '',
662
+ },
663
+ 'ater' => {
664
+ :order => 1081,
665
+ :rule => '8',
666
+ :word1 => -4, # Original string.
667
+ :suffix1 => '',
668
+ :suffix2 => '',
669
+ },
670
+ 'cter' => {
671
+ :order => 1091,
672
+ :rule => '9',
673
+ :word1 => -4, # Original string.
674
+ :suffix1 => '',
675
+ :suffix2 => '',
676
+ },
677
+ 'ier' => {
678
+ :order => 1101,
679
+ :rule => '10',
680
+ :word1 => -1, # Shortest prefix.
681
+ :suffix1 => 'y',
682
+ :suffix2 => '',
683
+ },
684
+ 'er' => {
685
+ :order => 1111,
686
+ :rule => '11',
687
+ :word1 => 0, # Longest prefix.
688
+ :suffix1 => '',
689
+ :suffix2 => '',
690
+ },
691
+ 'ied' => {
692
+ :order => 1121,
693
+ :rule => '12a',
694
+ :word1 => -1, # Shortest prefix.
695
+ :suffix1 => 'y',
696
+ :suffix2 => '',
697
+ },
698
+ 'ed' => {
699
+ :order => 1122,
700
+ :rule => '12b', # There is extra code for 12b below.
701
+ :word1 => 0, # Longest prefix.
702
+ :suffix1 => '',
703
+ :suffix2 => '',
704
+ },
705
+ 'iest' => {
706
+ :order => 1141,
707
+ :rule => '14a',
708
+ :word1 => -1, # Shortest prefix.
709
+ :suffix1 => 'y',
710
+ :suffix2 => '',
711
+ },
712
+ 'est' => {
713
+ :order => 1142,
714
+ :rule => '14b',
715
+ :word1 => -2, # Shortest prefix + a letter, and shortest prefix.
716
+ :suffix1 => 'e',
717
+ :suffix2 => '',
718
+ },
719
+ 'blity' => {
720
+ :order => 1143,
721
+ :rule => '21',
722
+ :word1 => -4, # Original string.
723
+ :suffix1 => '',
724
+ :suffix2 => '',
725
+ },
726
+ 'bility' => {
727
+ :order => 1144,
728
+ :rule => '22',
729
+ :word1 => -1, # Shortest prefix.
730
+ :suffix1 => 'ble',
731
+ :suffix2 => '',
732
+ },
733
+ 'fiable' => {
734
+ :order => 1145,
735
+ :rule => '23',
736
+ :word1 => -1, # Shortest prefix.
737
+ :suffix1 => 'fy',
738
+ :suffix2 => '',
739
+ },
740
+ 'logist' => {
741
+ :order => 1146,
742
+ :rule => '24',
743
+ :word1 => -1, # Shortest prefix.
744
+ :suffix1 => 'logy',
745
+ :suffix2 => '',
746
+ },
747
+ 'ing' => {
748
+ :order => 1151,
749
+ :rule => '15', # There is extra code for 15 below.
750
+ :word1 => -2, # Shortest prefix + a letter, and shortest prefix.
751
+ :suffix1 => 'e',
752
+ :suffix2 => '',
753
+ },
754
+ 'ist' => {
755
+ :order => 1161,
756
+ :rule => '16',
757
+ :word1 => -2, # Shortest prefix + a letter, and shortest prefix.
758
+ :suffix1 => 'e',
759
+ :suffix2 => '',
760
+ },
761
+ 'ism' => {
762
+ :order => 1171,
763
+ :rule => '17',
764
+ :word1 => -2, # Shortest prefix + a letter, and shortest prefix.
765
+ :suffix1 => 'e',
766
+ :suffix2 => '',
767
+ },
768
+ 'ity' => {
769
+ :order => 1181,
770
+ :rule => '18',
771
+ :word1 => -2, # Shortest prefix + a letter, and shortest prefix.
772
+ :suffix1 => 'e',
773
+ :suffix2 => '',
774
+ },
775
+ 'ize' => {
776
+ :order => 1191,
777
+ :rule => '19',
778
+ :word1 => -2, # Shortest prefix + a letter, and shortest prefix.
779
+ :suffix1 => 'e',
780
+ :suffix2 => '',
781
+ },
782
+ 'cable' => {
783
+ :order => 1201,
784
+ :rule => '20a',
785
+ :word1 => -4, # Original string.
786
+ :suffix1 => '',
787
+ :suffix2 => '',
788
+ },
789
+ 'gable' => {
790
+ :order => 1202,
791
+ :rule => '20b',
792
+ :word1 => -4, # Original string.
793
+ :suffix1 => '',
794
+ :suffix2 => '',
795
+ },
796
+ 'able' => {
797
+ :order => 1203,
798
+ :rule => '20c',
799
+ :word1 => -2, # Shortest prefix + a letter, and shortest prefix.
800
+ :suffix1 => 'e',
801
+ :suffix2 => '',
802
+ },
803
+ 'graphic' => {
804
+ :order => 1251,
805
+ :rule => '25',
806
+ :word1 => -1, # Shortest prefix.
807
+ :suffix1 => 'graphy',
808
+ :suffix2 => '',
809
+ },
810
+ 'istic' => {
811
+ :order => 1261,
812
+ :rule => '26',
813
+ :word1 => -1, # Shortest prefix.
814
+ :suffix1 => 'ist',
815
+ :suffix2 => '',
816
+ },
817
+ 'itic' => {
818
+ :order => 1271,
819
+ :rule => '27',
820
+ :word1 => -1, # Shortest prefix.
821
+ :suffix1 => 'ite',
822
+ :suffix2 => '',
823
+ },
824
+ 'like' => {
825
+ :order => 1281,
826
+ :rule => '28',
827
+ :word1 => -1, # Shortest prefix.
828
+ :suffix1 => '',
829
+ :suffix2 => '',
830
+ },
831
+ 'logic' => {
832
+ :order => 1291,
833
+ :rule => '29',
834
+ :word1 => -1, # Shortest prefix.
835
+ :suffix1 => 'logy',
836
+ :suffix2 => '',
837
+ },
838
+ 'ment' => {
839
+ :order => 1301,
840
+ :rule => '30',
841
+ :word1 => -1, # Shortest prefix.
842
+ :suffix1 => '',
843
+ :suffix2 => '',
844
+ },
845
+ 'mental' => {
846
+ :order => 1311,
847
+ :rule => '31',
848
+ :word1 => -1, # Shortest prefix.
849
+ :suffix1 => 'ment',
850
+ :suffix2 => '',
851
+ },
852
+ 'metry' => {
853
+ :order => 1321,
854
+ :rule => '32',
855
+ :word1 => -3, # Shortest prefix + meter, and shortest perfix + metre.
856
+ :suffix1 => 'meter',
857
+ :suffix2 => 'metre',
858
+ },
859
+ 'nce' => {
860
+ :order => 1331,
861
+ :rule => '33',
862
+ :word1 => -1, # Shortest prefix.
863
+ :suffix1 => 'nt',
864
+ :suffix2 => '',
865
+ },
866
+ 'ncy' => {
867
+ :order => 1341,
868
+ :rule => '34',
869
+ :word1 => -1, # Shortest prefix.
870
+ :suffix1 => 'nt',
871
+ :suffix2 => '',
872
+ },
873
+ 'ship' => {
874
+ :order => 1351,
875
+ :rule => '35',
876
+ :word1 => -1, # Shortest prefix.
877
+ :suffix1 => '',
878
+ :suffix2 => '',
879
+ },
880
+ 'ical' => {
881
+ :order => 1361,
882
+ :rule => '36',
883
+ :word1 => -1, # Shortest prefix.
884
+ :suffix1 => 'ic',
885
+ :suffix2 => '',
886
+ },
887
+ 'ional' => {
888
+ :order => 1371,
889
+ :rule => '37',
890
+ :word1 => -1, # Shortest prefix.
891
+ :suffix1 => 'ion',
892
+ :suffix2 => '',
893
+ },
894
+ 'bly' => {
895
+ :order => 1381,
896
+ :rule => '38',
897
+ :word1 => -1, # Shortest prefix.
898
+ :suffix1 => 'ble',
899
+ :suffix2 => '',
900
+ },
901
+ 'ily' => {
902
+ :order => 1391,
903
+ :rule => '39',
904
+ :word1 => -1, # Shortest prefix.
905
+ :suffix1 => 'y',
906
+ :suffix2 => '',
907
+ },
908
+ 'ly' => {
909
+ :order => 1401,
910
+ :rule => '40',
911
+ :word1 => -1, # Shortest prefix.
912
+ :suffix1 => '',
913
+ :suffix2 => '',
914
+ },
915
+ 'iful' => {
916
+ :order => 1411,
917
+ :rule => '41a',
918
+ :word1 => -1, # Shortest prefix.
919
+ :suffix1 => 'y',
920
+ :suffix2 => '',
921
+ },
922
+ 'ful' => {
923
+ :order => 1412,
924
+ :rule => '41b',
925
+ :word1 => -1, # Shortest prefix.
926
+ :suffix1 => '',
927
+ :suffix2 => '',
928
+ },
929
+ 'ihood' => {
930
+ :order => 1421,
931
+ :rule => '42a',
932
+ :word1 => -1, # Shortest prefix.
933
+ :suffix1 => 'y',
934
+ :suffix2 => '',
935
+ },
936
+ 'hood' => {
937
+ :order => 1422,
938
+ :rule => '42b',
939
+ :word1 => -1, # Shortest prefix.
940
+ :suffix1 => '',
941
+ :suffix2 => '',
942
+ },
943
+ 'ification' => {
944
+ :order => 1451,
945
+ :rule => '45',
946
+ :word1 => -1, # Shortest prefix.
947
+ :suffix1 => 'ify',
948
+ :suffix2 => '',
949
+ },
950
+ 'ization' => {
951
+ :order => 1461,
952
+ :rule => '46',
953
+ :word1 => -1, # Shortest prefix.
954
+ :suffix1 => 'ize',
955
+ :suffix2 => '',
956
+ },
957
+ 'ction' => {
958
+ :order => 1471,
959
+ :rule => '47',
960
+ :word1 => -1, # Shortest prefix.
961
+ :suffix1 => 'ct',
962
+ :suffix2 => '',
963
+ },
964
+ 'rtion' => {
965
+ :order => 1481,
966
+ :rule => '48',
967
+ :word1 => -1, # Shortest prefix.
968
+ :suffix1 => 'rt',
969
+ :suffix2 => '',
970
+ },
971
+ 'ation' => {
972
+ :order => 1491,
973
+ :rule => '49',
974
+ :word1 => -1, # Shortest prefix.
975
+ :suffix1 => 'ate',
976
+ :suffix2 => '',
977
+ },
978
+ 'ator' => {
979
+ :order => 1501,
980
+ :rule => '50',
981
+ :word1 => -1, # Shortest prefix.
982
+ :suffix1 => 'ate',
983
+ :suffix2 => '',
984
+ },
985
+ 'ctor' => {
986
+ :order => 1511,
987
+ :rule => '51',
988
+ :word1 => -1, # Shortest prefix.
989
+ :suffix1 => 'ct',
990
+ :suffix2 => '',
991
+ },
992
+ 'ive' => {
993
+ :order => 1521,
994
+ :rule => '52',
995
+ :word1 => -1, # Shortest prefix.
996
+ :suffix1 => 'ion',
997
+ :suffix2 => '',
998
+ },
999
+ 'onian' => {
1000
+ :order => 1530,
1001
+ :rule => '54',
1002
+ :word1 => -1, # Shortest prefix.
1003
+ :suffix1 => 'on',
1004
+ :suffix2 => '',
1005
+ },
1006
+ 'an' => {
1007
+ :order => 1531,
1008
+ :rule => '53',
1009
+ :word1 => -1, # Shortest prefix.
1010
+ :suffix1 => 'a',
1011
+ :suffix2 => '',
1012
+ },
1013
+ }
1014
+ InfSuffixRuleOrder = InfSuffixRules.keys.sort_by {|rule| InfSuffixRules[rule][:order]}
1015
+
1016
+
1017
+ ### The object class for the result returned from calling
1018
+ ### Linguistics::EN::infinitive.
1019
+ class Infinitive < String
1020
+
1021
+ ### Create and return a new Infinitive object.
1022
+ def initialize( word1, word2, suffix, rule )
1023
+ super( word1 )
1024
+ @word2 = word2
1025
+ @suffix = suffix
1026
+ @rule = rule
1027
+ end
1028
+
1029
+
1030
+ ######
1031
+ public
1032
+ ######
1033
+
1034
+ # The fallback deconjugated form
1035
+ attr_reader :word2
1036
+
1037
+ # The suffix used to to identify the transform rule
1038
+ attr_reader :suffix
1039
+
1040
+ # The rule used
1041
+ attr_reader :rule
1042
+ end
1043
+
1044
+
1045
+ ###############
1046
+ module_function
1047
+ ###############
1048
+
1049
+ ### Return the infinitive form of the given word
1050
+ def infinitive( word )
1051
+ word = word.to_s
1052
+ word1 = word2 = suffix = rule = newword = ''
1053
+
1054
+ if IrregularInfinitives.key?( word )
1055
+ word1 = IrregularInfinitives[ word ]
1056
+ rule = 'irregular'
1057
+ else
1058
+ # Build up $prefix{$suffix} as an array of prefixes, from longest to shortest.
1059
+ prefix, suffix = nil
1060
+ prefixes = Hash::new {|hsh,key| hsh[key] = []}
1061
+
1062
+ # Build the hash of prefixes for the word
1063
+ 1.upto( word.length ) {|i|
1064
+ prefix = word[0, i]
1065
+ suffix = word[i..-1]
1066
+
1067
+ (suffix.length - 1).downto( 0 ) {|j|
1068
+ newword = prefix + suffix[0, j]
1069
+ prefixes[ suffix ].push( newword )
1070
+ }
1071
+ }
1072
+
1073
+ $stderr.puts "prefixes: %p" % prefixes if $DEBUG
1074
+
1075
+ # Now check for rules covering the prefixes for this word, picking
1076
+ # the first one if one was found.
1077
+ if (( suffix = ((InfSuffixRuleOrder & prefixes.keys).first) ))
1078
+ rule = InfSuffixRules[ suffix ][:rule]
1079
+ shortestPrefix = InfSuffixRules[ suffix ][:word1]
1080
+ $stderr.puts "Using rule %p (%p) for suffix %p" %
1081
+ [ rule, shortestPrefix, suffix ] if $DEBUG
1082
+
1083
+ case shortestPrefix
1084
+ when 0
1085
+ word1 = prefixes[ suffix ][ 0 ]
1086
+ word2 = prefixes[ suffix ][ 1 ]
1087
+ $stderr.puts "For sp = 0: word1: %p, word2: %p" %
1088
+ [ word1, word2 ] if $DEBUG
1089
+
1090
+ when -1
1091
+ word1 = prefixes[ suffix ].last +
1092
+ InfSuffixRules[ suffix ][:suffix1]
1093
+ word2 = ''
1094
+ $stderr.puts "For sp = -1: word1: %p, word2: %p" %
1095
+ [ word1, word2 ] if $DEBUG
1096
+
1097
+ when -2
1098
+ word1 = prefixes[ suffix ].last +
1099
+ InfSuffixRules[ suffix ][:suffix1]
1100
+ word2 = prefixes[ suffix ].last
1101
+ $stderr.puts "For sp = -2: word1: %p, word2: %p" %
1102
+ [ word1, word2 ] if $DEBUG
1103
+
1104
+ when -3
1105
+ word1 = prefixes[ suffix ].last +
1106
+ InfSuffixRules[ suffix ][:suffix1]
1107
+ word2 = prefixes[ suffix ].last +
1108
+ InfSuffixRules[ suffix ][:suffix2]
1109
+ $stderr.puts "For sp = -3: word1: %p, word2: %p" %
1110
+ [ word1, word2 ] if $DEBUG
1111
+
1112
+ when -4
1113
+ word1 = word
1114
+ word2 = ''
1115
+ $stderr.puts "For sp = -4: word1: %p, word2: %p" %
1116
+ [ word1, word2 ] if $DEBUG
1117
+
1118
+ else
1119
+ raise IndexError,
1120
+ "Couldn't find rule for shortest prefix %p" %
1121
+ shortestPrefix
1122
+ end
1123
+
1124
+ # Rules 12b and 15: Strip off 'ed' or 'ing'.
1125
+ if rule == '12b' or rule == '15'
1126
+ # Do we have a monosyllable of this form:
1127
+ # o 0+ Consonants
1128
+ # o 1+ Vowel
1129
+ # o 2 Non-wx
1130
+ # Eg: tipped => tipp?
1131
+ # Then return tip and tipp.
1132
+ # Eg: swimming => swimm?
1133
+ # Then return tipswim and swimm.
1134
+
1135
+ if /^([^aeiou]*[aeiou]+)([^wx])\2$/ =~ word2
1136
+ word1 = $1 + $2
1137
+ word2 = $1 + $2 + $2
1138
+ end
1139
+ end
1140
+ end
1141
+ end
1142
+
1143
+ return Infinitive::new( word1, word2, suffix, rule )
1144
+ end
1145
+
1146
+ end # module EN
1147
+ end # module Linguistics
1148
+