Source

Linguistics / lib / linguistics / en / conjugation.rb

The default branch has multiple heads

   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
 206
 207
 208
 209
 210
 211
 212
 213
 214
 215
 216
 217
 218
 219
 220
 221
 222
 223
 224
 225
 226
 227
 228
 229
 230
 231
 232
 233
 234
 235
 236
 237
 238
 239
 240
 241
 242
 243
 244
 245
 246
 247
 248
 249
 250
 251
 252
 253
 254
 255
 256
 257
 258
 259
 260
 261
 262
 263
 264
 265
 266
 267
 268
 269
 270
 271
 272
 273
 274
 275
 276
 277
 278
 279
 280
 281
 282
 283
 284
 285
 286
 287
 288
 289
 290
 291
 292
 293
 294
 295
 296
 297
 298
 299
 300
 301
 302
 303
 304
 305
 306
 307
 308
 309
 310
 311
 312
 313
 314
 315
 316
 317
 318
 319
 320
 321
 322
 323
 324
 325
 326
 327
 328
 329
 330
 331
 332
 333
 334
 335
 336
 337
 338
 339
 340
 341
 342
 343
 344
 345
 346
 347
 348
 349
 350
 351
 352
 353
 354
 355
 356
 357
 358
 359
 360
 361
 362
 363
 364
 365
 366
 367
 368
 369
 370
 371
 372
 373
 374
 375
 376
 377
 378
 379
 380
 381
 382
 383
 384
 385
 386
 387
 388
 389
 390
 391
 392
 393
 394
 395
 396
 397
 398
 399
 400
 401
 402
 403
 404
 405
 406
 407
 408
 409
 410
 411
 412
 413
 414
 415
 416
 417
 418
 419
 420
 421
 422
 423
 424
 425
 426
 427
 428
 429
 430
 431
 432
 433
 434
 435
 436
 437
 438
 439
 440
 441
 442
 443
 444
 445
 446
 447
 448
 449
 450
 451
 452
 453
 454
 455
 456
 457
 458
 459
 460
 461
 462
 463
 464
 465
 466
 467
 468
 469
 470
 471
 472
 473
 474
 475
 476
 477
 478
 479
 480
 481
 482
 483
 484
 485
 486
 487
 488
 489
 490
 491
 492
 493
 494
 495
 496
 497
 498
 499
 500
 501
 502
 503
 504
 505
 506
 507
 508
 509
 510
 511
 512
 513
 514
 515
 516
 517
 518
 519
 520
 521
 522
 523
 524
 525
 526
 527
 528
 529
 530
 531
 532
 533
 534
 535
 536
 537
 538
 539
 540
 541
 542
 543
 544
 545
 546
 547
 548
 549
 550
 551
 552
 553
 554
 555
 556
 557
 558
 559
 560
 561
 562
 563
 564
 565
 566
 567
 568
 569
 570
 571
 572
 573
 574
 575
 576
 577
 578
 579
 580
 581
 582
 583
 584
 585
 586
 587
 588
 589
 590
 591
 592
 593
 594
 595
 596
 597
 598
 599
 600
 601
 602
 603
 604
 605
 606
 607
 608
 609
 610
 611
 612
 613
 614
 615
 616
 617
 618
 619
 620
 621
 622
 623
 624
 625
 626
 627
 628
 629
 630
 631
 632
 633
 634
 635
 636
 637
 638
 639
 640
 641
 642
 643
 644
 645
 646
 647
 648
 649
 650
 651
 652
 653
 654
 655
 656
 657
 658
 659
 660
 661
 662
 663
 664
 665
 666
 667
 668
 669
 670
 671
 672
 673
 674
 675
 676
 677
 678
 679
 680
 681
 682
 683
 684
 685
 686
 687
 688
 689
 690
 691
 692
 693
 694
 695
 696
 697
 698
 699
 700
 701
 702
 703
 704
 705
 706
 707
 708
 709
 710
 711
 712
 713
 714
 715
 716
 717
 718
 719
 720
 721
 722
 723
 724
 725
 726
 727
 728
 729
 730
 731
 732
 733
 734
 735
 736
 737
 738
 739
 740
 741
 742
 743
 744
 745
 746
 747
 748
 749
 750
 751
 752
 753
 754
 755
 756
 757
 758
 759
 760
 761
 762
 763
 764
 765
 766
 767
 768
 769
 770
 771
 772
 773
 774
 775
 776
 777
 778
 779
 780
 781
 782
 783
 784
 785
 786
 787
 788
 789
 790
 791
 792
 793
 794
 795
 796
 797
 798
 799
 800
 801
 802
 803
 804
 805
 806
 807
 808
 809
 810
 811
 812
 813
 814
 815
 816
 817
 818
 819
 820
 821
 822
 823
 824
 825
 826
 827
 828
 829
 830
 831
 832
 833
 834
 835
 836
 837
 838
 839
 840
 841
 842
 843
 844
 845
 846
 847
 848
 849
 850
 851
 852
 853
 854
 855
 856
 857
 858
 859
 860
 861
 862
 863
 864
 865
 866
 867
 868
 869
 870
 871
 872
 873
 874
 875
 876
 877
 878
 879
 880
 881
 882
 883
 884
 885
 886
 887
 888
 889
 890
 891
 892
 893
 894
 895
 896
 897
 898
 899
 900
 901
 902
 903
 904
 905
 906
 907
 908
 909
 910
 911
 912
 913
 914
 915
 916
 917
 918
 919
 920
 921
 922
 923
 924
 925
 926
 927
 928
 929
 930
 931
 932
 933
 934
 935
 936
 937
 938
 939
 940
 941
 942
 943
 944
 945
 946
 947
 948
 949
 950
 951
 952
 953
 954
 955
 956
 957
 958
 959
 960
 961
 962
 963
 964
 965
 966
 967
 968
 969
 970
 971
 972
 973
 974
 975
 976
 977
 978
 979
 980
 981
 982
 983
 984
 985
 986
 987
 988
 989
 990
 991
 992
 993
 994
 995
 996
 997
 998
 999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
#!/usr/bin/ruby

require 'loggability'
require 'linguistics/en' unless defined?( Linguistics::EN )

# This file contains functions for conjugating verbs.
# 
# == Version
#
#  $Id$
# 
# == Authors
# 
# * Robert Berry <berrydigital@gmail.com>
# * Michael Granger <ged@FaerieMUD.org>
# 
# == Copyright
#    
# Based on MorphAdorner (http://morphadorner.northwestern.edu/), which is 
# licensed under the following terms:
#
# Copyright © 2006-2009 by Northwestern University. All rights reserved.
# 
# Developed by:
# Academic and Research Technologies
# Northwestern University
# http://www.it.northwestern.edu/about/departments/at/
# 
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# with the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
# 
#   Redistributions of source code must retain the above copyright notice,
#   this list of conditions and the following disclaimers.
# 
#   Redistributions in binary form must reproduce the above copyright notice,
#   this list of conditions and the following disclaimers in the documentation
#   and/or other materials provided with the distribution.
# 
#   Neither the names of Academic and Research Technologies, Northwestern
#   University, nor the names of its contributors may be used to endorse or
#   promote products derived from this Software without specific prior written
#   permission.
# 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH
# THE SOFTWARE.
# 
module Linguistics::EN::Conjugation
	extend Loggability

	# Use the Linguistics module's logger
	log_to :linguistics


	# Hash of irregular verb infinitives, read from the DATA section of the file
	IRREGULAR_VERBS = {} # :nodoc:

	# Array of doubling verbs, read from the DATA section of the file
	DOUBLING_VERBS = [] # :nodoc:


	### Return the past tense of the word
	def past_tense( person=nil )
		return self.conjugate( :past, person )
	end


	### Return the past participle of the word
	def past_participle( person=nil )
		return self.conjugate( :past_participle, person )
	end


	### Return the present tense of the word
	def present_tense( person=nil )
		return self.conjugate( :present, person )
	end


	### Return the present participle of the word
	def present_participle( person=nil )
		return self.conjugate( :present_participle, person )
	end



	### Conjugate the receiving string as an infinitive with the specified +tense+ 
	### and +person+.
	def conjugate( tense, person=nil )
		self.log.debug "Conjugating %p in %s tense, %s person" %
			[ self.to_s, tense, person || "any" ]
		person ||= :*
		verb = self.to_s.downcase

		if result = get_irregular( verb, person, tense )
			self.log.debug "  verb %p is irregular: %p" % [ verb, result ]
			return result
		end

		self.log.debug "  regular verb: conjugating by tense"
		return case tense
			when :present
				conjugate_present( verb, person )
			when :present_participle
				conjugate_present_participle( verb )
			when :past
				conjugate_past( verb )
			when :past_participle
				conjugate_past_participle( verb )
			else
				verb
			end
	end


	#######
	private
	#######

	### Conjugate the specified +verb+ in the present tense in the given +person+. The
	### only +person+ that is 
	def conjugate_present( verb, person=:third_person_singular )
		return verb unless person == :third_person_singular

		case verb
		when /(ch|s|sh|x|z)$/
			return verb + 'es'
		when /(ay|ey|oy|uy)$/
			return verb + 's'
		when /[^aeiou]y$/
			return verb[ 0..-2 ] + 'ies'
		else
			return verb + 's'
		end
	end


	### Convugate the given +verb+ as a present participle.
	def conjugate_present_participle( verb )
		case verb
		when /[^aeiou]e$/
			return verb[ 0..-2 ]
		when /ie$/
			return verb[ 0..-3 ] + 'y'
		when /[aou]e$/
			return verb[ 0..-2 ]
		else
			if DOUBLING_VERBS.include?( verb )
				return verb + verb[ -1 ] + 'ing'
			else
				return verb + 'ing'
			end
		end
	end


	### Conjugate the specified verb in the past tense; also used to conjugate the
	### past participle.
	def conjugate_past( verb )
		case verb
		when /e$/
			return verb + 'd'
		when /[^aeiou]y$/
			return verb[ 0..-1 ] + 'ied'
		else
			if DOUBLING_VERBS.include?( verb )
				verb = verb[ -2..-1 ] + 'ed'
			else
				return verb + 'ed'
			end
		end
	end
	alias_method :conjugate_past_participle, :conjugate_past


	#### If the given +verb+ is irregular in the given +person_ and 
	def get_irregular( verb, person, tense )
		self.log.debug "  looking for irregular verb: %p, %p person, %p tense" %
			[ verb, person, tense ]

		irregular = IRREGULAR_VERBS[ verb ] or return nil
		self.log.debug "    %p is irregular: %p, selecting %p person" %
			[ verb, irregular, person ]
		irrperson = irregular[ person ] || irregular[ :* ] or return nil
		self.log.debug "    selected %p. Using %p tense: %p" %
			[ irrperson, tense, irrperson[tense] ]
		return irrperson[ tense ]
	end


	######
	public
	######

	### Inclusion hook -- load the verb data when the module is first included.
	def self::included( mod ) # :nodoc:
		if IRREGULAR_VERBS.empty?
			self.log.debug "Loading conjunctions data."
			data = File.read( __FILE__ ).split( /^__END__$/ ).last
			irrverb_data, doublverb_data = data.split( /^#\n# Doubling Verbs.*\n#\n/, 2 )
			IRREGULAR_VERBS.replace( self.load_irregular_verbs(irrverb_data) )
			self.log.debug "  loaded %d irregular verbs" % [ IRREGULAR_VERBS.length ]

			DOUBLING_VERBS.replace( self.load_doubling_verbs(doublverb_data) )
			self.log.debug "  loaded %d doubling verbs" % [ DOUBLING_VERBS.length ]
		end

		super
	end


	### Parse irregular verbs from the given +data+, and return the resulting Hash.
	def self::load_irregular_verbs( data )
		self.log.debug "  loading irregular verbs from %d bytes of data." % [ data.length ]
		results = {}

		data.each_line do |line|
			if line =~ /^(#|\s*$)/ # Skip comments and blank lines
				self.log.debug "  skipping line: %p" % [ line ]
				next
			end

			infinitive, person, tense, conjugation = line.chomp.split( /\s+/, 4 )
			self.log.debug "  line split into: %p" %
				[[ infinitive, person, tense, conjugation ]]

			raise "malformed line: %p" % [ line ] unless infinitive && person && tense && conjugation

			results[ infinitive ] ||= {}
			results[ infinitive ][ person.to_sym ] ||= {}
			results[ infinitive ][ person.to_sym ][ tense.to_sym ] = conjugation
		end

		self.log.debug "  %d infinitives loaded." % [ results.length ]
		return results
	end


	### Load the doubling verbs from the given +data+ and return the resulting Array.
	def self::load_doubling_verbs( data )
		self.log.debug "  loading doubling verbs."
		results = []

		data.each_line do |line|
			next if line =~ /^(#|\s*$)/ # Skip comments and blank lines
			results << line.chomp
		end

		self.log.debug "  %d doubling verbs loaded." % [ results.length ]
		return results
	end


	# Register this module to the list of modules to include
	Linguistics::EN.register_extension( self )


end # module Linguistics::EN::Conjugation

__END__
#
# Irregular verbs (from MorphAdorner's irregularverbs.txt)
# 
arise	*	past	arose
arise	*	past_participle	arisen
awake	*	past	awoke
awake	*	past_participle	awoken
backbite	*	past	backbit
backbite	*	past_participle	backbitten
backslide	*	past	backslid
backslide	*	past_participle	backslid
be	*	past	was
be	*	past	were
be	*	past_participle	been
be	*	past_participle	been
be	*	present	are
be	*	present_participle	being
be	first_person_singular	past	was
be	first_person_singular	present	am
be	third_person_singular	past	was
be	third_person_singular	present	is
bear	*	past	bore
bear	*	past_participle	borne
beat	*	past	beat
beat	*	past_participle	beaten
become	*	past	became
become	*	past_participle	become
befall	*	past	befell
befall	*	past_participle	befallen
beget	*	past	begat
beget	*	past_participle	begot
begin	*	past	began
begin	*	past_participle	begun
bend	*	past	bent
bend	*	past_participle	bent
beset	*	past	beset
beset	*	past_participle	beset
bet	*	past	bet
bet	*	past_participle	bet
betake	*	past	betook
betake	*	past_participle	betaken
bethink	*	past	bethought
bethink	*	past_participle	bethought
bid	*	past	bid|bade
bid	*	past_participle	bid|bidden
bind	*	past	bound
bind	*	past_participle	bound
bite	*	past	bit
bite	*	past_participle	bitten
bleed	*	past	bled
bleed	*	past_participle	bled
blow	*	past	blew
blow	*	past_participle	blown
break	*	past	broke
break	*	past_participle	broken
breed	*	past	bred
breed	*	past_participle	bred
bring	*	past	brought
bring	*	past_participle	brought
broadcast	*	past	broadcast
broadcast	*	past_participle	broadcast
browbeat	*	past	browbeat
browbeat	*	past_participle	browbeaten
build	*	past	built
build	*	past_participle	built
build-up	*	past	built-up
build-up	*	past_participle	built-up
burst	*	past	burst
burst	*	past_participle	burst
buy	*	past	bought
buy	*	past_participle	bought
carry-out	*	past	carried-out
carry-out	*	past_participle	carried-out
cast	*	past	cast
cast	*	past_participle	cast
catch	*	past	caught
catch	*	past_participle	caught
choose	*	past	chose
choose	*	past_participle	chosen
cling	*	past	clung
cling	*	past_participle	clung
colorbreed	*	past	colorbred
colorbreed	*	past_participle	colorbred
come	*	past	came
come	*	past_participle	come
cost	*	past	cost
cost	*	past_participle	cost
creep	*	past	crept
creep	*	past_participle	crept
crossbreed	*	past	crossbred
crossbreed	*	past_participle	crossbred
cut	*	past	cut
cut	*	past_participle	cut
deal	*	past	dealt
deal	*	past_participle	dealt
dig	*	past	dug
dig	*	past_participle	dug
dive	*	past	dove
dive	*	past_participle	dived
do	*	past	did
do	*	past_participle	done
do	third_person_singular	present	does
draw	*	past	drew
draw	*	past_participle	drawn
drink	*	past	drank
drink	*	past_participle	drunk
drive	*	past	drove
drive	*	past_participle	driven
dye	*	present_participle	dyeing
eat	*	past	ate
eat	*	past_participle	eaten
enwind	*	past	enwound
enwind	*	past_participle	enwound
eye	*	present_participle	eyeing
fall	*	past	fell
fall	*	past_participle	fallen
fast-wind	*	past	fast-wound
fast-wind	*	past_participle	fast-wound
feed	*	past	fed
feed	*	past_participle	fed
feel	*	past	felt
feel	*	past_participle	felt
fight	*	past	fought
fight	*	past_participle	fought
find	*	past	found
find	*	past_participle	found
fit	*	past	fit
fit	*	past_participle	fit
fit-out	*	past	fitted-out
fit-out	*	past_participle	fitted-out
flee	*	past	fled
flee	*	past_participle	fled
fling	*	past	flung
fling	*	past_participle	flung
fly	*	past	flew
fly	*	past_participle	flown
forbear	*	past	forbore
forbear	*	past_participle	forborne
forbid	*	past	forbade
forbid	*	past_participle	forbidden
forecast	*	past	forecast
forecast	*	past_participle	forecast
forego	*	past	forewent
forego	*	past_participle	foregone
foreknow	*	past	foreknew
foreknow	*	past_participle	foreknown
forerun	*	past	foreran
forerun	*	past_participle	forerun
forespeak	*	past	forespoke
forespeak	*	past_participle	forespoken
foreswear	*	past	foreswore
foreswear	*	past_participle	foresworn
foretell	*	past	foretold
foretell	*	past_participle	foretold
forget	*	past	forgot
forget	*	past_participle	forgotten
forgive	*	past	forgave
forgive	*	past_participle	forgiven
forsake	*	past	forsook
forsake	*	past_participle	forsaken
forsee	*	past	forsaw
forsee	*	past_participle	forseen
freeze	*	past	froze
freeze	*	past_participle	frozen
gainsay	*	past	gainsaid
gainsay	*	past_participle	gainsaid
get	*	past	got
get	*	past_participle	gotten
give	*	past	gave
give	*	past_participle	given
go	*	past	went
go	*	past_participle	gone
go	third_person_singular	present	goes
grind	*	past	ground
grind	*	past_participle	ground
grow	*	past	grew
grow	*	past_participle	grown
hagride	*	past	hagrode
hagride	*	past_participle	hagridden
half-rise	*	past	half-rose
half-rise	*	past_participle	half-risen
halterbreak	*	past	halterbroke
halterbreak	*	past_participle	halterbroken
hamstring	*	past	hamstrung
hamstring	*	past_participle	hamstrung
hand-feed	*	past	hand-fed
hand-feed	*	past_participle	hand-fed
handwrite	*	past	handwrote
handwrite	*	past_participle	handwritten
hang	*	past	hanged|hung
hang	*	past_participle	hanged|hung
have	*	past	had
have	*	past	had
have	*	past_participle	had
have	*	past_participle	had
have	*	present	have
have	*	present_participle	having
have	third_person_singular	present	has
hear	*	past	heard
hear	*	past_participle	heard
hide	*	past	hid
hide	*	past_participle	hidden
hit	*	past	hit
hit	*	past_participle	hit
hold	*	past	held
hold	*	past_participle	held
hurt	*	past	hurt
hurt	*	past_participle	hurt
inbreed	*	past	inbred
inbreed	*	past_participle	inbred
inbring	*	past	inbrought
inbring	*	past_participle	inbrought
inlay	*	past	inlaid
inlay	*	past_participle	inlaid
inset	*	past	inset
inset	*	past_participle	inset
interbreed	*	past	interbred
interbreed	*	past_participle	interbred
intercut	*	past	intercut
intercut	*	past_participle	intercut
interlay	*	past	interlaid
interlay	*	past_participle	interlaid
interset	*	past	interset
interset	*	past_participle	interset
interweave	*	past	interwove
interweave	*	past_participle	interwoven
interwind	*	past	interwound
interwind	*	past_participle	interwound
inweave	*	past	inwove
inweave	*	past_participle	inwoven
jerry-build	*	past	jerry-built
jerry-build	*	past_participle	jerry-built
keep	*	past	kept
keep	*	past_participle	kept
kick-off	*	past	kicked-off
kick-off	*	past_participle	kicked-off
kick-off	*	present_participle	kicking-off
kneel	*	past	knelt
kneel	*	past_participle	knelt
knit	*	past	knitted
knit	*	past_participle	knitted
knit	*	present_participle	knitting
know	*	past	knew
know	*	past_participle	known
landslide	*	past	landslid
landslide	*	past_participle	landslid
lay	*	past	laid
lay	*	past_participle	laid
lead	*	past	led
lead	*	past_participle	led
leave	*	past	left
leave	*	past_participle	left
lend	*	past	lent
lend	*	past_participle	lent
let	*	past	let
let	*	past_participle	let
lie	*	past	lied|lay
lie	*	past_participle	lied|lain
light	*	past	lit
light	*	past_participle	lit
light-up	*	past	lit-up
light-up	*	past_participle	lit-up
lip-read	*	past	lip-read
lip-read	*	past_participle	lip-read
loop-up	*	past	looped-up
loop-up	*	past_participle	looped-up
lose	*	past	lost
lose	*	past_participle	lost
make	*	past	made
make	*	past_participle	made
make-out	*	past	made-out
make-out	*	past_participle	made-out
make-out	*	present_participle	making-out
mean	*	past	meant
mean	*	past_participle	meant
meet	*	past	met
meet	*	past_participle	met
misbecome	*	past	misbecame
misbecome	*	past_participle	misbecome
miscast	*	past	miscast
miscast	*	past_participle	miscast
miscut	*	past	miscut
miscut	*	past_participle	miscut
misdeal	*	past	misdealt
misdeal	*	past_participle	misdealt
misdo	*	past	misdid
misdo	*	past_participle	misdone
mishear	*	past	misheard
mishear	*	past_participle	misheard
mishit	*	past	mishit
mishit	*	past_participle	mishit
mislay	*	past	mislaid
mislay	*	past_participle	mislaid
mislead	*	past	misled
mislead	*	past_participle	misled
misread	*	past	misread
misread	*	past_participle	misread
missay	*	past	missaid
missay	*	past_participle	missaid
missend	*	past	missent
missend	*	past_participle	missent
misspeak	*	past	misspoke
misspeak	*	past_participle	misspoken
misspend	*	past	misspent
misspend	*	past_participle	misspent
misswear	*	past	misswore
misswear	*	past_participle	missworn
mistake	*	past	mistook
mistake	*	past_participle	mistaken
misteach	*	past	mistaught
misteach	*	past_participle	mistaught
mistell	*	past	mistold
mistell	*	past_participle	mistold
misthink	*	past	misthought
misthink	*	past_participle	misthought
misunderstand	*	past	misunderstood
misunderstand	*	past_participle	misunderstood
miswear	*	past	miswore
miswear	*	past_participle	misworn
miswed	*	past	miswed
miswed	*	past_participle	miswed
miswrite	*	past	miswrote
miswrite	*	past_participle	miswritten
offset	*	past	offset
offset	*	past_participle	offset
outbid	*	past	outbid
outbid	*	past_participle	outbid
outbreed	*	past	outbred
outbreed	*	past_participle	outbred
outdo	*	past	outdid
outdo	*	past_participle	outdone
outdo	third_person_singular	present	outdoes
outdraw	*	past	outdrew
outdraw	*	past_participle	outdrawn
outdrink	*	past	outdrank
outdrink	*	past_participle	outdrunk
outdrive	*	past	outdrove
outdrive	*	past_participle	outdriven
outfight	*	past	outfought
outfight	*	past_participle	outfought
outfly	*	past	outflew
outfly	*	past_participle	outflown
outgrow	*	past	outgrew
outgrow	*	past_participle	outgrown
outlay	*	past	outlaid
outlay	*	past_participle	outlaid
outride	*	past	outrode
outride	*	past_participle	outridden
outrun	*	past	outran
outrun	*	past_participle	outrun
outsee	*	past	outsaw
outsee	*	past_participle	outseen
outsell	*	past	outsold
outsell	*	past_participle	outsold
outshoot	*	past	outshot
outshoot	*	past_participle	outshot
outsing	*	past	outsang
outsing	*	past_participle	outsung
outsit	*	past	outsat
outsit	*	past_participle	outsat
outsleep	*	past	outslept
outsleep	*	past_participle	outslept
outspeak	*	past	outspoke
outspeak	*	past_participle	outspoken
outspeed	*	past	outsped
outspeed	*	past_participle	outsped
outspend	*	past	outspent
outspend	*	past_participle	outspent
outspin	*	past	outspun
outspin	*	past_participle	outspun
outspring	*	past	outsprang
outspring	*	past_participle	outsprung
outstand	*	past	outstood
outstand	*	past_participle	outstood
outswear	*	past	outswore
outswear	*	past_participle	outsworn
outswim	*	past	outswam
outswim	*	past_participle	outswum
outtell	*	past	outtold
outtell	*	past_participle	outtold
outthink	*	past	outthought
outthink	*	past_participle	outthought
outthrow	*	past	outthrew
outthrow	*	past_participle	outthrown
outwear	*	past	outwore
outwear	*	past_participle	outworn
outwind	*	past	outwound
outwind	*	past_participle	outwound
outwrite	*	past	outwrote
outwrite	*	past_participle	outwritten
overbear	*	past	overbore
overbear	*	past_participle	overborne
overbid	*	past	overbid
overbid	*	past_participle	overbid
overbreed	*	past	overbred
overbreed	*	past_participle	overbred
overbuild	*	past	overbuilt
overbuild	*	past_participle	overbuilt
overbuy	*	past	overbought
overbuy	*	past_participle	overbought
overcast	*	past	overcast
overcast	*	past_participle	overcast
overcome	*	past	overcame
overcome	*	past_participle	overcome
overcut	*	past	overcut
overcut	*	past_participle	overcut
overdo	*	past	overdid
overdo	*	past_participle	overdone
overdraw	*	past	overdrew
overdraw	*	past_participle	overdrawn
overdrink	*	past	overdrank
overdrink	*	past_participle	overdrunk
overdrive	*	past	overdrove
overdrive	*	past_participle	overdriven
overeat	*	past	overate
overeat	*	past_participle	overeaten
overfeed	*	past	overfed
overfeed	*	past_participle	overfed
overhang	*	past	overhung
overhang	*	past_participle	overhung
overhear	*	past	overheard
overhear	*	past_participle	overheard
overlay	*	past	overlaid
overlay	*	past_participle	overlaid
overlie	*	past	overlay
overlie	*	past_participle	overlain
overpay	*	past	overpaid
overpay	*	past_participle	overpaid
override	*	past	overrode
override	*	past_participle	overridden
overrun	*	past	overran
overrun	*	past_participle	overrun
oversee	*	past	oversaw
oversee	*	past_participle	overseen
oversell	*	past	oversold
oversell	*	past_participle	oversold
overset	*	past	overset
overset	*	past_participle	overset
overshoot	*	past	overshot
overshoot	*	past_participle	overshot
oversleep	*	past	overslept
oversleep	*	past_participle	overslept
overslide	*	past	overslid
overslide	*	past_participle	overslid
oversling	*	past	overslung
oversling	*	past_participle	overslung
overspeak	*	past	overspoke
overspeak	*	past_participle	overspoken
overspeed	*	past	oversped
overspeed	*	past_participle	oversped
overspend	*	past	overspent
overspend	*	past_participle	overspent
overspin	*	past	overspun
overspin	*	past_participle	overspun
overspread	*	past	overspread
overspread	*	past_participle	overspread
overspring	*	past	oversprang
overspring	*	past_participle	oversprung
overstand	*	past	overstood
overstand	*	past_participle	overstood
overstride	*	past	overstrode
overstride	*	past_participle	overstridden
overstrike	*	past	overstruck
overstrike	*	past_participle	overstruck
overstring	*	past	overstrung
overstring	*	past_participle	overstrung
overstrive	*	past	overstrove
overstrive	*	past_participle	overstriven
overtake	*	past	overtook
overtake	*	past_participle	overtaken
overthink	*	past	overthought
overthink	*	past_participle	overthought
overthrow	*	past	overthrew
overthrow	*	past_participle	overthrown
overwear	*	past	overwore
overwear	*	past_participle	overworn
overwind	*	past	overwound
overwind	*	past_participle	overwound
overwrite	*	past	overwrote
overwrite	*	past_participle	overwritten
pay	*	past	paid
pay	*	past_participle	paid
picnic	*	past	picnicked
picnic	*	past_participle	picnicked
picnic	*	present_participle	picnicking
pie	*	present_participle	pieing
plead	*	past	pleaded
plead	*	past_participle	pled
prebuild	*	past	prebuilt
prebuild	*	past_participle	prebuilt
predo	*	past	predid
predo	*	past_participle	predone
predo	third_person_singular	present	predoes
premake	*	past	premade
premake	*	past_participle	premade
prepay	*	past	prepaid
prepay	*	past_participle	prepaid
presell	*	past	presold
presell	*	past_participle	presold
preset	*	past	preset
preset	*	past_participle	preset
preshrink	*	past	preshrank
preshrink	*	past_participle	preshrunk
presplit	*	past	presplit
presplit	*	past_participle	presplit
proofread	*	past	proofread
proofread	*	past_participle	proofread
prove	*	past	proved
prove	*	past_participle	proven
put	*	past	put
put	*	past_participle	put
quick-freeze	*	past	quick-froze
quick-freeze	*	past_participle	quick-frozen
quickfreeze	*	past	quickfroze
quickfreeze	*	past_participle	quickfrozen
quit	*	past	quit
quit	*	past_participle	quit
re-cast	*	past	re-cast
re-cast	*	past_participle	re-cast
re-lay	*	past	re-laid
re-lay	*	past_participle	re-laid
re-make	*	past	re-made
re-make	*	past_participle	re-made
re-sell	*	past	re-sold
re-sell	*	past_participle	re-sold
re-tell	*	past	re-told
re-tell	*	past_participle	re-told
read	*	past	read
read	*	past_participle	read
rebid	*	past	rebid
rebid	*	past_participle	rebid
rebind	*	past	rebound
rebind	*	past_participle	rebound
rebroadcast	*	past	rebroadcast
rebroadcast	*	past_participle	rebroadcast
rebuild	*	past	rebuilt
rebuild	*	past_participle	rebuilt
recast	*	past	recast
recast	*	past_participle	recast
recut	*	past	recut
recut	*	past_participle	recut
redeal	*	past	redealt
redeal	*	past_participle	redealt
redo	*	past	redid
redo	*	past_participle	redone
redo	third_person_singular	present	redoes
redraw	*	past	redrew
redraw	*	past_participle	redrawn
refit	*	past	refit
refit	*	past_participle	refit
regrind	*	past	reground
regrind	*	past_participle	reground
regrow	*	past	regrew
regrow	*	past_participle	regrown
rehang	*	past	rehung
rehang	*	past_participle	rehung
rehear	*	past	reheard
rehear	*	past_participle	reheard
reknit	*	past	reknitted
reknit	*	past_participle	reknitted
reknit	*	present_participle	reknitting
relay	*	past	relaid
relay	*	past_participle	relaid
remake	*	past	remade
remake	*	past_participle	remade
repay	*	past	repaid
repay	*	past_participle	repaid
rerun	*	past	reran
rerun	*	past_participle	rerun
resell	*	past	resold
resell	*	past_participle	resold
resend	*	past	resent
resend	*	past_participle	resent
reset	*	past	reset
reset	*	past_participle	reset
resew	*	past	resewed
resew	*	past_participle	resewn
retake	*	past	retook
retake	*	past_participle	retaken
reteach	*	past	retaught
reteach	*	past_participle	retaught
retear	*	past	retore
retear	*	past_participle	retorn
retell	*	past	retold
retell	*	past_participle	retold
rethink	*	past	rethought
rethink	*	past_participle	rethought
retread	*	past	retrod
retread	*	past_participle	retrodden
retrofit	*	past	retrofit
retrofit	*	past_participle	retrofit
reweave	*	past	rewove
reweave	*	past_participle	rewoven
rewed	*	past	rewed
rewed	*	past_participle	rewed
rewet	*	past	rewet
rewet	*	past_participle	rewet
rewin	*	past	rewon
rewin	*	past_participle	rewon
rewind	*	past	rewound
rewind	*	past_participle	rewound
rewrite	*	past	rewrote
rewrite	*	past_participle	rewritten
rid	*	past	rid
rid	*	past_participle	rid
ride	*	past	rode
ride	*	past_participle	ridden
ring	*	past	rang
ring	*	past_participle	rung
rise	*	past	rose
rise	*	past_participle	risen
run	*	past	ran
run	*	past_participle	run
sand-cast	*	past	sand-cast
sand-cast	*	past_participle	sand-cast
sandcast	*	past	sandcast
sandcast	*	past_participle	sandcast
say	*	past	said
say	*	past_participle	said
see	*	past	saw
see	*	past_participle	seen
seek	*	past	sought
seek	*	past_participle	sought
self-feed	*	past	self-fed
self-feed	*	past_participle	self-fed
selffeed	*	past	selffed
selffeed	*	past_participle	selffed
sell	*	past	sold
sell	*	past_participle	sold
send	*	past	sent
send	*	past_participle	sent
set	*	past	set
set	*	past_participle	set
sew	*	past	sewed
sew	*	past_participle	sewn
shake	*	past	shook
shake	*	past_participle	shaken
shear	*	past	shore
shear	*	past_participle	shorn
shed	*	past	shed
shed	*	past_participle	shed
shoot	*	past	shot
shoot	*	past_participle	shot
show	*	past	showed
show	*	past_participle	shown
shrink	*	past	shrank
shrink	*	past_participle	shrunk
shut	*	past	shut
shut	*	past_participle	shut
sight-read	*	past	sight-read
sight-read	*	past_participle	sight-read
sightread	*	past	sightread
sightread	*	past_participle	sightread
sign-on	*	past	signed-on
sign-on	*	past_participle	signed-on
sing	*	past	sang
sing	*	past_participle	sung
sink	*	past	sank
sink	*	past_participle	sunk
sit	*	past	sat
sit	*	past_participle	sat
skywrite	*	past	skywrote
skywrite	*	past_participle	skywritten
slay	*	past	slew
slay	*	past_participle	slain
sleep	*	past	slept
sleep	*	past_participle	slept
slide	*	past	slid
slide	*	past_participle	slid
sling	*	past	slung
sling	*	past_participle	slung
slit	*	past	slit
slit	*	past_participle	slit
smite	*	past	smote
smite	*	past_participle	smitten
speak	*	past	spoke
speak	*	past_participle	spoken
speed	*	past	sped
speed	*	past_participle	sped
spend	*	past	spent
spend	*	past_participle	spent
spin	*	past	spun
spin	*	past_participle	spun
spit	*	past	spat
spit	*	past_participle	spat
split	*	past	split
split	*	past_participle	split
spoon-feed	*	past	spoon-fed
spoon-feed	*	past_participle	spoon-fed
spoonfeed	*	past	spoonfed
spoonfeed	*	past_participle	spoonfed
spread	*	past	spread
spread	*	past_participle	spread
spring	*	past	sprang
spring	*	past_participle	sprung
stall-feed	*	past	stall-fed
stall-feed	*	past_participle	stall-fed
stallfeed	*	past	stallfed
stallfeed	*	past_participle	stallfed
stand	*	past	stood
stand	*	past_participle	stood
steal	*	past	stole
steal	*	past_participle	stolen
step-up	*	past	stepped-up
step-up	*	past_participle	stepped-up
stepup	*	past	steppedup
stepup	*	past_participle	steppedup
stick	*	past	stuck
stick	*	past_participle	stuck
sting	*	past	stung
sting	*	past_participle	stung
stink	*	past	stank
stink	*	past_participle	stunk
stride	*	past	strode
stride	*	past_participle	stridden
strike	*	past	struck
strike	*	past_participle	struck
string	*	past	strung
string	*	past_participle	strung
strive	*	past	strove
strive	*	past_participle	striven
sub-let	*	past	sub-let
sub-let	*	past_participle	sub-let
sublet	*	past	sublet
sublet	*	past_participle	sublet
swear	*	past	swore
swear	*	past_participle	sworn
sweep	*	past	swept
sweep	*	past_participle	swept
swell	*	past	swelled
swell	*	past_participle	swollen
swim	*	past	swam
swim	*	past_participle	swum
swing	*	past	swung
swing	*	past_participle	swung
take	*	past	took
take	*	past_participle	taken
teach	*	past	taught
teach	*	past_participle	taught
tear	*	past	tore
tear	*	past_participle	torn
telecast	*	past	telecast
telecast	*	past_participle	telecast
tell	*	past	told
tell	*	past_participle	told
test-drive	*	past	test-drove
test-drive	*	past_participle	test-driven
test-fly	*	past	test-flew
test-fly	*	past_participle	test-flown
testdrive	*	past	testdrove
testdrive	*	past_participle	testdriven
testfly	*	past	testflew
testfly	*	past_participle	testflown
think	*	past	thought
think	*	past_participle	thought
thring	*	past	throng
thring	*	past_participle	throng
throw	*	past	threw
throw	*	past_participle	thrown
thrust	*	past	thrust
thrust	*	past_participle	thrust
trail-off	*	past	trailed-off
trail-off	*	past_participle	trailed-off
tread	*	past	trod
tread	*	past_participle	trodden
troubleshoot	*	past	troubleshot
troubleshoot	*	past_participle	troubleshot
typecast	*	past	typecast
typecast	*	past_participle	typecast
typewrite	*	past	typewrote
typewrite	*	past_participle	typewritten
under-write	*	past	under-wrote
under-write	*	past_participle	under-written
underbid	*	past	underbid
underbid	*	past_participle	underbid
underbuy	*	past	underbought
underbuy	*	past_participle	underbought
undercut	*	past	undercut
undercut	*	past_participle	undercut
underfeed	*	past	underfed
underfeed	*	past_participle	underfed
undergo	*	past	underwent
undergo	*	past_participle	undergone
undergo	third_person_singular	present	undergoes
underrun	*	past	underran
underrun	*	past_participle	underrun
undersell	*	past	undersold
undersell	*	past_participle	undersold
undershoot	*	past	undershot
undershoot	*	past_participle	undershot
underspend	*	past	underspent
underspend	*	past_participle	underspent
understand	*	past	understood
understand	*	past_participle	understood
undertake	*	past	undertook
undertake	*	past_participle	undertaken
underthrust	*	past	underthrust
underthrust	*	past_participle	underthrust
underwrite	*	past	underwrote
underwrite	*	past_participle	underwritten
undo	*	past	undid
undo	*	past_participle	undone
undo	third_person_singular	present	undoes
undraw	*	past	undrew
undraw	*	past_participle	undrawn
unfreeze	*	past	unfroze
unfreeze	*	past_participle	unfrozen
unhang	*	past	unhung
unhang	*	past_participle	unhung
unhide	*	past	unhid
unhide	*	past_participle	unhidden
unhold	*	past	unheld
unhold	*	past_participle	unheld
unknit	*	past	unknitted
unknit	*	past_participle	unknitted
unknit	*	present_participle	unknitting
unlay	*	past	unlaid
unlay	*	past_participle	unlaid
unmake	*	past	unmade
unmake	*	past_participle	unmade
unsay	*	past	unsaid
unsay	*	past_participle	unsaid
unsew	*	past	unsewed
unsew	*	past_participle	unsewn
unsling	*	past	unslung
unsling	*	past_participle	unslung
unspin	*	past	unspun
unspin	*	past_participle	unspun
unstick	*	past	unstuck
unstick	*	past_participle	unstuck
unstring	*	past	unstrung
unstring	*	past_participle	unstrung
unswear	*	past	unswore
unswear	*	past_participle	unsworn
unteach	*	past	untaught
unteach	*	past_participle	untaught
unthink	*	past	unthought
unthink	*	past_participle	unthought
unweave	*	past	unwove
unweave	*	past_participle	unwoven
unwind	*	past	unwound
unwind	*	past_participle	unwound
unwrite	*	past	unwrote
unwrite	*	past_participle	unwritten
uphold	*	past	upheld
uphold	*	past_participle	upheld
upset	*	past	upset
upset	*	past_participle	upset
use-up	*	past	used-up
use-up	*	past_participle	used-up
use-up	*	present_participle	using-up
wake	*	past	woke
wake	*	past_participle	woken
waylay	*	past	waylaid
waylay	*	past_participle	waylaid
wear	*	past	wore
wear	*	past_participle	worn
weave	*	past	wove
weave	*	past_participle	woven
wed	*	past	wed
wed	*	past_participle	wed
weep	*	past	wept
weep	*	past_participle	wept
welcome	*	past	welcomed
welcome	*	past_participle	welcomed
wet	*	past	wet
wet	*	past_participle	wet
win	*	past	won
win	*	past_participle	won
wind	*	past	wound
wind	*	past_participle	wound
withdraw	*	past	withdrew
withdraw	*	past_participle	withdrawn
withhold	*	past	withheld
withhold	*	past_participle	withheld
withstand	*	past	withstood
withstand	*	past_participle	withstood
wring	*	past	wrung
wring	*	past_participle	wrung
write	*	past	wrote
write	*	past_participle	written
wrought	*	past	wrought
wrought	*	past_participle	wrought

#
# Doubling Verbs (from MorphAdorner's doublingverbs.txt)
#
abat
abet
abhor
abut
accur
acquit
adlib
admit
aerobat
aerosol
agendaset
airdrop
allot
alot
anagram
annul
appal
apparel
armbar
aver
babysit
backdrop
backfil
backflip
backlog
backpedal
backslap
backstab
bag
balfun
ballot
ban
bar
barbel
bareleg
barrel
bat
bayonet
becom
bed
bedevil
bedwet
beenhop
befit
befog
beg
beget
begin
bejewel
bemedal
benefit
benum
beset
besot
bestir
bet
betassel
bevel
bewig
bib
bid
billet
bin
bip
bit
bitmap
blab
blackleg
blag
blam
blan
blat
bles
blim
blip
blob
bloodlet
blot
blub
blur
bob
bobsled
bodypop
bog
boobytrap
booksel
bootleg
bop
bot
bowel
bracket
brag
brig
brim
bud
buffet
bug
bullshit
bum
bun
bur
bus
but
cab
cabal
cam
can
cancel
cap
caracol
caravan
carburet
carnap
carol
carpetbag
castanet
cat
catcal
catnap
cavil
chan
chanel
channel
chap
char
chargecap
chat
chin
chip
chir
chirrup
chisel
chop
chug
chum
chur
clam
clap
clearcut
clip
clodhop
clog
clop
closet
clot
club
cob
cobweb
cod
coif
com
combat
comit
commit
compel
con
concur
confab
confer
confiscat
control
cooccur
cop
coprogram
coquet
coral
corbel
corefer
corral
corun
cosset
costar
cotransmit
councel
council
counsel
counterplot
courtmartial
crab
cram
crap
crib
crop
crossleg
cub
cudgel
cum
cun
cup
curet
cut
dab
dag
dam
dan
dap
daysit
deadpan
debag
debar
debug
decommit
decontrol
defer
defog
deg
degas
degazet
dehul
deinstal
demit
demob
demur
den
denet
depig
depip
depit
deprogram
der
derig
deskil
deter
devil
diagram
dial
dib
dig
dim
din
dip
disbar
disbud
discomfit
disembed
disembowel
dishevel
disinter
dispel
disprefer
distil
dog
dognap
don
doorstep
dot
dowel
drag
drat
driftnet
drip
drivel
drop
drub
drug
drum
dub
duel
dun
dybbuk
earwig
eavesdrop
ecolabel
egotrip
eitherspigot
electroblot
embed
emit
empanel
enamel
endlabel
endtrim
enrol
enthral
entrammel
entrap
enwrap
equal
equip
estop
exaggerat
excel
expel
extol
fag
fan
farewel
fat
featherbed
feget
fet
fib
fig
fin
fingerspel
fingertip
fit
flab
flag
flap
flip
flit
flog
flop
fob
focus
fog
footbal
footslog
fop
forbid
forget
format
fortunetel
fot
foxtrot
frag
freefal
fret
frig
frip
frog
frug
fuel
fufil
fulfil
fullyfit
fun
funnel
fur
furpul
gab
gad
gaffe
gag
gam
gambol
gap
garot
garrot
gas
gat
gel
gen
get
giftwrap
gig
gimbal
gin
glam
glenden
glendin
globetrot
glug
glut
gob
goldpan
golliwog
goostep
gossip
grab
gravel
grid
grin
grip
grit
groundhop
grovel
grub
gum
gun
gunrun
gut
gyp
haircut
ham
han
handbag
handicap
handknit
handset
hap
hareleg
hat
headbut
hedgehop
hem
hen
hiccup
highwal
hip
hit
hobnob
hog
hop
horsewhip
hostel
hot
hotdog
hovel
hug
hum
humbug
hup
hushkit
hut
idyl
illfit
imbed
immunblot
immunoblot
impannel
impel
imperil
incur
infer
infil
inflam
initial
input
inset
inspan
instal
instil
inter
interbed
intercrop
intercut
interfer
intermit
interwar
jab
jag
jam
japan
jar
jawdrop
jet
jetlag
jewel
jib
jig
jitterbug
job
jog
jogtrot
jot
jug
jut
ken
kennel
kid
kidnap
kip
kissogram
kit
knap
kneecap
knit
knob
knot
kor
kris
label
lag
lam
lap
lavel
leafcut
leapfrog
leg
lem
lep
let
level
libel
lid
lig
lip
lob
log
lok
lollop
longleg
lop
lowbal
lug
mackerel
mahom
man
manumit
map
mar
marshal
marvel
mat
matchwin
metal
microplan
microprogram
milksop
miscal
misclub
mishit
mislabel
misspel
mit
mob
mod
model
mohmam
monogram
mop
mothbal
mousse
mud
mug
multilevel
mum
nab
nag
nan
nap
net
nightclub
nightsit
nip
nod
nonplus
norkop
nostril
not
nut
nutmeg
occur
ocur
offput
offset
omit
ommit
onlap
outbid
outcrop
outfit
outgas
outgeneral
outgun
outhit
outjab
outplan
outpol
outpul
output
outrun
outsel
outship
outshop
outsin
outspan
outstrip
outswel
outwit
overbid
overcal
overcommit
overcontrol
overcrap
overcrop
overdub
overfil
overfit
overhat
overhit
overlap
overman
overmodel
overpedal
overpet
overplot
overrun
oversel
overshop
overstep
overtip
overtop
overwet
overwil
pad
paintbal
pan
panel
paperclip
par
parallel
parcel
partiescal
pat
patrol
pedal
peewit
peg
pen
pencil
pep
permit
pet
petal
pettifog
photoset
photostat
phototypeset
phut
picket
pig
pilot
pin
pinbal
pip
pipefit
pipet
pit
plan
plit
plod
plop
plot
plug
plumet
plummet
pod
policyset
polyfil
ponytrek
pop
pot
pouf
pram
prebag
predistil
predril
prefer
prefil
preinstal
prep
preplan
preprogram
preset
prim
prizewin
prod
profer
prog
program
prop
propel
pub
pug
pummel
pun
pup
pushfit
put
quarel
quarrel
quickskim
quickstep
quickwit
quip
quit
quivertip
quiz
rabbit
rabit
radiolabel
rag
ram
ramrod
rap
rat
ratecap
ravel
readmit
reallot
rebel
rebid
rebin
rebut
recal
recap
rechannel
recommit
recrop
recur
recut
red
redig
redril
reemit
refer
refil
refit
reflag
reformat
refret
refuel
reget
regret
rehab
reinstal
reinter
rejig
rekit
reknot
relabel
relap
relet
rem
remap
remetal
remit
remodel
reoccur
rep
repastel
repel
repin
replan
replot
replug
repol
repot
reprogram
rerefer
rerig
rerol
rerun
resel
reset
resignal
resit
reskil
reskin
restal
resubmit
ret
retel
retop
retransfer
retransmit
retrim
retrofit
rev
revel
revet
rewrap
rib
richochet
ricochet
rid
rig
rim
ringlet
rip
rit
rival
rivet
roadrun
rob
rocket
rod
roset
rosin
rot
rowel
rub
run
runnel
rut
sab
sad
sag
sandbag
sap
scab
scalpel
scam
scan
scar
scat
schlep
scrag
scram
scrap
scrat
scrub
scrum
scud
scum
scur
semicontrol
semiskil
semiskim
sentinel
set
shag
shall
sham
shed
shim
shin
ship
shir
shit
shlap
shop
shopfit
shortfal
shot
shovel
shred
shrinkwrap
shrivel
shrug
shun
shut
sideslip
sidestep
signal
sin
sinbin
sip
sit
skid
skim
skin
skip
skir
skrag
slab
slag
slam
slap
sled
slim
slip
slit
slob
slog
slop
slot
slowclap
slug
slum
slur
smit
smut
snag
snap
snip
snivel
snog
snorkel
snowcem
snub
snug
sob
sod
softpedal
son
sop
spam
span
spar
spat
spiderweb
spin
spiral
spit
splat
split
spot
sprag
spraygun
sprig
springtip
spud
spur
squat
squirrel
stab
stag
star
stem
sten
stencil
step
stet
stir
stop
storytel
strap
strim
strip
strop
strug
strum
strut
stub
stud
stun
sub
subcrop
sublet
submit
subset
suedetrim
sulfuret
sum
summit
sun
suntan
sup
superad
superchil
swab
swag
swan
swap
swat
swig
swim
swivel
swot
tab
tag
tan
tansfer
tap
tar
tassel
tat
tefer
teleshop
tendril
terschel
th'strip
thermal
thermostat
thin
throb
thrum
thud
thug
tightlip
tin
tinsel
tip
tittup
toecap
tog
tom
tomorrow
top
tot
total
towel
traget
trainspot
tram
trammel
transfer
tranship
transit
transmit
transship
trap
travel
trek
trendset
trepan
trim
trip
tripod
trod
trog
trot
trousseaushop
trowel
trup
tub
tug
tunnel
tup
tut
twat
twig
twin
twit
typeset
tyset
unban
unbar
unbob
uncap
unclip
uncompel
undam
underbid
underbil
undercut
underfit
underlet
underman
underpin
underskil
unfit
unfulfil
unknot
unlip
unlywil
unman
unpad
unpeg
unpin
unplug
unravel
unrip
unrol
unscrol
unsnap
unstal
unstep
unstir
unstop
untap
unwrap
unzip
up
upset
upskil
upwel
ven
verbal
vet
victual
vignet
wad
wag
wainscot
wan
war
waterfal
waterfil
waterlog
weasel
web
wed
wet
wham
whet
whip
whir
whiteskin
whiz
whop
whup
wig
wildcat
will
win
windmil
wiretap
wit
woodchop
woodcut
wor
worship
wrap
yak
yap
yarnspin
yen
yip
yodel
zag
zap
zig
zigzag
zip
ztrip