lingo 1.8.2 → 1.8.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. data/ChangeLog +33 -0
  2. data/README +6 -5
  3. data/Rakefile +6 -4
  4. data/{lib/lingo/cachable.rb → bin/lingosrv} +30 -58
  5. data/bin/lingoweb +30 -0
  6. data/de.lang +2 -13
  7. data/en/lingo-irr.txt +266 -0
  8. data/en/lingo-wdn.txt +37319 -0
  9. data/en.lang +2 -15
  10. data/lib/lingo/app.rb +82 -0
  11. data/lib/lingo/attendee/abbreviator.rb +22 -26
  12. data/lib/lingo/attendee/debugger.rb +8 -4
  13. data/lib/lingo/attendee/decomposer.rb +0 -1
  14. data/lib/lingo/attendee/dehyphenizer.rb +2 -2
  15. data/lib/lingo/attendee/multi_worder.rb +20 -13
  16. data/lib/lingo/attendee/noneword_filter.rb +2 -7
  17. data/lib/lingo/attendee/sequencer.rb +43 -19
  18. data/lib/lingo/attendee/stemmer/porter.rb +2 -2
  19. data/lib/lingo/attendee/stemmer.rb +1 -1
  20. data/lib/lingo/attendee/synonymer.rb +1 -9
  21. data/lib/lingo/attendee/text_reader.rb +42 -29
  22. data/lib/lingo/attendee/text_writer.rb +3 -6
  23. data/lib/lingo/attendee/tokenizer.rb +87 -69
  24. data/lib/lingo/attendee/variator.rb +7 -5
  25. data/lib/lingo/attendee/vector_filter.rb +11 -11
  26. data/lib/lingo/attendee/word_searcher.rb +1 -9
  27. data/lib/lingo/attendee.rb +24 -105
  28. data/lib/lingo/buffered_attendee.rb +2 -9
  29. data/lib/lingo/call.rb +18 -13
  30. data/lib/lingo/cli.rb +5 -10
  31. data/lib/lingo/config.rb +40 -7
  32. data/lib/lingo/ctl.rb +69 -57
  33. data/lib/lingo/database/hash_store.rb +9 -4
  34. data/lib/lingo/database/sdbm_store.rb +4 -7
  35. data/lib/lingo/database/source/multi_key.rb +1 -1
  36. data/lib/lingo/database/source/multi_value.rb +1 -1
  37. data/lib/lingo/database/source.rb +2 -20
  38. data/lib/lingo/database.rb +30 -19
  39. data/lib/lingo/debug.rb +79 -0
  40. data/lib/lingo/{core_ext.rb → language/char.rb} +43 -42
  41. data/lib/lingo/language/dictionary.rb +38 -46
  42. data/lib/lingo/language/grammar.rb +40 -57
  43. data/lib/lingo/language/lexical.rb +4 -7
  44. data/lib/lingo/language/lexical_hash.rb +17 -35
  45. data/lib/lingo/language/token.rb +4 -0
  46. data/lib/lingo/language/word.rb +7 -8
  47. data/lib/lingo/language/word_form.rb +4 -4
  48. data/lib/lingo/language.rb +2 -1
  49. data/lib/lingo/srv/config.ru +4 -0
  50. data/lib/lingo/srv/lingosrv.cfg +14 -0
  51. data/lib/lingo/{reportable.rb → srv.rb} +59 -61
  52. data/lib/lingo/version.rb +1 -1
  53. data/lib/lingo/web/config.ru +4 -0
  54. data/lib/lingo/web/lingoweb.cfg +14 -0
  55. data/lib/lingo/web/public/lingo.png +0 -0
  56. data/lib/lingo/web/public/lingoweb.css +74 -0
  57. data/lib/lingo/web/views/index.erb +92 -0
  58. data/lib/lingo/web.rb +94 -0
  59. data/lib/lingo.rb +27 -29
  60. data/lingo.cfg +1 -1
  61. data/lir.cfg +24 -0
  62. data/ru/lingo-dic.txt +22342 -0
  63. data/ru/lingo-mul.txt +5151 -0
  64. data/ru/lingo-syn.txt +0 -0
  65. data/ru.lang +99 -0
  66. data/test/attendee/ts_sequencer.rb +2 -2
  67. data/test/attendee/ts_text_reader.rb +36 -2
  68. data/test/attendee/ts_text_writer.rb +6 -6
  69. data/test/lir.vec +3 -3
  70. data/test/test_helper.rb +104 -102
  71. data/test/ts_database.rb +1 -1
  72. data/test/ts_language.rb +55 -96
  73. data/txt/artikel-ru.txt +45 -0
  74. data/txt/lir.txt +1 -3
  75. metadata +143 -83
  76. data/TODO +0 -23
data/ChangeLog CHANGED
@@ -1,5 +1,38 @@
1
1
  = Revision history for Lingo
2
2
 
3
+ == 1.8.3 [2012-09-20]
4
+
5
+ * Fixed regression introduced in 1.8.2 where reading input from STDIN was no
6
+ longer possible.
7
+ * Fixed regression introduced in 1.8.2 where Lingo would no longer run on Ruby
8
+ 1.9.2.
9
+ * Fixed length limit handling for multibyte characters in SDBM store.
10
+ * Fixed encoding issue in SDBM store.
11
+ * Fixed issue with BOM in config files.
12
+ * Modified character handling to accept *any* Unicode letter (_Alphabetical_)
13
+ and digit (<i>Decimal Number</i>).
14
+ * Modified Attendee::Tokenizer to use only hard-coded tokenization rules.
15
+ * Modified Attendee::VectorFilter's +lexicals+ option to be case-sensitive.
16
+ * Improved overall performance and memory usage; Attendee::Sequencer changed
17
+ the order sequences are inserted into the stream.
18
+ * Eliminated performance penalty caused by Attendee::Abbreviator.
19
+ * Added Russian language support (Yulia Dorokhova, Thomas Müller).
20
+ * Added +fields+ option to Attendee::TextReader to cut off field labels;
21
+ defaults to +true+ in record (LIR) mode.
22
+ * Added +skip+ option to Attendee::TextReader to skip lines matching the given
23
+ pattern.
24
+ * Added +src+ option to Attendee::VectorFilter to print "source" part of
25
+ compounds.
26
+ * Added +lingosrv+ and +lingoweb+ executables. The former provides a simple
27
+ HTTP endpoint with JSON output; the latter serves a demo web interface.
28
+ * Refactored internal caching.
29
+ * Made dependency on Ruby version >= 1.9.2 explicit.
30
+ * Removed reporting facility (options '--perfmon' and '--status').
31
+ * Learned '--profile' option to collect profiling information while running.
32
+ * Deprecated Language::Grammar option +compositum+ (now +compound+), Config
33
+ option +textreader+ (now +text_reader+), and Attendee::TextReader option
34
+ +lir-record-pattern+ (now +records+); they will be removed in Lingo 1.9.
35
+
3
36
  == 1.8.2 [2012-04-19]
4
37
 
5
38
  * Performance improvements regarding Attendee::VectorFilter's (as well as
data/README CHANGED
@@ -25,7 +25,7 @@
25
25
 
26
26
  == VERSION
27
27
 
28
- This documentation refers to Lingo version 1.8.2
28
+ This documentation refers to Lingo version 1.8.3
29
29
 
30
30
 
31
31
  == DESCRIPTION
@@ -173,8 +173,8 @@ to run that command with administrator privileges, depending on your
173
173
  environment). Then you can call the +lingo+ executable to process your
174
174
  data. See <tt>lingo --help</tt> for starters.
175
175
 
176
- Please note that Lingo requires Ruby version 1.9 to run
177
- (1.9.3[http://ruby-lang.org/en/downloads/] is the currently recommended
176
+ Please note that Lingo requires Ruby version 1.9 to run (1.9.2 or greater;
177
+ 1.9.3[http://ruby-lang.org/en/downloads/] is the currently recommended
178
178
  version). If you want to use Lingo on Ruby 1.8, please refer to the legacy
179
179
  version (see below).
180
180
 
@@ -225,7 +225,7 @@ the development efforts will be directed towards Lingo 1.8+.
225
225
  To install the legacy version, download and extract the ZIP archive from
226
226
  RubyForge[http://rubyforge.org/frs/?group_id=5663]. No additional dependencies
227
227
  are required. This version of Lingo works with both Ruby 1.8 (1.8.5 or greater)
228
- and 1.9.
228
+ and 1.9 (1.9.2 or greater).
229
229
 
230
230
  The executable is named +lingo.rb+. It's located at the root of the installation
231
231
  directory and may only be run from there. See <tt>ruby lingo.rb -h</tt> for
@@ -320,7 +320,8 @@ Lingo is based on a collective development by Klaus Lepsky and John Vorhauer.
320
320
 
321
321
  * Klaus Lepsky <mailto:klaus@lepsky.de>
322
322
  * Jan-Helge Jacobs <mailto:plancton@web.de>
323
- * Thomas Müller <mailto:thomas.mueller@fh-koeln.de>
323
+ * Thomas Müller <mailto:thomas.mueller@gesis.org>
324
+ * Yulia Dorokhova <mailto:jdorokhova@hse.ru>
324
325
 
325
326
 
326
327
  == LICENSE AND COPYRIGHT
data/Rakefile CHANGED
@@ -39,11 +39,13 @@ The main functions of Lingo are:
39
39
  of word classes
40
40
  EOT
41
41
  extra_files: FileList[
42
- 'lingo.rb', 'lingo{,-call}.cfg', 'lir.cfg', '{de,en}.lang',
43
- '{de,en}/{lingo-*,user-dic,test_*}.txt', 'txt/{artikel{,-en},lir}.txt'
42
+ 'lingo.rb', 'lingo{,-call}.cfg', 'lir.cfg',
43
+ '{de,en,ru}.lang', '{de,en,ru}/{lingo-*,user-dic,test_*}.txt',
44
+ 'txt/{artikel{,-en,-ru},lir}.txt', 'lib/lingo/{srv,web}/**/*'
44
45
  ].to_a,
45
- required_ruby_version: '>= 1.9',
46
- dependencies: [['ruby-nuggets', '>= 0.8.5'], 'unicode', 'highline'],
46
+ required_ruby_version: '>= 1.9.2',
47
+ dependencies: [['ruby-nuggets', '>= 0.8.5'],
48
+ 'unicode', 'highline', 'sinatra'],
47
49
  development_dependencies: [['diff-lcs', '>= 1.1.3'], 'open4']
48
50
  }
49
51
  }}
@@ -1,58 +1,30 @@
1
- # encoding: utf-8
2
-
3
- #--
4
- ###############################################################################
5
- # #
6
- # Lingo -- A full-featured automatic indexing system #
7
- # #
8
- # Copyright (C) 2005-2007 John Vorhauer #
9
- # Copyright (C) 2007-2012 John Vorhauer, Jens Wille #
10
- # #
11
- # Lingo is free software; you can redistribute it and/or modify it under the #
12
- # terms of the GNU Affero General Public License as published by the Free #
13
- # Software Foundation; either version 3 of the License, or (at your option) #
14
- # any later version. #
15
- # #
16
- # Lingo is distributed in the hope that it will be useful, but WITHOUT ANY #
17
- # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
18
- # FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for #
19
- # more details. #
20
- # #
21
- # You should have received a copy of the GNU Affero General Public License #
22
- # along with Lingo. If not, see <http://www.gnu.org/licenses/>. #
23
- # #
24
- ###############################################################################
25
- #++
26
-
27
- class Lingo
28
-
29
- # Provides a simple caching mechanism.
30
-
31
- module Cachable
32
-
33
- def init_cachable
34
- @cachable_hash = Hash.new(false)
35
- end
36
-
37
- def hit?(key)
38
- @cachable_hash.has_key?(key)
39
- end
40
-
41
- def store(key, val)
42
- @cachable_hash[key] = cache_value(val)
43
- val
44
- end
45
-
46
- def retrieve(key)
47
- cache_value(@cachable_hash[key])
48
- end
49
-
50
- private
51
-
52
- def cache_value(val)
53
- val.dup unless val.nil?
54
- end
55
-
56
- end
57
-
58
- end
1
+ #! /usr/bin/env ruby
2
+
3
+ #--
4
+ ###############################################################################
5
+ # #
6
+ # Lingo -- A full-featured automatic indexing system #
7
+ # #
8
+ # Copyright (C) 2005-2007 John Vorhauer #
9
+ # Copyright (C) 2007-2012 John Vorhauer, Jens Wille #
10
+ # #
11
+ # Lingo is free software; you can redistribute it and/or modify it under the #
12
+ # terms of the GNU Affero General Public License as published by the Free #
13
+ # Software Foundation; either version 3 of the License, or (at your option) #
14
+ # any later version. #
15
+ # #
16
+ # Lingo is distributed in the hope that it will be useful, but WITHOUT ANY #
17
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
18
+ # FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for #
19
+ # more details. #
20
+ # #
21
+ # You should have received a copy of the GNU Affero General Public License #
22
+ # along with Lingo. If not, see <http://www.gnu.org/licenses/>. #
23
+ # #
24
+ ###############################################################################
25
+ #++
26
+
27
+ require 'lingo'
28
+ require 'lingo/srv'
29
+
30
+ Lingo::Srv.run!
data/bin/lingoweb ADDED
@@ -0,0 +1,30 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ #--
4
+ ###############################################################################
5
+ # #
6
+ # Lingo -- A full-featured automatic indexing system #
7
+ # #
8
+ # Copyright (C) 2005-2007 John Vorhauer #
9
+ # Copyright (C) 2007-2012 John Vorhauer, Jens Wille #
10
+ # #
11
+ # Lingo is free software; you can redistribute it and/or modify it under the #
12
+ # terms of the GNU Affero General Public License as published by the Free #
13
+ # Software Foundation; either version 3 of the License, or (at your option) #
14
+ # any later version. #
15
+ # #
16
+ # Lingo is distributed in the hope that it will be useful, but WITHOUT ANY #
17
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
18
+ # FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for #
19
+ # more details. #
20
+ # #
21
+ # You should have received a copy of the GNU Affero General Public License #
22
+ # along with Lingo. If not, see <http://www.gnu.org/licenses/>. #
23
+ # #
24
+ ###############################################################################
25
+ #++
26
+
27
+ require 'lingo'
28
+ require 'lingo/web'
29
+
30
+ Lingo::Web.run!
data/de.lang CHANGED
@@ -72,7 +72,7 @@ language:
72
72
  min-avg-part-size: "4"
73
73
  append-wordclass: "+"
74
74
  skip-sequences: [ xx ]
75
-
75
+
76
76
  suffix:
77
77
  # Suffixliste, Stand: 30-06-2005
78
78
  # Suffixklasse: s = Substantiv, a = Adjektiv, v = Verb, e = Eigenwort, f = Fugung
@@ -84,17 +84,6 @@ language:
84
84
  - [f, "s n e en es er ch/che /en"]
85
85
 
86
86
  attendees:
87
- tokenizer:
88
- regulars:
89
- - _char_: '_baslat_|_lat1sp_|_latexa_|_latexb_|_ipaext_'
90
- - NUMS: '[+-]?(\d{4,}|\d{1,3}(\.\d{3,3})*)(\.|(,\d+)?%?)'
91
- - URLS: '((mailto:|(news|http|https|ftp|ftps)://)\S+|^(www(\.\S+)+)|[^\s.]+([\._]\S+)+@\S+(\.\S+)+)'
92
- - ABRV: '(((_char_)+\.)+)(_char_)+'
93
- - WORD: '(_char_|_digit_|\-)+'
94
- - PUNC: '([!,\.:;?]|\xc2\xa1|\xc2\xbf)'
95
- - OTHR: '([\"#$%&\x27()*\+\-/<=>@\[\\\]^_{|}~]|\xc2\xa2|\xc2\xa3|\xc2\xa4|\xc2\xa5|\xc2\xa6|\xc2\xa7|\xc2\xa8|\xc2\xa9|\xc2\xaa|\xc2\xab|\xc2\xac|\xc2\xae|\xc2\xaf|\xc2\xb0|\xc2\xb1|\xc2\xb2|\xc2\xb3|\xc2\xb4|\xc2\xb5|\xc2\xb6|\xc2\xb7|\xc2\xb8|\xc2\xb9|\xc2\xba|\xc2\xbb|\xc2\xbc|\xc2\xbd|\xc2\xbe|\xc3\x97|\xc3\xb7)'
96
- - HELP: '[^ ]*'
97
-
98
87
  variator:
99
88
  variations:
100
89
  - [ ieh, sch ]
@@ -116,6 +105,6 @@ language:
116
105
  - [ fl, st ]
117
106
  - [ li, h ]
118
107
  - [ i, s ]
119
-
108
+
120
109
  sequencer:
121
110
  sequences: [ [AS, "2, 1"], [AK, "2, 1"], [AAK, "3, 1 2"], [AAS, "3, 1 2"] ]
data/en/lingo-irr.txt ADDED
@@ -0,0 +1,266 @@
1
+ #
2
+ # Wörterbuch der unregelmäßigen Verben
3
+ #
4
+ # Stand: 26.05.08 / Thomas Müller
5
+
6
+ ate=eat #v
7
+ awoke=awake #v
8
+ awoken=awake #v
9
+ beat=beat #v
10
+ became=become #v
11
+ become=become #v
12
+ began=begin #v
13
+ begun=begin #v
14
+ bent=bend #v
15
+ beset=beset #v
16
+ bet=bet #v
17
+ bit=bite #v
18
+ bitten=bite #v
19
+ bled=bleed #v
20
+ blew=blow #v
21
+ blown=blow #v
22
+ bore=bear #v
23
+ born=bear #v
24
+ bought=buy #v
25
+ bound=bind #v
26
+ bred=breed #v
27
+ broadcast=broadcast #v
28
+ broke=break #v
29
+ broken=break #v
30
+ brought=bring #v
31
+ built=build #v
32
+ burst=burst #v
33
+ came=come #v
34
+ cast=cast #v
35
+ caught=catch #v
36
+ chose=choose #v
37
+ chosen=choose #v
38
+ clung=cling #v
39
+ come=come #v
40
+ cost=cost #v
41
+ crept=creep #v
42
+ cut=cut #v
43
+ dealt=deal #v
44
+ did=do #v
45
+ done=do #v
46
+ drank=drink #v
47
+ drawn=draw #v
48
+ drew=draw #v
49
+ driven=drive #v
50
+ drove=drive #v
51
+ drunk=drink #v
52
+ dug=dig #v
53
+ eaten=eat #v
54
+ fallen=fall #v
55
+ fed=feed #v
56
+ fell=fall #v
57
+ felt=feel #v
58
+ fit=fit #v
59
+ fled=flee #v
60
+ flew=fly #v
61
+ flown=fly #v
62
+ flung=fling #v
63
+ forbade=forbid #v
64
+ forbidden=forbid #v
65
+ forgave=forgive #v
66
+ forgiven=forgive #v
67
+ forgot=forget #v
68
+ forgotten=forget #v
69
+ forsaken=forsake #v
70
+ forsook=forsake #v
71
+ fought=fight #v
72
+ found=find #v
73
+ froze=freeze #v
74
+ frozen=freeze #v
75
+ gave=give #v
76
+ given=give #v
77
+ gone=go #v
78
+ got=get #v
79
+ gotten=get #v
80
+ grew=grow #v
81
+ ground=grind #v
82
+ grown=grow #v
83
+ heard=hear #v
84
+ held=hold #v
85
+ hidden=hide #v
86
+ hid=hide #v
87
+ hit=hit #v
88
+ hung=hang #v
89
+ hurt=hurt #v
90
+ kept=keep #v
91
+ knelt=kneel #v
92
+ knew=know #v
93
+ knit=knit #v
94
+ know=know #v
95
+ laid=lay #v
96
+ lain=lie #v
97
+ lay=lie #v
98
+ led=lead #v
99
+ left=leave #v
100
+ lent=lend #v
101
+ let=let #v
102
+ lost=lose #v
103
+ made=make #v
104
+ meant=mean #v
105
+ met=meet #v
106
+ mistaken=mistake #v
107
+ mistook=mistake #v
108
+ overcame=overcome #v
109
+ overcome=overcome #v
110
+ overdid=overdo #v
111
+ overdone=overdo #v
112
+ overtaken=overtake #v
113
+ overthrew=overthrow #v
114
+ overthrown=overthrow #v
115
+ overtook=overtake #v
116
+ paid=pay #v
117
+ pled=plead #v
118
+ put=put #v
119
+ quit=quit #v
120
+ rang=ring #v
121
+ ran=run #v
122
+ read=read #v
123
+ ridden=ride #v
124
+ rid=rid #v
125
+ risen=rise #v
126
+ rode=ride #v
127
+ rose=rise #v
128
+ rung=ring #v
129
+ run=run #v
130
+ said=say #v
131
+ sang=sing #v
132
+ sank=sink #v
133
+ sat=sit #v
134
+ saw=see #v
135
+ seen=see #v
136
+ sent=send #v
137
+ set=set #v
138
+ shaken=shake #v
139
+ shed=shed #v
140
+ shone=shine #v
141
+ shook=shake #v
142
+ shore=shear #v
143
+ shorn=shear #v
144
+ shot=shoot #v
145
+ shrank=shrink #v
146
+ shrunk=shrink #v
147
+ shut=shut #v
148
+ slain=slay #v
149
+ slept=sleep #v
150
+ slew=slay #v
151
+ slid=slide #v
152
+ slit=slit #v
153
+ slung=sling #v
154
+ smitten=smite #v
155
+ smote=smite #v
156
+ sold=sell #v
157
+ sought=seek #v
158
+ sped=speed #v
159
+ spent=spend #v
160
+ split=split #v
161
+ spoken=speak #v
162
+ spoke=speak #v
163
+ spread=spread #v
164
+ spun=spin #v
165
+ stank=stink #v
166
+ stolen=steal #v
167
+ stole=steal #v
168
+ stood=stand #v
169
+ stridden=stride #v
170
+ striven=strive #v
171
+ strode=stride #v
172
+ strove=strive #v
173
+ struck=strike #v
174
+ strung=string #v
175
+ stuck=stick #v
176
+ stung=sting #v
177
+ stunk=stink #v
178
+ sung=sing #v
179
+ sunk=sink #v
180
+ swam=swim #v
181
+ swept=sweep #v
182
+ swore=swear #v
183
+ sworn=swear #v
184
+ swum=swim #v
185
+ swung=swing #v
186
+ taken=take #v
187
+ taught=teach #v
188
+ thought=think #v
189
+ threw=throw #v
190
+ thrown=throw #v
191
+ thrust=thrust #v
192
+ told=tell #v
193
+ took=take #v
194
+ tore=tear #v
195
+ torn=tear #v
196
+ trodden=tread #v
197
+ trod=tread #v
198
+ understood=understand #v
199
+ upheld=uphold #v
200
+ upset=upset #v
201
+ wed=wed #v
202
+ went=go #v
203
+ wept=weep #v
204
+ withheld=withhold #v
205
+ withstood=withstand #v
206
+ woken=wake #v
207
+ woke=wake #v
208
+ won=win #v
209
+ wore=wear #v
210
+ worn=wear #v
211
+ wound=wind #v
212
+ written=write #v
213
+ wrote=write #v
214
+ wrung=wring #v
215
+ bade=bid #v
216
+ been=be #v
217
+ bid=bid #v
218
+ bidden=bid #v
219
+ burned=burn #v
220
+ burnt=burn #v
221
+ dived=dive #v
222
+ dove=dive #v
223
+ dreamed=dream #v
224
+ dreamt=dream #v
225
+ foregone=forego #v
226
+ forewent=forego #v
227
+ leaped=leap #v
228
+ learned=learn #v
229
+ learnt=learn #v
230
+ lept=leap #v
231
+ lighted=light #v
232
+ lit=light #v
233
+ misspelled=misspell #v
234
+ misspelt=misspell #v
235
+ mowed=mow #v
236
+ mown=mow #v
237
+ proved=prove #v
238
+ proven=prove #v
239
+ sawed=saw #v
240
+ sawn=saw #v
241
+ sewed=sew #v
242
+ sewn=sew #v
243
+ shaved=shave #v
244
+ shaven=shave #v
245
+ shod=shoe #v
246
+ shoed=shoe #v
247
+ showed=show #v
248
+ shown=show #v
249
+ sowed=sow #v
250
+ sown=sow #v
251
+ spat=spit #v
252
+ spilled=spill #v
253
+ spilt=spill #v
254
+ spit=spit #v
255
+ sprang=spring #v
256
+ sprung=spring #v
257
+ swelled=swell #v
258
+ swollen=swell #v
259
+ thrived=thrive #v
260
+ thriven=thrive #v
261
+ throve=thrive #v
262
+ was=be #v
263
+ weaved=weave #v
264
+ were=be #v
265
+ woven=weave #v
266
+ wove=weave #v