diff --git a/lib/resource/finnish/BasicFin.gf b/lib/resource/finnish/BasicFin.gf index ae24a6543..7946b9068 100644 --- a/lib/resource/finnish/BasicFin.gf +++ b/lib/resource/finnish/BasicFin.gf @@ -11,109 +11,109 @@ lin airplane_N = regN "lentokone" ; ---- answer_V2S = mkV2S (regV "answer") "to" ; - apartment_N = reg3N "asunto" "asunnon" "asuntoja" ; - apple_N = reg3N "omena" "omenan" "omenoita" ; - art_N = reg3N "taide" "taiteen" "taiteita" ; + apartment_N = regN "asunto" ; + apple_N = regN "omena" ; --- omenia, not omenoita + art_N = regN "taide" ; ---- ask_V2Q = mkV2Q (regV "ask") [] ; baby_N = regN "vauva" ; bad_ADeg = mkADeg (regN "paha") "pahempi" "pahin" ; - bank_N = reg3N "pankki" "pankin" "pankkeja" ; + bank_N = regN "pankki" ; beautiful_ADeg = mkADeg (regN "kaunis") "kauniimpi" "kaunein" ; ---- become_VA = mkVA (irregV "become" "became" "become") ; - beer_N = reg3N "olut" "oluen" "oluita" ; + beer_N = regN "olut" ; ---- beg_V2V = mkV2V (regDuplV "beg") [] "to" ; - big_ADeg = mkADeg (reg3N "suuri" "suuren" "suuria") "suurempi" "suurin" ; + big_ADeg = mkADeg (reg2N "suuri" "suuria") "suurempi" "suurin" ; bike_N = nLukko "polkupyörä" ; --- for correct vowel harmony - bird_N = reg3N "lintu" "linnun" "lintuja" ; - black_ADeg = mkADeg (reg3N "musta" "mustan" "mustia") "mustempi" "mustin" ; + bird_N = regN "lintu" ; + black_ADeg = mkADeg (regN "musta") "mustempi" "mustin" ; blue_ADeg = mkADeg (regN "sininen") "sinisempi" "sinisin" ; boat_N = regN "vene" ; book_N = regN "kirja" ; - boot_N = reg3N "saapas" "saappaan" "saappaita" ; + boot_N = regN "saapas" ; boss_N = regN "pomo" ; boy_N = reg3N "poika" "pojan" "poikia" ; - bread_N = reg3N "leipä" "leivän" "leipiä" ; - break_V2 = dirV2 (reg3V "rikkoa" "rikon" "rikoin") ; + bread_N = regN "leipä" ; + break_V2 = dirV2 (regV "rikkoa") ; broad_ADeg = mkADeg (regN "leveä") "leveämpi" "levein" ; ---- brother_N2 = regN2 "brother" ; brown_ADeg = mkADeg (regN "ruskea") "ruskeampi" "ruskein" ; - butter_N = reg3N "voi" "voin" "voita" ; +--3 butter_N = reg3N "voi" "voin" "voita" ; buy_V2 = dirV2 (regV "ostaa") ; camera_N = regN "kamera" ; - cap_N = reg3N "lakki" "lakin" "lakkeja" ; - car_N = regN "auto" ; - carpet_N = reg3N "matto" "maton" "mattoja" ; + cap_N = regN "lakki" ; + car_N = reg3N "auto" "auton" "autoja" ; -- regN: audon + carpet_N = regN "matto" ; cat_N = regN "kissa" ; - ceiling_N = reg3N "katto" "katon" "kattoja" ; + ceiling_N = regN "katto" ; chair_N = regN "tuoli" ; cheese_N = regN "juusto" ; child_N = mkN "lapsi" "lapsen" "lapsena" "lasta" "lapseen" "lapsina" "lapsissa" "lasten" "lapsia" "lapsiin" human ; - church_N = reg3N "kirkko" "kirkon" "kirkkoja" ; - city_N = reg3N "kaupunki" "kaupungin" "kaupunkeja" ; - clean_ADeg = mkADeg (reg3N "puhdas" "puhtaan" "puhtaita") "puhtaampi" "puhtain" ; - clever_ADeg = mkADeg (reg3N "viisas" "viisaan" "viisaita") "viisaampi" "viisain" ; - close_V2 = dirV2 (reg3V "sulkea" "suljen" "sulki") ; - coat_N = reg3N "takki" "takin" "takkeja" ; + church_N = regN "kirkko" ; + city_N = regN "kaupunki" ; + clean_ADeg = regADeg "puhdas" ; + clever_ADeg = regADeg "viisas" ; + close_V2 = dirV2 (regV "sulkea") ; + coat_N = regN "takki" ; cold_ADeg = mkADeg (regN "kylmä") "kylmempi" "kylmin" ; come_V = regV "tulla" ; computer_N = regN "tietokone" ; country_N = regN "maa" ; - cousin_N = reg3N "serkku" "serkun" "serkkuja" ; + cousin_N = regN "serkku" ; cow_N = regN "lehmä" ; die_V = regV "kuolla" ; dirty_ADeg = mkADeg (regN "likainen") "likaisempi" "likaisin" ; ---- distance_N3 = mkN3 (regN "distance") "from" "to" ; - doctor_N = reg3N "tohtori" "tohtorin" "tohtoreita" ; - dog_N = reg3N "koira" "koiran" "koiria" ; - door_N = reg3N "ovi" "oven" "ovia" ; +--3 doctor_N = reg3N "tohtori" "tohtorin" "tohtoreita" ; + dog_N = reg3N "koira" ; + door_N = reg2N "ovi" "ovia" ; drink_V2 = dirV2 (regV "juoda") ; ---- easy_A2V = mkA2V (regA "easy") "for" ; eat_V2 = dirV2 (regV "syödä") ; empty_ADeg = mkADeg (regN "tyhjä") "tyhjempi" "tyhjin" ; enemy_N = regN "vihollinen" ; - factory_N = reg3N "tehdas" "tehtaan" "tehtaiden" ; + factory_N = regN "tehdas" ; ---- father_N2 = regN2 "father" ; ----- fear_VS = mkVS (reg3V "pelätä" "pelkään" "pelkäsi") ; - find_V2 = dirV2 (reg3V "löytää" "löydän" "löysin") ; +---- fear_VS = mkVS (reg2V "pelätä" "pelkäsi") ; + find_V2 = dirV2 (reg2V "löytää" "löysi") ; fish_N = regN "kala" ; - floor_N = reg3N "lattia" "lattian" "lattioita" ; - forget_V2 = dirV2 (reg3V "unohtaa" "unohdan" "unohdin") ; - fridge_N = reg3N "jääkaappi" "jääkaapin" "jääkaappeja" ; + floor_N = reg2N "lattia" "lattioita" ; + forget_V2 = dirV2 (regV "unohtaa") ; + fridge_N = regN "jääkaappi" ; friend_N = regN "ystävä" ; fruit_N = regN "hedelmä" ; ---- fun_AV = mkAV (regA "fun") ; garden_N = regN "puutarha" ; - girl_N = reg3N "tyttö" "tytön" "tyttöjä" ; - glove_N = reg3N "käsine" "käsineen" "käsineitä" ; - gold_N = reg3N "kulta" "kullan" "kultia" ; + girl_N = regN "tyttö" ; + glove_N = regN "käsine" ; + gold_N = regN "kulta" ; good_ADeg = mkADeg (regN "hyvä") "parempi" "parhain" ; --- paras go_V = regV "mennä" ; green_ADeg = mkADeg (regN "vihreä") "vihreämpi" "vihrein" ; harbour_N = reg3N "satama" "sataman" "satamia" ; hate_V2 = dirV2 (regV "vihata") ; - hat_N = reg3N "hattu" "hatun" "hattuja" ; + hat_N = regN "hattu" ; have_V2 = dirV2 (regV "omistaa") ; ---- olla hear_V2 = dirV2 (regV "kuulla") ; hill_N = regN "kukkula" ; ---- hope_VS = mkVS (regV "toivoa") ; horse_N = regN "hevonen" ; - hot_ADeg = mkADeg (reg3N "kuuma" "kuuman" "kuumia") "kuumempi" "kuumin" ; + hot_ADeg = mkADeg (regN "kuuma") "kuumempi" "kuumin" ; house_N = regN "talo" ; important_ADeg = mkADeg (regN "tärkeä") "tärkeämpi" "tärkein" ; industry_N = regN "teollisuus" ; - iron_N = reg3N "rauta" "raudan" "rautoja" ; - king_N = reg3N "kuningas" "kuninkaan" "kuninkaita" ; - know_V2 = dirV2 (reg3V "tietää" "tiedän" "tiesin") ; ---- tuntea - lake_N = reg3N "järvi" "järven" "järviä" ; - lamp_N = reg3N "lamppu" "lampun" "lamppuja" ; + iron_N = regN "rauta" ; + king_N = regN "kuningas" ; + know_V2 = dirV2 (reg3V "tietää" "tiesi") ; --- tuntea; gives tietänyt + lake_N = reg2N "järvi" "järviä" ; + lamp_N = regN "lamppu" ; learn_V2 = dirV2 (mkV "oppia" "oppii" "opin" "oppivat" "oppikaa" "opitaan" "oppi" "opin" "oppisi" "oppinut" "opittu" "opitun") ; - leather_N = reg3N "nahka" "nahan" "nahkoja" ; - leave_V2 = dirV2 (reg3V "jättää" "jätän" "jätin") ; - like_V2 = caseV2 (reg3V "pitää" "pidän" "pidin") elative ; - listen_V2 = caseV2 (reg3V "kuunnella" "kuuntelen" "kuuntelin") partitive ; + leather_N = regN "nahka" ; --- nahan + leave_V2 = dirV2 (regV "jättää") ; + like_V2 = caseV2 (regV "pitää") elative ; +--3 listen_V2 = caseV2 (reg3V "kuunnella" "kuuntelen" "kuuntelin") partitive ; live_V = regV "elää" ; long_ADeg = mkADeg (regN "pitkä") "pitempi" "pisin" ; lose_V2 = dirV2 (regV "hävitä") ; --- hukata @@ -126,116 +126,112 @@ lin milk_N = regN "maito" ; moon_N = regN "kuu" ; ---- mother_N2 = regN2 "äiti" ; - mountain_N = reg3N "vuori" "vuoren" "vuoria" ; + mountain_N = reg2N "vuori" "vuoria" ; music_N = regN "musiikki" ; narrow_ADeg = mkADeg (regN "kapea") "kapeampi" "kapein" ; new_ADeg = mkADeg (reg3N "uusi" "uuden" "uusia") "uudempi" "uusin" ; newspaper_N = nSylki "sanomalehti" ; --- for correct vowel harmony -{- - oil_N = regN "oil" ; - old_ADeg = regADeg "old" ; - open_V2 = dirV2 (regV "open") ; - paint_V2A = mkV2A (regV "paint") [] ; - paper_N = regN "paper" ; - peace_N = regN "peace" ; - pen_N = regN "pen" ; - planet_N = regN "planet" ; - plastic_N = regN "plastic" ; - play_V2 = dirV2 (regV "play") ; - policeman_N = regN "policeman" ; - priest_N = regN "priest" ; - probable_AS = mkAS (regA "probable") ; - queen_N = regN "queen" ; - radio_N = regN "radio" ; - rain_V0 = mkV0 (regV "rain") ; - read_V2 = dirV2 (irregV "read" "read" "read") ; - red_ADeg = regADeg "red" ; - religion_N = regN "religion" ; - restaurant_N = regN "restaurant" ; - river_N = regN "river" ; - rock_N = regN "rock" ; - roof_N = regN "roof" ; - rubber_N = regN "rubber" ; - run_V = (irregDuplV "run" "ran" "run") ; - say_VS = mkVS (irregV "say" "said" "said") ; - school_N = regN "school" ; - science_N = regN "science" ; - sea_N = regN "sea" ; - seek_V2 = dirV2 (irregV "seek" "sought" "sought") ; - see_V2 = dirV2 (irregV "see" "saw" "seen") ; - sell_V3 = dirV3 (irregV "sell" "sold" "sold") "to" ; - send_V3 = dirV3 (irregV "send" "sent" "sent") "to" ; - sheep_N = mk2N "sheep" "sheep" ; - ship_N = regN "ship" ; - shirt_N = regN "shirt" ; - shoe_N = regN "shoe" ; - shop_N = regN "shop" ; - short_ADeg = regADeg "short" ; - silver_N = regN "silver" ; --} + oil_N = regN "öljy" ; + old_ADeg = mkADeg (regN "vanha") "vanhempi" "vanhin" ; + open_V2 = dirV2 (regV "avata") ; +---- paint_V2A = mkV2A (regV "maalata") [] ; +--3 paper_N = reg3N "paperi" "paperin" "papereita" ; + peace_N = regN "rauha" ; + pen_N = regN "kynä" ; + planet_N = regN "planeetta" ; + plastic_N = regN "muovi" ; + play_V2 = dirV2 (regV "pelata") ; --- leikkiä, soittaa + policeman_N = regN "poliisi" ; + priest_N = regN "pappi" ; +---- probable_AS = mkAS (mkA (nNainen "todennäköistä")) ; --- for vowel harmony +---- queen_N = regN "kuningatar" ; +--3 radio_N = reg3N "radio" "radion" "radioita" ; +---- rain_V0 = mkV0 (vHuoltaa "sataa" "sadan" "satoi" "sadoin") ; + read_V2 = dirV2 (regV "lukea") ; + red_ADeg = regADeg "punainen" ; + religion_N = regN "uskonto" ; + restaurant_N = regN "ravintola" ; +---- river_N = reg3N "joki" "joen" "jokia" ; +---- rock_N = regN "kallio" ; + roof_N = regN "katto" ; + rubber_N = regN "kumi" ; + run_V = reg2V "juosta" "juoksi" ; +---- say_VS = mkVS (regV "sanoa") ; + school_N = regN "koulu" ; + science_N = regN "tiede" ; + sea_N = reg2N "meri" "meriä" ; + seek_V2 = dirV2 (regV "etsiä") ; +---- see_V2 = dirV2 (irregV "see" "saw" "seen") ; +---- sell_V3 = dirV3 (regV "myydä") allative ; +---- send_V3 = dirV3 (regV "lähettää") allative ; + sheep_N = regN "lammas" ; + ship_N = regN "laiva" ; + shirt_N = regN "paita" ; + shoe_N = regN "kenkä" ; + shop_N = regN "kauppa" ; + short_ADeg = regADeg "lyhyt" ; + silver_N = regN "hopea" ; sister_N = regN "sisko" ; - sleep_V = regV "uinua" ; -{- - small_ADeg = regADeg "small" ; - snake_N = regN "snake" ; - sock_N = regN "sock" ; - speak_V2 = dirV2 (irregV "speak" "spoke" "spoken") ; - star_N = regN "star" ; - steel_N = regN "steel" ; - stone_N = regN "stone" ; - stove_N = regN "stove" ; - student_N = regN "student" ; - stupid_ADeg = regADeg "stupid" ; - sun_N = regN "sun" ; - switch8off_V2 = dirV2 (partV (regV "switch") "off") ; - switch8on_V2 = dirV2 (partV (regV "switch") "on") ; - table_N = regN "table" ; - talk_V3 = mkV3 (regV "talk") "to" "about" ; - teacher_N = regN "teacher" ; - teach_V2 = dirV2 (irregV "teach" "taught" "taught") ; - television_N = regN "television" ; - thick_ADeg = regADeg "thick" ; - thin_ADeg = regADeg "thin" ; - train_N = regN "train" ; - travel_V = (regDuplV "travel") ; - tree_N = regN "tree" ; + sleep_V = regV "nukkua" ; +---- small_ADeg = regADeg "small" ; + snake_N = regN "käärme" ; + sock_N = regN "sukka" ; + speak_V2 = dirV2 (irregV "puhua") ; + star_N = reg2N "tähti" "tähtiä" ; +---- steel_N = regN "teräs" ; + stone_N = reg2N "kivi" "kiviä" ; + stove_N = reg3N "liesi" "lieden" "liesiä" ; + student_N = reg2N "opiskelija" "opiskelijoita" ; + stupid_ADeg = regADeg "tyhmä" ; + sun_N = regN "aurinko" ; + switch8off_V2 = dirV2 (regV "sammuttaa") ; --- + switch8on_V2 = dirV2 (regV "sytyttää") ; --- + table_N = regN "pöytä" ; +---- talk_V3 = mkV3 (regV "puhua") allative elative ; + teacher_N = regN "opettaja" ; + teach_V2 = dirV2 (irregV "opettaa") ; +--3 television_N = reg2N "televisio" "telievisioita" ; + thick_ADeg = regADeg "paksu" ; + thin_ADeg = regADeg "ohut" ; + train_N = regN "juna" ; + travel_V = regV "matkustaa" ; + tree_N = regN "puu" ; ---- trousers_N = regN "trousers" ; - ugly_ADeg = regADeg "ugly" ; - understand_V2 = dirV2 (irregV "understand" "understood" "understood") ; - university_N = regN "university" ; - village_N = regN "village" ; - wait_V2 = mkV2 (regV "wait") "for" ; - walk_V = (regV "walk") ; - warm_ADeg = regADeg "warm" ; - war_N = regN "war" ; - watch_V2 = dirV2 (regV "watch") ; - water_N = regN "water" ; - white_ADeg = regADeg "white" ; - window_N = regN "window" ; - wine_N = regN "wine" ; - win_V2 = dirV2 (irregV "win" "won" "won") ; - woman_N = mk2N "woman" "women" ; - wonder_VQ = mkVQ (regV "wonder") ; - wood_N = regN "wood" ; - write_V2 = dirV2 (irregV "write" "wrote" "written") ; - yellow_ADeg = regADeg "yellow" ; - young_ADeg = regADeg "young" ; + ugly_ADeg = mkADeg (regN "ruma") "rumempi" "rumin" ; + understand_V2 = dirV2 (reg3V "ymmärtää" "ymmärrän" "ymmärsin") ; + university_N = regN "yliopisto" ; + village_N = regN "kylä" ; + wait_V2 = mkV2 (regV "odottaa") partitive ; + walk_V = (regV "kävellä") ; +---- warm_ADeg = regADeg "warm" ; + war_N = regN "sota" ; + watch_V2 = dirV2 (regV "katsella") ; + water_N = reg3N "vesi" "veden" "vesiä" ; + white_ADeg = regADeg "valkoinen" ; + window_N = reg2N "ikkuna" "ikkunoita" ; + wine_N = regN "viini" ; + win_V2 = dirV2 (irregV "voittaa") ; + woman_N = regN "nainen" ; +--3 wonder_VQ = mkVQ (regV "ihmetellä") ; + wood_N = regN "puu" ; + write_V2 = dirV2 (irregV "kirjoittaa") ; + yellow_ADeg = regADeg "keltainen" ; + young_ADeg = mkADeg (reg2N "nuori" "nuoria") "nuorempi" "nuorin" ; - do_V2 = dirV2 (mkV "do" "does" "did" "done" "doing") ; - now_Adv = mkAdv "now" ; - already_Adv = mkAdv "already" ; - song_N = regN "song" ; - add_V3 = dirV3 (regV "add") "to" ; - number_N = regN "number" ; - put_V2 = mkV2 (irregDuplV "put" "put" "put") [] ; - stop_V = regDuplV "stop" ; - jump_V = regV "jump" ; - here_Adv = mkAdv "here" ; - here7to_Adv = mkAdv "here" ; - here7from_Adv = mkAdv ["from here"] ; - there_Adv = mkAdv "there" ; - there7to_Adv = mkAdv "there" ; - there7from_Adv = mkAdv ["from there"] ; --} +---- do_V2 = dirV2 (mkV "do" "does" "did" "done" "doing") ; + now_Adv = mkAdv "nyt" ; + already_Adv = mkAdv "jo" ; + song_N = regN "laulu" ; +---- add_V3 = dirV3 (regV "lisätä") illative ; +---- number_N = regN "numero" ; --- + put_V2 = dirV2 (regV "panna") ; + stop_V = regDuplV "pysähtyä" ; + jump_V = regV "hypätä" ; + here_Adv = mkAdv "täällä" ; + here7to_Adv = mkAdv "tänne" ; + here7from_Adv = mkAdv "täältä" ; + there_Adv = mkAdv "siellä" ; --- tuolla + there7to_Adv = mkAdv "sinne" ; + there7from_Adv = mkAdv "sieltä" ; } ; diff --git a/lib/resource/finnish/MorphoFin.gf b/lib/resource/finnish/MorphoFin.gf index 8839c8430..ea3e34fbc 100644 --- a/lib/resource/finnish/MorphoFin.gf +++ b/lib/resource/finnish/MorphoFin.gf @@ -49,8 +49,8 @@ oper NCase Pl Allat => vesii + "lle" ; NCase Pl Abess => vesii + ("tt" + a) ; - NComit => Predef.tk 2 vesia + "ine" ; - NInstruct => Predef.tk 2 vesia + "in" ; + NComit => vetii + "ne" ; + NInstruct => vesii + "n" ; NPossNom => vete ; NPossGenPl => Predef.tk 1 vesien ; @@ -105,7 +105,7 @@ oper lukk = init lukko ; a = getHarmony o ; lukkoja = case o of { - "a" => lukk + "oja" ; + "a" => lukk + if_then_Str (pbool2bool (Predef.occurs "ou" lukk)) "ia" "oja" ; "ä" => lukk + "iä" ; _ => lukko + "j" + a } @@ -122,7 +122,7 @@ oper baar = Predef.tk 1 baari ; a = getHarmony (Predef.dp 1 baaria) in - sKukko baari (baari + "n") (baar + ("ej" + a)) ; + sKukko baari (weakGrade baari + "n") (baar + ("ej" + a)) ; sKorpi : (_,_,_ : Str) -> CommonNoun = \korpi,korven,korpena -> let { @@ -471,11 +471,11 @@ getHarmony : Str -> Str = \u -> case u of { "rt" => ku + "rr" ; "lt" => ku + "ll" ; "lk" => kul + case o of { - "i" => "j" ; + "i" | "e" => "j" ; _ => "" } ; "rk" => kul + case o of { - "i" => "j" ; + "i" | "e" => "j" ; _ => "" } ; "hk" | "tk" => kukk ; -- *tahko-tahon, *pitkä-pitkän @@ -497,20 +497,23 @@ getHarmony : Str -> Str = \u -> case u of { --- This is only used to analyse nouns "rae", "hake", etc. - strongGrade : Str -> Str = \hak -> + strongGrade : Str -> Str = \hake -> let + hak = init hake ; ha = init hak ; k = last hak ; + e = last hake ; ly = Predef.tk 2 hak ; - hd = Predef.dp 2 hak - in + hd = Predef.dp 2 hak ; + ifE : Str -> Str = \hant -> ifTok Str e "e" hant hak ; + hakk = case hd of { - "ng" => ha + "nk" ; - "nn" => ha + "nt" ; - "mm" => ha + "mp" ; - "rr" => ha + "rt" ; - "ll" => ha + "lt" ; - "lj" => ha + "lk" ; + "ng" => ha + "k" ; + "nn" => ha + "t" ; + "mm" => ha + "p" ; + "rr" => ha + "t" ; + "ll" => ha + "t" ; + "lj" => ifE (ha + "k") ; -- paljas-paljaan "hk" | "sk" | "sp" | "st" => hak ; _ => -- vihje/pohje: impossible to infer case k of { @@ -518,11 +521,12 @@ getHarmony : Str -> Str = \u -> case u of { "p" => hak + "p" ; "t" => hak + "t" ; "d" => ha + "t" ; - "v" => ha + "p" ; + "v" => ha + "p" ; -- rove/hyve impossible "a" | "ä" => hak + "k" ; _ => hak } - } ; + } + in hakk + e ; --3 Proper names @@ -833,7 +837,17 @@ caseTable : Number -> CommonNoun -> Case => Str = \n,cn -> let { a = Predef.dp 1 hukkua ; hukku = Predef.tk 1 hukkua ; - u = Predef.dp 1 huku + u = Predef.dp 1 huku ; + i = case u of { + "e" | "i" => [] ; + _ => u + } ; + y = case a of { + "a" => "u" ; + _ => "y" + } ; + hukkui = init hukku + i + "i" ; + hukui = init huku + i + "i" ; } in mkVerb hukkua @@ -842,12 +856,12 @@ caseTable : Number -> CommonNoun -> Case => Str = \n,cn -> (hukku + "v" + a + "t") (hukku + (("k" + a) + a)) (huku + ((("t" + a) + a) + "n")) - (hukku + "i") - (huku + "in") - (hukku + "isi") - (hukku + "n" + u + "t") - (huku + "tt" + u) - (huku + "t" + u + "t") ; + (hukkui) + (hukui + "n") + (hukkui + "si") + (hukku + "n" + y + "t") + (huku + "tt" + y) + (huku + "t" + y + "t") ; -- For cases with or without alternation: "sanoa", "valua", "kysyä". @@ -891,27 +905,33 @@ caseTable : Number -> CommonNoun -> Case => Str = \n,cn -> vOttaa poistaa ((Predef.tk 1 poistaa + "n")) ; --- For "osata", "lisätä" +-- For "osata", "lisätä"; grade alternation is unpredictable, as seen +-- from "pelätä-pelkäsi" vs. "palata-palasi" + vOsata : Str -> Verb = \osata -> + vPalkata osata (Predef.tk 2 osata + "si") ; + + vPalkata : Str -> Str -> Verb = \palkata,palkkasi -> let - a = Predef.dp 1 osata ; - osa = Predef.tk 2 osata ; + a = Predef.dp 1 palkata ; + palka = Predef.tk 2 palkata ; + palkka = Predef.tk 2 palkkasi ; u = case a of {"a" => "u" ; _ => "y"} in mkVerb - osata - (osa + a) - (osa + (a + "n")) - (osa + (((a + "v") + a) + "t")) - (osa + ((("t" + "k") + a) + a)) - (osata + (a + "n")) - (osa + "si") - (osa + "sin") - (osa + "isi") - (osa + "nn" + u + "t") - (osa + "tt" + u) - (osa + "t" + u + "n") ; + palkata + (palkka + a) + (palkka + (a + "n")) + (palkka + (((a + "v") + a) + "t")) + (palka + ((("t" + "k") + a) + a)) + (palkata + (a + "n")) + (palkka + "si") + (palkka + "sin") + (palkka + "isi") + (palka + "nn" + u + "t") + (palka + "tt" + u) + (palka + "t" + u + "n") ; ----- tulla,tulee,tulen,tulevat,tulkaa,tullaan,tuli,tulin,tulisi,tullut,tultu,tullun diff --git a/lib/resource/finnish/ParadigmsFin.gf b/lib/resource/finnish/ParadigmsFin.gf index e016ab1a5..c099f474b 100644 --- a/lib/resource/finnish/ParadigmsFin.gf +++ b/lib/resource/finnish/ParadigmsFin.gf @@ -296,64 +296,52 @@ regN = \vesi -> (ves + "isiin") ; "is" => sNauris (vesi + ("t" + a)) ; "ut" | "yt" => sRae vesi (ves + ("en" + a)) ; + "as" | "äs" => sRae vesi (strongGrade ves + (a + "n" + a)) ; + "ar" | "är" => sRae vesi (strongGrade ves + ("ren" + a)) ; "uus" | "yys" => sRakkaus vesi ; "us" | "ys" => sTilaus vesi (ves + ("ksen" + a)) ; _ => case i of { "i" => sBaari (vesi + a) ; - "e" => sRae vesi (ves + ("een" + a)) ; ----- "e" => sRae vesi (strongGrade ves + ("een" + a)) ; + "e" => sRae vesi (strongGrade (ves + "e") + "en" + a) ; "a" | "o" | "u" | "y" | "ä" | "ö" => sLukko vesi ; _ => sLinux (vesi + "i" + a) } } } ** {g = NonHuman ; lock_N = <>} ; +reg2N : (savi,savia : Str) -> N = \savi,savia -> + let + savit = regN savi ; + ia = Predef.dp 2 savia ; + i = init ia ; + a = last ia + in + case ia of { + "ia" => sArpi savi ; + "iä" => sSylki savi ; + "ta" | "tä" => sPeruna savi ; + _ => savit + } ** {g = NonHuman ; lock_N = <>} ; + reg3N = \vesi,veden,vesiä -> let - esi = Predef.dp 3 vesi ; -- analysis: suffixes - si = Predef.dp 2 esi ; - i = last si ; - s = init si ; - den = Predef.dp 3 veden ; - d = Predef.tk 2 den ; - esiä = Predef.dp 4 vesiä ; - a = last vesiä ; - ves = init vesi ; -- synthesis: prefixes - ve = init ves ; - ved = Predef.tk 2 veden ; - sRae_vesi = sRae vesi (veden + a) ; + vesit = reg2N vesi vesiä ; + si = Predef.dp 2 vesi ; + i = last si ; + a = last vesiä ; + s = last (Predef.tk 2 vesiä) in - case si of { - "aa" | "ee" | "ii" | "oo" | "uu" | "yy" | "ää" | "öö" => sPuu vesi ; - "ie" | "uo" | "yö" => sSuo vesi ; - "is" => sNauris (vesi + ("t" + a)) ; - "ut" | "yt" | "as" | "äs" => sRae_vesi ; ---- (ves + ("en" + a)) ; - "us" | "ys" => - ifTok CommonNoun d "s" - (sTilaus vesi (veden + a)) - (sRakkaus vesi) ; - _ => case esi of { - "nen" => sNainen (Predef.tk 3 vesi + ("st" + a)) ; - _ => case esiä of { - "oita" | "öitä" => sPeruna vesi ; - _ => case den of { - "een" => sRae_vesi ; - _ => case i of { - "a" | "ä" => sKukko vesi veden vesiä ; - "i" => case (last (init vesiä)) of { - "i" => case s of { - "s" => sSusi vesi veden (ve + ("ten" + a)) ; - _ => sKorpi vesi veden (veden + a) - } ; - _ => sBaari (vesi + a) - } ; - "o" | "u" | "y" | "ö" => sKukko vesi veden vesiä ; - _ => sLinux (vesi + "i" + a) - } - } - } - } - } ** {g = NonHuman ; lock_N = <>} ; + case si of { + "us" | "ys" => + ifTok CommonNoun (Predef.dp 3 veden) "den" + (sRakkaus vesi) + (sTilaus vesi (veden + a)) ; + "si" => sSusi vesi veden (Predef.tk 2 vesi + ("ten" + a)) ; + _ => case i of { + "a" | "o" | "u" | "y" | "ä" | "ö" => sKukko vesi veden vesiä ; + _ => vesit + } + } ** {g = NonHuman ; lock_N = <>} ; nKukko = \a,b,c -> sKukko a b c ** {g = nonhuman ; lock_N = <>} ; @@ -422,6 +410,24 @@ regV soutaa = _ => vHukkua soutaa souda }} ** {lock_V = <>} ; +reg2V : (soutaa,souti : Str) -> V = \soutaa,souti -> + let + soudat = regV soutaa ; + soudan = weakGrade (init soutaa) + "n" ; + soudin = weakGrade souti + "n" ; + souden = init souti + "en" ; + juo = Predef.tk 2 soutaa ; + o = Predef.dp 1 juo ; + u = ifTok Str (last soutaa) "a" "u" "y" ; + taa = Predef.dp 3 soutaa + in + case taa of { + "taa" | "tää" => vHuoltaa soutaa soudan souti soudin ; + "ata" | "ätä" => vPalkata soutaa souti ; + "sta" | "stä" => vJuosta soutaa souden (juo + o+u+"t") (juo + "t"+u) ; + _ => soudat + } ** {lock_V = <>} ; + reg3V soutaa soudan soudin = let taa = Predef.dp 3 soutaa ; @@ -434,7 +440,7 @@ reg3V soutaa soudan soudin = u = ifTok Str a "a" "u" "y" ; joi = init soudin in case ta of { - "ta" | "tä" => vOttaa soutaa soudan ; + "ta" | "tä" => vHuoltaa soutaa soudan (init soudin) soudin ; "st" => vJuosta soutaa soudan (juo + "s"+u+"t") (juo + "t"+u) ; "nn" | "rr" | "ll" => vJuosta soutaa soudan (juo + o+u+"t") (juo + "t"+u) ; _ => case aa of { @@ -451,6 +457,8 @@ reg3V soutaa soudan soudin = vOlla = verbOlla ** {lock_V = <>} ; vEi = verbEi ** {lock_V = <>} ; + vHuoltaa : (_,_,_,_ : Str) -> Verb = \ottaa,otan,otti,otin -> + SyntaxFin.vHuoltaa ottaa otan otti otin ** {lock_V = <>} ; mkV2 = \v,c,p,o -> v ** {s3 = p ; s4 = o ; c = CCase c ; lock_V2 = <>} ; caseV2 = \v,c -> mkV2 v c [] [] ; dirV2 v = mkTransVerbDir v ** {lock_V2 = <>} ;