From f831c02faa4acfba08df5e18d3bb6aa3d1dd61d3 Mon Sep 17 00:00:00 2001 From: aarne Date: Thu, 20 Jan 2005 21:33:38 +0000 Subject: [PATCH] English irregular verbs --- lib/resource/english/MkVerbs.hs | 49 +++++++ lib/resource/english/MorphoEng.gf | 51 +++++++- lib/resource/english/VerbsEng.gf | 177 +++++++++++++++++++++++++ lib/resource/english/verbs.txt | 175 +++++++++++++++++++++++++ lib/resource/frequent.txt | 210 ++++++++++++++++++++++++++++++ 5 files changed, 658 insertions(+), 4 deletions(-) create mode 100644 lib/resource/english/MkVerbs.hs create mode 100644 lib/resource/english/VerbsEng.gf create mode 100644 lib/resource/english/verbs.txt create mode 100644 lib/resource/frequent.txt diff --git a/lib/resource/english/MkVerbs.hs b/lib/resource/english/MkVerbs.hs new file mode 100644 index 000000000..0efd9a923 --- /dev/null +++ b/lib/resource/english/MkVerbs.hs @@ -0,0 +1,49 @@ +module Main where + +import List + +-- create a GF file from a word form list: +-- one entry per line, newline or tab separated; +-- variants separated by / +-- comments are lines starting with -- +-- example line: bid bid/bade bid/bidden +-- example resource: http://www2.gsu.edu/~wwwesl/egw/verbs.htm + +-- parameters, depending on language + +infile = "verbs.txt" +outfile = "VerbsEng.gf" +preamble = + "resource VerbsEng = open ResourceEng, MorphoEng in {\n" ++ + " oper vIrreg : Str -> Str -> Str -> V = \\x,y,z ->\n" ++ + " mkVerbIrreg x y z ** {s1 = [] ; lock_V = <>} ;\n\n" +oper = "vIrreg" +cat = "V" +name s = s ++ "_V" + +ending = "}\n" + +main :: IO () +main = do + ss <- readFile infile >>= return . filter (not . null) . lines + writeFile outfile preamble + mapM_ (appendFile outfile . mkOne . words) (filter notComment ss) + appendFile outfile ending + +notComment = (/="--") . take 2 + +mkOne :: [String] -> String +mkOne ws@(v:_) = + " oper " ++ name v ++ " : " ++ cat ++ " = " ++ + oper ++ " " ++ unwords (map arg ws) ++ " ;\n" + where + arg w = case variants w of + [s] -> quote s + vs -> "(variants {" ++ + unwords (intersperse ";" (map quote vs)) ++ "})" + quote s = "\"" ++ s ++ "\"" + variants = chopBy '/' + +chopBy c s = case span (/= c) s of + (w1,_:w2) -> w1 : chopBy c w2 + (w1,_) -> [w1] diff --git a/lib/resource/english/MorphoEng.gf b/lib/resource/english/MorphoEng.gf index af01bc89a..7924aa6af 100644 --- a/lib/resource/english/MorphoEng.gf +++ b/lib/resource/english/MorphoEng.gf @@ -11,6 +11,23 @@ resource MorphoEng = TypesEng ** open Prelude, (Predef=Predef) in { +--2 Phonology +-- +-- To regulate the use of endings for both nouns, adjectives, and verbs: + +oper + y2ie : Str -> Str -> Str = \fly,s -> + let y = last fly in + case y of { + "a" => fly + "s" ; + "e" => fly + "s" ; + "o" => fly + "s" ; + "u" => fly + "s" ; + _ => init fly ++ "ies" + } ; + + + --2 Nouns -- -- For conciseness and abstraction, we define a worst-case macro for @@ -165,6 +182,32 @@ oper } } ; +-- This is what we use to derive the irregular forms in almost all cases + + mkVerbIrreg : (_,_,_ : Str) -> VerbP3 = \bite,bit,bitten -> + let bites = case last bite of { + "y" => y2ie bite "s" ; + "s" => init bite + "es" ; + _ => bite + "s" + } + in mkVerbP3 bite bites bit bitten ; + +-- This is used to derive regular forms. + + mkVerbReg : Str -> VerbP3 = \soak -> + let + soaks = case last soak of { + "y" => y2ie soak "s" ; + "s" => init soak + "es" ; + _ => soak + "s" + } ; + soaked = case last soak of { + "e" => init soak + "s" ; + _ => soak + "ed" + } + in + mkVerbP3 soak soaks soaked soaked ; + mkVerb : (_,_,_ : Str) -> VerbP3 = \ring,rang,rung -> mkVerbP3 ring (ring + "s") rang rung ; @@ -181,10 +224,10 @@ oper mkVerbP3 (cr + "y") (cr + "ies") (cr + "ied") (cr + "ied") ; verbGen : Str -> VerbP3 = \kill -> case last kill of { - "y" => verbP3y (init "kill") ; - "e" => verbP3y (init "kill") ; - "s" => verbP3s (init "kill") ; - _ => regVerbP3 "kill" + "y" => verbP3y (init kill) ; + "e" => verbP3y (init kill) ; + "s" => verbP3s (init kill) ; + _ => regVerbP3 kill } ; verbP3Have = mkVerbP3 "have" "has" "had" "had" ; diff --git a/lib/resource/english/VerbsEng.gf b/lib/resource/english/VerbsEng.gf new file mode 100644 index 000000000..37c733953 --- /dev/null +++ b/lib/resource/english/VerbsEng.gf @@ -0,0 +1,177 @@ +resource VerbsEng = open ResourceEng, MorphoEng in { + oper vIrreg : Str -> Str -> Str -> V = \x,y,z -> + mkVerbIrreg x y z ** {s1 = [] ; lock_V = <>} ; + + oper awake_V : V = vIrreg "awake" "awoke" "awoken" ; + oper bear_V : V = vIrreg "bear" "bore" "born" ; + oper beat_V : V = vIrreg "beat" "beat" "beat" ; + oper become_V : V = vIrreg "become" "became" "become" ; + oper begin_V : V = vIrreg "begin" "began" "begun" ; + oper bend_V : V = vIrreg "bend" "bent" "bent" ; + oper beset_V : V = vIrreg "beset" "beset" "beset" ; + oper bet_V : V = vIrreg "bet" "bet" "bet" ; + oper bid_V : V = vIrreg "bid" (variants {"bid" ; "bade"}) (variants {"bid" ; "bidden"}) ; + oper bind_V : V = vIrreg "bind" "bound" "bound" ; + oper bite_V : V = vIrreg "bite" "bit" "bitten" ; + oper bleed_V : V = vIrreg "bleed" "bled" "bled" ; + oper blow_V : V = vIrreg "blow" "blew" "blown" ; + oper break_V : V = vIrreg "break" "broke" "broken" ; + oper breed_V : V = vIrreg "breed" "bred" "bred" ; + oper bring_V : V = vIrreg "bring" "brought" "brought" ; + oper broadcast_V : V = vIrreg "broadcast" "broadcast" "broadcast" ; + oper build_V : V = vIrreg "build" "built" "built" ; + oper burn_V : V = vIrreg "burn" (variants {"burned" ; "burnt"}) (variants {"burned" ; "burnt"}) ; + oper burst_V : V = vIrreg "burst" "burst" "burst" ; + oper buy_V : V = vIrreg "buy" "bought" "bought" ; + oper cast_V : V = vIrreg "cast" "cast" "cast" ; + oper catch_V : V = vIrreg "catch" "caught" "caught" ; + oper choose_V : V = vIrreg "choose" "chose" "chosen" ; + oper cling_V : V = vIrreg "cling" "clung" "clung" ; + oper come_V : V = vIrreg "come" "came" "come" ; + oper cost_V : V = vIrreg "cost" "cost" "cost" ; + oper creep_V : V = vIrreg "creep" "crept" "crept" ; + oper cut_V : V = vIrreg "cut" "cut" "cut" ; + oper deal_V : V = vIrreg "deal" "dealt" "dealt" ; + oper dig_V : V = vIrreg "dig" "dug" "dug" ; + oper dive_V : V = vIrreg "dive" (variants {"dived" ; "dove"}) "dived" ; + oper do_V : V = vIrreg "do" "did" "done" ; + oper draw_V : V = vIrreg "draw" "drew" "drawn" ; + oper dream_V : V = vIrreg "dream" (variants {"dreamed" ; "dreamt"}) (variants {"dreamed" ; "dreamt"}) ; + oper drive_V : V = vIrreg "drive" "drove" "driven" ; + oper drink_V : V = vIrreg "drink" "drank" "drunk" ; + oper eat_V : V = vIrreg "eat" "ate" "eaten" ; + oper fall_V : V = vIrreg "fall" "fell" "fallen" ; + oper feed_V : V = vIrreg "feed" "fed" "fed" ; + oper feel_V : V = vIrreg "feel" "felt" "felt" ; + oper fight_V : V = vIrreg "fight" "fought" "fought" ; + oper find_V : V = vIrreg "find" "found" "found" ; + oper fit_V : V = vIrreg "fit" "fit" "fit" ; + oper flee_V : V = vIrreg "flee" "fled" "fled" ; + oper fling_V : V = vIrreg "fling" "flung" "flung" ; + oper fly_V : V = vIrreg "fly" "flew" "flown" ; + oper forbid_V : V = vIrreg "forbid" "forbade" "forbidden" ; + oper forget_V : V = vIrreg "forget" "forgot" "forgotten" ; + oper forgive_V : V = vIrreg "forgive" "forgave" "forgiven" ; + oper forsake_V : V = vIrreg "forsake" "forsook" "forsaken" ; + oper freeze_V : V = vIrreg "freeze" "froze" "frozen" ; + oper get_V : V = vIrreg "get" "got" "gotten" ; + oper give_V : V = vIrreg "give" "gave" "given" ; + oper go_V : V = vIrreg "go" "went" "gone" ; + oper grind_V : V = vIrreg "grind" "ground" "ground" ; + oper grow_V : V = vIrreg "grow" "grew" "grown" ; + oper hang_V : V = vIrreg "hang" "hung" "hung" ; + oper hear_V : V = vIrreg "hear" "heard" "heard" ; + oper hide_V : V = vIrreg "hide" "hid" "hidden" ; + oper hit_V : V = vIrreg "hit" "hit" "hit" ; + oper hold_V : V = vIrreg "hold" "held" "held" ; + oper hurt_V : V = vIrreg "hurt" "hurt" "hurt" ; + oper keep_V : V = vIrreg "keep" "kept" "kept" ; + oper kneel_V : V = vIrreg "kneel" "knelt" "knelt" ; + oper knit_V : V = vIrreg "knit" "knit" "knit" ; + oper know_V : V = vIrreg "know" "knew" "know" ; + oper lay_V : V = vIrreg "lay" "laid" "laid" ; + oper lead_V : V = vIrreg "lead" "led" "led" ; + oper leap_V : V = vIrreg "leap" (variants {"leaped" ; "lept"}) (variants {"leaped" ; "lept"}) ; + oper learn_V : V = vIrreg "learn" (variants {"learned" ; "learnt"}) (variants {"learned" ; "learnt"}) ; + oper leave_V : V = vIrreg "leave" "left" "left" ; + oper lend_V : V = vIrreg "lend" "lent" "lent" ; + oper let_V : V = vIrreg "let" "let" "let" ; + oper lie_V : V = vIrreg "lie" "lay" "lain" ; + oper light_V : V = vIrreg "light" (variants {"lighted" ; "lit"}) "lighted" ; + oper lose_V : V = vIrreg "lose" "lost" "lost" ; + oper make_V : V = vIrreg "make" "made" "made" ; + oper mean_V : V = vIrreg "mean" "meant" "meant" ; + oper meet_V : V = vIrreg "meet" "met" "met" ; + oper misspell_V : V = vIrreg "misspell" (variants {"misspelled" ; "misspelt"}) (variants {"misspelled" ; "misspelt"}) ; + oper mistake_V : V = vIrreg "mistake" "mistook" "mistaken" ; + oper mow_V : V = vIrreg "mow" "mowed" (variants {"mowed" ; "mown"}) ; + oper overcome_V : V = vIrreg "overcome" "overcame" "overcome" ; + oper overdo_V : V = vIrreg "overdo" "overdid" "overdone" ; + oper overtake_V : V = vIrreg "overtake" "overtook" "overtaken" ; + oper overthrow_V : V = vIrreg "overthrow" "overthrew" "overthrown" ; + oper pay_V : V = vIrreg "pay" "paid" "paid" ; + oper plead_V : V = vIrreg "plead" "pled" "pled" ; + oper prove_V : V = vIrreg "prove" "proved" (variants {"proved" ; "proven"}) ; + oper put_V : V = vIrreg "put" "put" "put" ; + oper quit_V : V = vIrreg "quit" "quit" "quit" ; + oper read_V : V = vIrreg "read" "read" "read" ; + oper rid_V : V = vIrreg "rid" "rid" "rid" ; + oper ride_V : V = vIrreg "ride" "rode" "ridden" ; + oper ring_V : V = vIrreg "ring" "rang" "rung" ; + oper rise_V : V = vIrreg "rise" "rose" "risen" ; + oper run_V : V = vIrreg "run" "ran" "run" ; + oper saw_V : V = vIrreg "saw" "sawed" (variants {"sawed" ; "sawn"}) ; + oper say_V : V = vIrreg "say" "said" "said" ; + oper see_V : V = vIrreg "see" "saw" "seen" ; + oper seek_V : V = vIrreg "seek" "sought" "sought" ; + oper sell_V : V = vIrreg "sell" "sold" "sold" ; + oper send_V : V = vIrreg "send" "sent" "sent" ; + oper set_V : V = vIrreg "set" "set" "set" ; + oper sew_V : V = vIrreg "sew" "sewed" (variants {"sewed" ; "sewn"}) ; + oper shake_V : V = vIrreg "shake" "shook" "shaken" ; + oper shave_V : V = vIrreg "shave" "shaved" (variants {"shaved" ; "shaven"}) ; + oper shear_V : V = vIrreg "shear" "shore" "shorn" ; + oper shed_V : V = vIrreg "shed" "shed" "shed" ; + oper shine_V : V = vIrreg "shine" "shone" "shone" ; + oper shoe_V : V = vIrreg "shoe" "shoed" (variants {"shoed" ; "shod"}) ; + oper shoot_V : V = vIrreg "shoot" "shot" "shot" ; + oper show_V : V = vIrreg "show" "showed" (variants {"showed" ; "shown"}) ; + oper shrink_V : V = vIrreg "shrink" "shrank" "shrunk" ; + oper shut_V : V = vIrreg "shut" "shut" "shut" ; + oper sing_V : V = vIrreg "sing" "sang" "sung" ; + oper sink_V : V = vIrreg "sink" "sank" "sunk" ; + oper sit_V : V = vIrreg "sit" "sat" "sat" ; + oper sleep_V : V = vIrreg "sleep" "slept" "slept" ; + oper slay_V : V = vIrreg "slay" "slew" "slain" ; + oper slide_V : V = vIrreg "slide" "slid" "slid" ; + oper sling_V : V = vIrreg "sling" "slung" "slung" ; + oper slit_V : V = vIrreg "slit" "slit" "slit" ; + oper smite_V : V = vIrreg "smite" "smote" "smitten" ; + oper sow_V : V = vIrreg "sow" "sowed" (variants {"sowed" ; "sown"}) ; + oper speak_V : V = vIrreg "speak" "spoke" "spoken" ; + oper speed_V : V = vIrreg "speed" "sped" "sped" ; + oper spend_V : V = vIrreg "spend" "spent" "spent" ; + oper spill_V : V = vIrreg "spill" (variants {"spilled" ; "spilt"}) (variants {"spilled" ; "spilt"}) ; + oper spin_V : V = vIrreg "spin" "spun" "spun" ; + oper spit_V : V = vIrreg "spit" (variants {"spit" ; "spat"}) "spit" ; + oper split_V : V = vIrreg "split" "split" "split" ; + oper spread_V : V = vIrreg "spread" "spread" "spread" ; + oper spring_V : V = vIrreg "spring" (variants {"sprang" ; "sprung"}) "sprung" ; + oper stand_V : V = vIrreg "stand" "stood" "stood" ; + oper steal_V : V = vIrreg "steal" "stole" "stolen" ; + oper stick_V : V = vIrreg "stick" "stuck" "stuck" ; + oper sting_V : V = vIrreg "sting" "stung" "stung" ; + oper stink_V : V = vIrreg "stink" "stank" "stunk" ; + oper stride_V : V = vIrreg "stride" "strod" "stridden" ; + oper strike_V : V = vIrreg "strike" "struck" "struck" ; + oper string_V : V = vIrreg "string" "strung" "strung" ; + oper strive_V : V = vIrreg "strive" "strove" "striven" ; + oper swear_V : V = vIrreg "swear" "swore" "sworn" ; + oper sweep_V : V = vIrreg "sweep" "swept" "swept" ; + oper swell_V : V = vIrreg "swell" "swelled" (variants {"swelled" ; "swollen"}) ; + oper swim_V : V = vIrreg "swim" "swam" "swum" ; + oper swing_V : V = vIrreg "swing" "swung" "swung" ; + oper take_V : V = vIrreg "take" "took" "taken" ; + oper teach_V : V = vIrreg "teach" "taught" "taught" ; + oper tear_V : V = vIrreg "tear" "tore" "torn" ; + oper tell_V : V = vIrreg "tell" "told" "told" ; + oper think_V : V = vIrreg "think" "thought" "thought" ; + oper thrive_V : V = vIrreg "thrive" (variants {"thrived" ; "throve"}) "thrived" ; + oper throw_V : V = vIrreg "throw" "threw" "thrown" ; + oper thrust_V : V = vIrreg "thrust" "thrust" "thrust" ; + oper tread_V : V = vIrreg "tread" "trod" "trodden" ; + oper understand_V : V = vIrreg "understand" "understood" "understood" ; + oper uphold_V : V = vIrreg "uphold" "upheld" "upheld" ; + oper upset_V : V = vIrreg "upset" "upset" "upset" ; + oper wake_V : V = vIrreg "wake" "woke" "woken" ; + oper wear_V : V = vIrreg "wear" "wore" "worn" ; + oper weave_V : V = vIrreg "weave" (variants {"weaved" ; "wove"}) (variants {"weaved" ; "woven"}) ; + oper wed_V : V = vIrreg "wed" "wed" "wed" ; + oper weep_V : V = vIrreg "weep" "wept" "wept" ; + oper wind_V : V = vIrreg "wind" "wound" "wound" ; + oper win_V : V = vIrreg "win" "won" "won" ; + oper withhold_V : V = vIrreg "withhold" "withheld" "withheld" ; + oper withstand_V : V = vIrreg "withstand" "withstood" "withstood" ; + oper wring_V : V = vIrreg "wring" "wrung" "wrung" ; + oper write_V : V = vIrreg "write" "wrote" "written" ; +} diff --git a/lib/resource/english/verbs.txt b/lib/resource/english/verbs.txt new file mode 100644 index 000000000..9e1aa0286 --- /dev/null +++ b/lib/resource/english/verbs.txt @@ -0,0 +1,175 @@ +-- http://www2.gsu.edu/~wwwesl/egw/verbs.htm +awake awoke awoken +-- be was, were been +bear bore born +beat beat beat +become became become +begin began begun +bend bent bent +beset beset beset +bet bet bet +bid bid/bade bid/bidden +bind bound bound +bite bit bitten +bleed bled bled +blow blew blown +break broke broken +breed bred bred +bring brought brought +broadcast broadcast broadcast +build built built +burn burned/burnt burned/burnt +burst burst burst +buy bought bought +cast cast cast +catch caught caught +choose chose chosen +cling clung clung +come came come +cost cost cost +creep crept crept +cut cut cut +deal dealt dealt +dig dug dug +dive dived/dove dived +do did done +draw drew drawn +dream dreamed/dreamt dreamed/dreamt +drive drove driven +drink drank drunk +eat ate eaten +fall fell fallen +feed fed fed +feel felt felt +fight fought fought +find found found +fit fit fit +flee fled fled +fling flung flung +fly flew flown +forbid forbade forbidden +forget forgot forgotten +-- forego (forgo) forewent foregone +forgive forgave forgiven +forsake forsook forsaken +freeze froze frozen +get got gotten +give gave given +go went gone +grind ground ground +grow grew grown +hang hung hung +hear heard heard +hide hid hidden +hit hit hit +hold held held +hurt hurt hurt +keep kept kept +kneel knelt knelt +knit knit knit +know knew know +lay laid laid +lead led led +leap leaped/lept leaped/lept +learn learned/learnt learned/learnt +leave left left +lend lent lent +let let let +lie lay lain +light lighted/lit lighted +lose lost lost +make made made +mean meant meant +meet met met +misspell misspelled/misspelt misspelled/misspelt +mistake mistook mistaken +mow mowed mowed/mown +overcome overcame overcome +overdo overdid overdone +overtake overtook overtaken +overthrow overthrew overthrown +pay paid paid +plead pled pled +prove proved proved/proven +put put put +quit quit quit +read read read +rid rid rid +ride rode ridden +ring rang rung +rise rose risen +run ran run +saw sawed sawed/sawn +say said said +see saw seen +seek sought sought +sell sold sold +send sent sent +set set set +sew sewed sewed/sewn +shake shook shaken +shave shaved shaved/shaven +shear shore shorn +shed shed shed +shine shone shone +shoe shoed shoed/shod +shoot shot shot +show showed showed/shown +shrink shrank shrunk +shut shut shut +sing sang sung +sink sank sunk +sit sat sat +sleep slept slept +slay slew slain +slide slid slid +sling slung slung +slit slit slit +smite smote smitten +sow sowed sowed/sown +speak spoke spoken +speed sped sped +spend spent spent +spill spilled/spilt spilled/spilt +spin spun spun +spit spit/spat spit +split split split +spread spread spread +spring sprang/sprung sprung +stand stood stood +steal stole stolen +stick stuck stuck +sting stung stung +stink stank stunk +stride strod stridden +strike struck struck +string strung strung +strive strove striven +swear swore sworn +sweep swept swept +swell swelled swelled/swollen +swim swam swum +swing swung swung +take took taken +teach taught taught +tear tore torn +tell told told +think thought thought +thrive thrived/throve thrived +throw threw thrown +thrust thrust thrust +tread trod trodden +understand understood understood +uphold upheld upheld +upset upset upset +wake woke woken +wear wore worn +weave weaved/wove weaved/woven +wed wed wed +weep wept wept +wind wound wound +win won won +withhold withheld withheld +withstand withstood withstood +wring wrung wrung +write wrote written diff --git a/lib/resource/frequent.txt b/lib/resource/frequent.txt new file mode 100644 index 000000000..f4259e94a --- /dev/null +++ b/lib/resource/frequent.txt @@ -0,0 +1,210 @@ +-- A + +big +small +young +old +new +good +bad +important +dirty +clean +beautiful +ugly +clever +stupid +hot +cold +warm +long +short +thick +thin +broad +narrow + +red +blue +yellow +black +white +green +brown + + +-- V + +come +go +sleep +become +live +die +walk +run +play +read +write +watch +see +hear +listen +understand +speak +say +ask +answer +eat +drink +buy +sell +learn +know +forget +teach +like +love +hate +open +close +switch on +switch off +break +hope +fear --- +beg +wait +send +travel +leave +be born --- +find +seek +lose +win + +-- N + +man +woman +boy +girl +child +baby +cat +dog +cow +horse +sheep +bird +fish +table +chair +car +bike +train +airplane +ship +boat +shop +restaurant +bank +school +university +factory +country +city +village +house +apartment +garden +window +door +floor +ceiling +roof +student +teacher +king +queen +policeman +doctor +priest +church +boss +computer +radio +television +camera +book +newspaper +pen +stove +fridge +lamp +carpet +boot +shoe +trousers +coat +shirt +sock +cap +hat +glove + +rock +mountain +hill +sea +lake +river +harbour +moon +sun +star +planet +tree +apple +fruit +snake + +music +love +art +science +religion +industry +war +peace + +milk +wine +beer +water +bread +meat +cheese +butter +oil + +paper +wood +iron +steel +gold +silver +stone +plastic +rubber +leather + +mother +father +brother +sister +cousin + +friend +enemy