From cbfb9d5e7d76616b5490083a9f4071fd977c2ec0 Mon Sep 17 00:00:00 2001 From: aarne Date: Wed, 2 Jan 2008 16:54:22 +0000 Subject: [PATCH] experiment with Finnish morphology --- examples/uusisuomi/Makefile | 23 ++ examples/uusisuomi/MkLex.hs | 85 ++++++ examples/uusisuomi/MyDiff.hs | 25 ++ examples/uusisuomi/Nominal.gf | 416 ++++++++++++++++++++++++++++ examples/uusisuomi/correct-NSK.txt | 164 +++++++++++ examples/uusisuomi/correct-Omat.txt | 188 +++++++++++++ 6 files changed, 901 insertions(+) create mode 100644 examples/uusisuomi/Makefile create mode 100644 examples/uusisuomi/MkLex.hs create mode 100644 examples/uusisuomi/MyDiff.hs create mode 100644 examples/uusisuomi/Nominal.gf create mode 100644 examples/uusisuomi/correct-NSK.txt create mode 100644 examples/uusisuomi/correct-Omat.txt diff --git a/examples/uusisuomi/Makefile b/examples/uusisuomi/Makefile new file mode 100644 index 000000000..d3a8d96c2 --- /dev/null +++ b/examples/uusisuomi/Makefile @@ -0,0 +1,23 @@ +LEX=Omat + +all: tests + +gf-files: + runghc MkLex.hs 0 > $(LEX)Abs.gf + runghc MkLex.hs 1 > $(LEX)1.gf + runghc MkLex.hs 2 > $(LEX)2.gf + runghc MkLex.hs 3 > $(LEX)3.gf + runghc MkLex.hs 4 > $(LEX)4.gf + +experiments: gf-files + echo "gt -cat=Utt | l | wf exper1-$(LEX).txt" | gf $(LEX)1.gf + echo "gt -cat=Utt | l | wf exper2-$(LEX).txt" | gf $(LEX)2.gf + echo "gt -cat=Utt | l | wf exper3-$(LEX).txt" | gf $(LEX)3.gf + echo "gt -cat=Utt | l | wf exper4-$(LEX).txt" | gf $(LEX)4.gf + +tests: experiments + runghc MyDiff.hs correct-$(LEX).txt exper1-$(LEX).txt >diff1.txt + runghc MyDiff.hs correct-$(LEX).txt exper2-$(LEX).txt >diff2.txt + runghc MyDiff.hs correct-$(LEX).txt exper3-$(LEX).txt >diff3.txt + runghc MyDiff.hs correct-$(LEX).txt exper4-$(LEX).txt >diff4.txt + wc -l diff?.txt diff --git a/examples/uusisuomi/MkLex.hs b/examples/uusisuomi/MkLex.hs new file mode 100644 index 000000000..77b8beb4a --- /dev/null +++ b/examples/uusisuomi/MkLex.hs @@ -0,0 +1,85 @@ +module Main where + +import System +import Char + +-- generate Finnish lexicon implementations with 1 or more +-- characteristic arguments +-- usage: runghc MkLex.hs 3 + +main = do + i:_ <- getArgs + ss <- readFile src >>= return . filter (not . (all isSpace)) . lines + initiate i + mapM_ (mkLex (read i) . uncurry (++)) (zip nums ss) + putStrLn "}" + +--src = "correct-NSK.txt" +--tgt = "NSK" +src = "correct-Omat.txt" +tgt = "Omat" + +initiate i = mapM_ putStrLn [ + "--# -path=.:alltenses", + "", + header i, + "" + ] + where + header i = case i of + "0" -> "abstract " ++ tgt ++ "Abs = Cat ** {\n\nfun testN : N -> Utt ;\n" + _ -> unlines [ + "concrete " ++ tgt ++ i ++ + " of " ++ tgt ++ "Abs = CatFin ** open Nominal, ResFin, Prelude in {", + "", + "lin testN talo = let t = talo.s in ss (", + " t ! NCase Sg Nom ++", + " t ! NCase Sg Gen ++", + " t ! NCase Sg Part ++", + " t ! NCase Sg Ess ++", + " t ! NCase Sg Illat ++", + " t ! NCase Pl Gen ++", + " t ! NCase Pl Part ++", + " t ! NCase Pl Ess ++", + " t ! NCase Pl Iness ++", + " t ! NCase Pl Illat", + " ) ;" + ] + +nums = map prt [1 ..] where + prt i = (if i < 10 then "0" else "") ++ show i ++ ". " + +mkLex 0 line = case words line of + num:sana:_ -> do + let nimi = "n" ++ init num ++ "_" ++ sana + putStrLn $ "fun " ++ nimi ++ "_N : N ;" + _ -> return () + +mkLex 1 line = case words line of + num:sana:_ -> do + let nimi = "n" ++ init num ++ "_" ++ sana + putStrLn $ "lin " ++ nimi ++ "_N = mk1N \"" ++ sana ++ "\" ;" + _ -> return () + +mkLex 2 line = case words line of + num:sana:sanan:_ -> do + let nimi = "n" ++ init num ++ "_" ++ sana + putStrLn $ "lin " ++ nimi ++ + "_N = mk2N \"" ++ sana ++ "\" \"" ++ sanan ++ "\" ;" + _ -> return () + +mkLex 3 line = case words line of + num:sana:sanan:_:_:_:_:sanoja:_ -> do + let nimi = "n" ++ init num ++ "_" ++ sana + putStrLn $ "lin " ++ nimi ++ + "_N = mk3N \"" ++ sana ++ "\" \"" ++ sanan ++ "\" \"" ++ sanoja ++ "\" ;" + _ -> return () + +mkLex 4 line = case words line of + num:sana:sanan:sanaa:_:_:_:sanoja:_ -> do + let nimi = "n" ++ init num ++ "_" ++ sana + putStrLn $ "lin " ++ nimi ++ + "_N = mk4N \"" ++ sana ++ "\" \"" ++ sanan ++ + "\" \"" ++ sanaa ++ "\" \"" ++ sanoja ++ "\" ;" + _ -> return () + diff --git a/examples/uusisuomi/MyDiff.hs b/examples/uusisuomi/MyDiff.hs new file mode 100644 index 000000000..f695978aa --- /dev/null +++ b/examples/uusisuomi/MyDiff.hs @@ -0,0 +1,25 @@ +module Main where + +import System + +-- compare lines word-by-word, returning difference pairs with their positions + +main = do + x:y:_ <- getArgs + old <- readFile x >>= return . lines + new <- readFile y >>= return . lines + mapM_ comp (zip old new) + +comp (ws1,ws2) = do + let diffs = [form ++ ":" ++ w1 ++ "-" ++ w2 | + (form,(w1,w2)) <- zip forms (zip (words ws1) (words ws2)), diff w2 w1] + putStr $ unwords diffs + if null diffs then return () else putStrLn "" + +forms = map show [1..] + +diff w ws = notElem w (chop ws) where + chop cs = case span (/='/') cs of + ([],_) -> [] + (w1,ww) -> w1:chop (drop 1 ww) + diff --git a/examples/uusisuomi/Nominal.gf b/examples/uusisuomi/Nominal.gf new file mode 100644 index 000000000..8cf60ec57 --- /dev/null +++ b/examples/uusisuomi/Nominal.gf @@ -0,0 +1,416 @@ +--# -path=.:alltenses + +resource Nominal = ResFin ** open MorphoFin,CatFin,Prelude in { + + flags optimize=all ; + + oper + +-- mkN = overload { + mk1N : (talo : Str) -> N = \s -> nForms2N (nForms1 s) ; + mk2N : (talo,talon : Str) -> N = \s,t -> nForms2N (nForms2 s t) ; + mk3N : (talo,talon,taloja : Str) -> N = \s,t,u -> nForms2N (nForms3 s t u) ; + mk4N : (talo,talon,taloa,taloja : Str) -> N = \s,t,u,v -> + nForms2N (nForms4 s t u v) ; +-- } ; + + nForms1 : Str -> NForms = \ukko -> + let + a = vowelHarmony ukko ; + ukk = init ukko ; + uko = weakGrade ukko ; + rake = Nominal.strongGrade ukko ; + renka = Nominal.strongGrade (init ukko) ; + o = last ukko ; + in + case ukko of { + _ + ("us" | "ys") => + let + lujuus = ukko ; + lujuu = ukk ; + lujuuksi = ukk + "ksi" + in nForms10 + lujuus (lujuu + "den") (lujuu + "tt" + a) + (lujuu + "ten" + a) (lujuu + "teen") + (lujuuksi + "en") (lujuuksi + a) + (lujuuksi + "n" + a) (lujuuksi + "ss" + a) (lujuuksi + "in") ; + _ + "nen" => + let + nainen = ukko ; + nais = Predef.tk 3 ukko + "s" + in nForms10 + nainen (nais + "en") (nais + "t" + a) (nais + "en" + a) (nais + "een") + (nais + "ten") (nais + "i" + a) + (nais + "in" + a) (nais + "iss" + a) (nais + "iin") ; + _ + ("aa" | "ee" | "ii" | "oo" | "uu" | "yy" | "ää" | "öö") => + let + puu = ukko ; + pui = ukk + "i" ; + u = o ; + in nForms10 + puu (puu + "n") (puu + "t" + a) (puu + "n" + a) (puu + "h" + u + "n") + (pui + "den") (pui + "t" + a) + (pui + "n" + a) (pui + "ss" + a) (pui + "hin") ; + _ + ("ie" | "uo" | "yö") => + let + suo = ukko ; + soi = init ukk + o + "i" ; + in nForms10 + suo (suo + "n") (suo + "t" + a) (suo + "n" + a) (suo + "h" + o + "n") + (soi + "den") (soi + "t" + a) + (soi + "n" + a) (soi + "ss" + a) (soi + "hin") ; + _ + ("ea" | "eä") => + let + korkea = ukko ; + korke = init ukko ; + in nForms10 + korkea (korkea + "n") (korkea + a) + (korkea + "n" + a) (korkea + a + "n") + (korke + "iden") (korke + "it" + a) + (korke + "in" + a) (korke + "iss" + a) + (korke + "isiin") ; --- NSSK: korkeihin + _ + "is" => + let + kaunis = ukko ; + kaunii = init kaunis + "i" ; + in nForms10 + kaunis (kaunii + "n") (kaunis + "t" + a) + (kaunii + "n" + a) (kaunii + "seen") + (kaunii + "den") (kaunii + "t" + a) + (kaunii + "n" + a) (kaunii + "ss" + a) + (kaunii + "siin") ; + + _ + ("i" | "u") + "n" => -- liitin,laidun + let + liitin = ukko ; + liittim = renka + "m" ; + in nForms10 + liitin (liittim + "en") (liitin + "t" + a) + (liittim + "en" + a) (liittim + "een") + (liittim + "ien") (liittim + "i" + a) + (liittim + "in" + a) (liittim + "iss" + a) + (liittim + "iin") ; + + onne + "t" + on@("on" | "ön") => + let + onneton = ukko ; + onnettom = onne + "tt" + init on + "m" ; + in nForms10 + onneton (onnettom + a + "n") (onneton + "t" + a) + (onnettom + a + "n" + a) (onnettom + a + a + "n") + (onnettom + "ien") (onnettom + "i" + a) + (onnettom + "in" + a) (onnettom + "iss" + a) + (onnettom + "iin") ; + + _ + ("ut" | "yt") => -- olut,kätkyt + nForms_rae ukko (ukk + "en" + a) ; + _ + ("as" | "äs") => -- rengas,rypäs + nForms_rae ukko (renka + a + "n" + a) ; + _ + ("ar" | "är") => -- piennar,tytär + nForms_rae ukko (renka + "ren" + a) ; + _ + "e" => + nForms_rae ukko (rake + "en" + a) ; + + _ + ("a" | "o" | "u" | "y" | "ä" | "ö") => + nForms_ukko ukko (uko + "n") ; + + _ + "i" => + let + paatte = ukk + "e" ; + paate = init uko + "e" ; + in nForms10 + ukko (uko + "n") (ukko + a) (ukko + "n" + a) (ukko + "in") + (ukko + "en") (paatte + "j" + a) + (paatte + "in" + a) (paate + "iss" + a) (paatte + "ihin") ; + _ + "e" + ("l" | "n") => + let + ahven = ukko ; + in nForms10 + ahven (ahven + "en") (ahven +"t" + a) + (ahven + "en" + a) (ahven + "een") + (ahven + "ten") (ahven + "i" + a) (ahven + "in" + a) + (ahven + "iss" + a) (ahven + "iin") ; + _ => + let + unixi = ukko + "i" ; + unixe = ukko + "e" ; + in nForms10 + ukko (unixi + "n") (unixi + a) (unixi + "n" + a) (unixi + "in") + (unixi + "en") (unixe + "j" + a) (unixe + "in" + a) + (unixe + "iss" + a) (unixe + "ihin") + } ; + + + nForms2 : (_,_ : Str) -> NForms = \ukko,ukon -> + let + a = vowelHarmony ukko ; + ukk = init ukko ; + ukot = nForms1 ukko ; + in + case of { + <_ + ("aa" | "ee" | "ii" | "oo" | "uu" | "yy" | "ää" | "öö" | + "ie" | "uo" | "yö"), _ + "n"> => ukot ; --- to protect these + <_ + ("a" | "o" | "u" | "y" | "ä" | "ö"), _ + "n"> => + nForms_ukko ukko ukon ; -- auto,auton + => + nForms_arpi ukko ukon (arp + "i" + a) ; + => -- for b-w compat. + nForms_arpi ukko (init (weakGrade ukko) + "en") ukon ; + => + nForms_rae ukko (terv + "een" + a) ; + => + nForms10 + ukko ukon (ukko + a) (nukk +"en" + a) (nukk + "een") + (nukk + "ien") (nukk + "ej" + a) (nukk + "ein" + a) + (nuk + "eiss" + a) (nukk + "eihin") ; + <_ + "s", _ + "ksen"> => table { + 1 => ukon ; + 2 => ukko + "t" + a ; + 3 => ukk + "ksen" + a ; + 4 => ukk + "kseen" ; + n => ukot ! n + } ; + <_,_ + "n"> => table { + 1 => ukon ; + n => ukot ! n + } ; + <_,_ + ("a" | "ä")> => table { -- for b-w compat. + 5 => (part2casePl ukon).p1 ; + 6 => ukon ; + n => ukot ! n + } ; + _ => + Predef.error (["second argument should end in n, not"] ++ ukon) + } ; + + nForms3 : (_,_,_ : Str) -> NForms = \ukko,ukon,ukkoja -> + let + ukot = nForms2 ukko ukon ; + in + case of { + <_ + "a" | "ä", _ + "n", _ + ("a" | "ä")> => + let ukkojen = part2casePl ukkoja in + table { + 5 => ukkojen.p1 ; + 6 => ukkoja ; + 7 => ukkojen.p2 ; + 8 => ukkojen.p3 ; + 9 => ukkojen.p4 ; + n => ukot ! n + } ; + <_,_ + "n", _ + ("a" | "ä")> => + let ukkojen = part2casePl ukkoja in + table { + 5 => ukkojen.p1 ; + 6 => ukkoja ; + n => ukot ! n + } ; + _ => + Predef.error + (["last arguments should end in n and a/ä, not"] ++ ukon ++ ukkoja) + } ; + + nForms4 : (_,_,_,_ : Str) -> NForms = \ukko,ukon,ukkoa,ukkoja -> + let + ukot = nForms3 ukko ukon ukkoja ; + in + case of { + <_,_ + "n", _ + ("a" | "ä"), _ + ("a" | "ä")> => + table { + 2 => ukkoa ; + n => ukot ! n + } ; + _ => + Predef.error + (["last arguments should end in n, a/ä, and a/ä, not"] ++ + ukon ++ ukkoa ++ ukkoja) + } ; + + +-- auxiliary "declensions" + + nForms_ukko : (_,_ : Str) -> NForms = \ukko,ukon -> + let + o = last ukko ; + a = getHarmony o ; + ukk = init ukko ; + uko = init ukon ; + uk = init uko ; + ukkoja = case of { + _ + "ä" => -- kylä,kyliä,kylien,kylissä,kyliin + ; + _ + ("au" | "eu") + _ + "a" => -- kauhojen,seurojen + ; + _ + ("o" | "u") + _ + "a" => -- pula,pulia,pulien,pulissa,puliin + ; + _ + "a" => -- kala,kaloja,kalojen,-oissa,-oihin + ; + _ => -- suku,sukuja,sukujen,-uissa,-uihin + + } ; + ukkoina = ukkoja.p3 + "in" + a ; + ukoissa = ukkoja.p4 + "iss" + a ; + in nForms10 + ukko ukon (ukko + a) (ukko + "n" + a) (ukko + o + "n") + ukkoja.p2 ukkoja.p1 + ukkoina ukoissa ukkoja.p5 ; + + + nForms_arpi : (_,_,_ : Str) -> NForms = \arpi,arven,arpia -> + let + a = last arpia ; + arp = init arpi ; + arv = Predef.tk 2 arven ; + ar = init arp ; + arpe = case last arp of { + "s" => case last arv of { + "d" | "l" | "n" | "r" => -- suden,sutta ; jälsi ; kansi ; hirsi + ; + _ => -- kuusen,kuusta + ---- suksi,suksen + } ; + "r" => -- suurta,suurten + ; + "l" | "h" => -- tuulta,tuulien + ; + _ => -- arpea,arpien,arvissa + + } ; ---- pieni,pientä; uni,unta + in nForms10 + arpi arven arpe.p1 (arpe.p4 + "en" + a) (arpe.p4 + "een") + arpe.p2 arpia + (arp + "in" + a) (arpe.p3 + "ss" + a) (arp + "iin") ; + + nForms_rae : (_,_ : Str) -> NForms = \rae,rakeena -> + let + a = last rakeena ; + rakee = Predef.tk 2 rakeena ; + rakei = init rakee + "i" ; + raetta = case of { + _ + "e" => + ; -- raetta,rakeeseen + _ + "s" => + ; -- rengasta,renkaaseen + _ + "t" => + ; -- olutta,olueen + _ + "r" => + ; -- sisarta,sisareen + _ => Predef.error (["expected ending e/t/s/r, found"] ++ rae) + } ; + in nForms10 + rae (rakee + "n") raetta.p1 (rakee + "n"+ a) raetta.p2 + (rakei + "den") (rakei + "t" + a) + (rakei + "n" + a) (rakei + "ss" + a) (rakei + "siin") ; ---- sisariin + + NForms : Type = Predef.Ints 9 => Str ; + + nForms10 : (x1,_,_,_,_,_,_,_,_,x10 : Str) -> NForms = + \Ukko,ukon,ukkoa,ukkona,ukkoon, + ukkojen,ukkoja,ukkoina,ukoissa,ukkoihin -> table { + 0 => Ukko ; + 1 => ukon ; + 2 => ukkoa ; + 3 => ukkona ; + 4 => ukkoon ; + 5 => ukkojen ; + 6 => ukkoja ; + 7 => ukkoina ; + 8 => ukoissa ; + 9 => ukkoihin + } ; + + nForms2N : NForms -> N = \f -> + let + Ukko = f ! 0 ; + ukon = f ! 1 ; + ukkoa = f ! 2 ; + ukkona = f ! 3 ; + ukkoon = f ! 4 ; + ukkojen = f ! 5 ; + ukkoja = f ! 6 ; + ukkoina = f ! 7 ; + ukoissa = f ! 8 ; + ukkoihin = f ! 9 ; + a = last ukkoja ; + uko = init ukon ; + ukko = Predef.tk 2 ukkona ; + ukkoi = Predef.tk 2 ukkoina ; + ukoi = Predef.tk 3 ukoissa ; + in + {s = table { + NCase Sg Nom => Ukko ; + NCase Sg Gen => uko + "n" ; + NCase Sg Part => ukkoa ; + NCase Sg Transl => uko + "ksi" ; + NCase Sg Ess => ukkona ; + NCase Sg Iness => uko + ("ss" + a) ; + NCase Sg Elat => uko + ("st" + a) ; + NCase Sg Illat => ukkoon ; + NCase Sg Adess => uko + ("ll" + a) ; + NCase Sg Ablat => uko + ("lt" + a) ; + NCase Sg Allat => uko + "lle" ; + NCase Sg Abess => uko + ("tt" + a) ; + + NCase Pl Nom => uko + "t" ; + NCase Pl Gen => ukkojen ; + NCase Pl Part => ukkoja ; + NCase Pl Transl => ukoi + "ksi" ; + NCase Pl Ess => ukkoina ; + NCase Pl Iness => ukoissa ; + NCase Pl Elat => ukoi + ("st" + a) ; + NCase Pl Illat => ukkoihin ; + NCase Pl Adess => ukoi + ("ll" + a) ; + NCase Pl Ablat => ukoi + ("lt" + a) ; + NCase Pl Allat => ukoi + "lle" ; + NCase Pl Abess => ukoi + ("tt" + a) ; + + NComit => ukkoi + "ne" ; + NInstruct => ukoi + "n" ; + + NPossNom _ => ukko ; + NPossGen Sg => ukko ; + NPossGen Pl => init ukkojen ; + NPossTransl Sg => uko + "kse" ; + NPossTransl Pl => ukoi + "kse" ; + NPossIllat Sg => init ukkoon ; + NPossIllat Pl => init ukkoihin + } ; + lock_N = <> + } ; + + +--- This is used to analyse nouns "rae", "hake", "rengas", "laidun", etc. + + strongGrade : Str -> Str = \hanke -> + let + ha = Predef.tk 3 hanke ; + nke = Predef.dp 3 hanke ; + in + ha + case nke of { + "ng" + a => "nk" + a ; + "nn" + e => "nt" + e ; + "mm" + e => "mp" + e ; + "rr" + e => "rt" + e ; + "ll" + a => "lt" + a ; + h@("h" | "l") + "j" + e => h + "k" + e ; -- pohje/lahje impossible + ("hk" | "sk" | "sp" | "st") + _ => nke ; -- viuhke,kuiske + a + k@("k" | "p" | "t") + e@("e"|"a"|"ä"|"u"|"i") => a + k + k + e ; + a + "d" + e@("e"|"a"|"ä"|"u"|"i") => a + "t" + e ; + s + a@("a" | "ä") + "e" => s + a + "ke" ; -- säe, tae + a + "v" + e@("e"|"a"|"ä"|"u"|"i") => a + "p" + e ; -- taive/toive imposs + ase => ase + } ; + + part2casePl : Str -> Str * Str * Str * Str = \savia -> case savia of { + sav + "i" + a@("a" | "ä") => + ; + elio + "it" + a@("a" | "ä") => + ; + maal + "ej" + a@("a" | "ä") => + ; + talo + "j" + a@("a" | "ä") => + ; + _ => Predef.error (["impossible plural partitive"] ++ savia) + } ; + +} diff --git a/examples/uusisuomi/correct-NSK.txt b/examples/uusisuomi/correct-NSK.txt new file mode 100644 index 000000000..32c3eb79e --- /dev/null +++ b/examples/uusisuomi/correct-NSK.txt @@ -0,0 +1,164 @@ +valo valon valoa valona valoon valojen valoja valoina valoissa valoihin + +arvelu arvelun arvelua arveluna arveluun arvelujen arveluja arveluina arveluissa arveluihin + +autio aution autiota autiona autioon autioiden autioita autioina autioissa autioihin + +risti ristin ristiä ristinä ristiin ristien ristejä risteinä risteissä risteihin + +paperi paperin paperia paperina paperiin papereiden papereita papereina papereissa papereihin + +banaali banaalin banaalia banaalina banaaliin banaalien banaaleja banaaleina banaaleissa banaaleihin + +kalsium kalsiumin kalsiumia kalsiumina kalsiumiin kalsiumien kalsiumeja kalsiumeina kalsiumeissa kalsiumeihin + +lovi loven lovea lovena loveen lovien lovia lovina lovissa loviin + +nalle nallen nallea nallena nalleen nallien nalleja nalleina nalleissa nalleihin + +kala kalan kalaa kalana kalaan kalojen kaloja kaloina kaloissa kaloihin + +koira koiran koiraa koirana koiraan koirien koiria koirina koirissa koiriin + +matala matalan matalaa matalana matalaan matalien matalia matalina matalissa mataliin + +asema aseman asemaa asemana asemaan asemien asemia asemina asemissa asemiin + +kulkija kulkijan kulkijaa kulkijana kulkijaan kulkijoiden kulkijoita kulkijoina kulkijoissa kulkijoihin + +karahka karahkan karahkaa karahkana karahkaan karahkojen karahkoja karahkoina karahkoissa karahkoihin + +kantaja kantajan kantajaa kantajana kantajaan kantajien kantajia kantajina kantajissa kantajiin + +peruna perunan perunaa perunana perunaan perunien perunia perunina perunissa peruniin + +pasuuna pasuunan pasuunaa pasuunana pasuunaan pasuunojen pasuunoja pasuunoina pasuunoissa pasuunoihin + +ainoa ainoan ainoata ainoana ainoaan ainoiden ainoita ainoina ainoissa ainoihin + +herttua herttuan herttuaa herttuana herttuaan herttuoiden herttuoita herttuoina herttuoissa herttuoihin + +korkea korkean korkeaa korkeana korkeaan korkeiden korkeita korkeina korkeissa korkeisiin/korkeihin + +suurempi suuremman suurempaa suurempana suurempaan suurempien suurempia suurempina suuremmissa suurempiin + +vapaa vapaan vapaata vapaana vapaaseen vapaiden vapaita vapaina vapaissa vapaisiin + +tienoo tienoon tienoota tienoona tienoohon tienoiden tienoita tienoina tienoissa tienoihin + +leikkuu leikkuun leikkuuta leikkuuna leikkuuhun leikkuiden leikkuita leikkuina leikkuissa leikkuihin + +kamee kameen kameeta kameena kameehen/kameeseen kameiden kameita kameina kameissa kameihin/kameisiin + +pii piin piitä piinä piihin piiden piitä piinä piissä piihin + +maa maan maata maana maahan maiden maita maina maissa maihin + +puu puun puuta puuna puuhun puiden puita puina puissa puihin + +suo suon suota suona suohon soiden soita soina soissa soihin + +bébé bébén bébétä bébénä bébéhen bébéiden bébéijä bébéinä bébéissä bébéihin + +tuohi tuohen tuohta tuohena tuoheen tuohien tuohia tuohina tuohissa tuohiin + +lohi lohen lohta lohena loheen lohien lohia lohina lohissa lohiin + +lahti lahden lahtea lahtena lahteen lahtien lahtia lahtina lahdissa lahtiin + +lumi lumen lunta lumena lumeen lumien lumia lumina lumissa lumiin + +tuomi tuomen tuomea tuomena tuomeen tuomien tuomia tuomina tuomissa tuomiin + +niemi niemen niemeä niemenä niemeen niemien niemiä nieminä niemissä niemiin + +pieni pienen pientä pienenä pieneen pienten pieniä pieninä pienissä pieniin + +nuori nuoren nuorta nuorena nuoreen nuorten nuoria nuorina nuorissa nuoriin + +susi suden sutta sutena suteen susien susia susina susissa susiin + +tosi toden totta totena toteen tosien tosia tosina tosissa tosiin + +hirsi hirren hirttä hirtenä hirteen hirsien hirsiä hirsinä hirsissä hirsiin + +jälsi jällen jälttä jältenä jälteen jälsien jälsiä jälsinä jälsissä jälsiin + +kansi kannen kantta kantena kanteen kansien kansia kansina kansissa kansiin + +lapsi lapsen lasta lapsena lapseen lasten/lapsien lapsia lapsina lapsissa lapsiin + +hapsi hapsen hapsea hapsena hapseen hapsien hapsia hapsina hapsissa hapsiin + +veitsi veitsen veistä veitsenä veitseen veisten/veitsien veitsiä veitsinä veitsissä veitsiin + +peitsi peitsen peistä peitsenä peitseen peisten/peitsien peitsiä peitsinä peitsissä peitsiin + +suksi suksen suksea suksena sukseen suksien suksia suksina suksissa suksiin + +uksi uksen uksea uksena ukseen uksien uksia uksina uksissa uksiin + +kaksi kahden kahta kahtena kahteen kaksien kaksia kaksina kaksissa kaksiin + +sankari sankarin sankaria sankarina sankariin sankareiden sankareita sankareina sankareissa sankareihin + +jumala jumalan jumalaa jumalana jumalaan jumalien jumalia jumalina jumalissa jumaliin + +sisar sisaren sisarta sisarena sisareen sisarien sisaria sisarina sisarissa sisariin + +ahven ahvenen ahventa ahvenena ahveneen ahventen/ahvenien ahvenia ahvenina ahvenissa ahveniin + +uistin uistimen uistinta uistimena uistimeen uistimien uistimia uistimina uistimissa uistimiin + +onneton onnettoman onnetonta onnettomana onnettomaan onnettomien onnettomia onnettomina onnettomissa onnettomiin + +lämmin lämpimän lämmintä lämpimänä lämpimään lämpimien lämpimiä lämpiminä lämpimissä lämpimiin + +pahin pahimman pahinta pahimpana pahimpaan pahimpien pahimpia pahimpina pahimmissa pahimpiin + +vasen vasemman vasenta vasempana vasempaan vasempien vasempia vasempina vasemmissa vasempiin + +muudan muudannen muudatta muudanna muudanteen muudansien muudansia muudansina muudansissa muudansiin + +seitsemän seitsemän seitsemää seitsemänä seitsemään seitsemien seitsemiä seitseminä seitsemissä seitsemiin + +hevonen hevosen hevosta hevosena hevoseen hevosten/hevosien hevosia hevosina hevosissa hevosiin + +vastaus vastauksen vastausta vastauksena vastaukseen vastauksien vastauksia vastauksina vastauksissa vastauksiin + +kalleus kalleuden kalleutta kalleutena kalleuteen kalleuksien kalleuksia kalleuksina kalleuksissa kalleuksiin + +vieras vieraan vierasta vieraana vieraaseen vieraiden vieraita vieraina vieraissa vieraisiin/vieraihin + +kirves kirveen kirvestä kirveenä kirveeseen kirvesten/kirveiden kirveitä kirveinä kirveissä kirveisiin/kirveihin + +kauris kauriin kaurista kauriina kauriiseen kauriiden kauriita kauriina kauriissa kauriisiin + +kaunis kauniin kaunista kauniina kauniiseen kauniiden kauniita kauniina kauniissa kauniisiin + +koiras koiraan koirasta koiraana koiraaseen koiraiden koiraita koiraina koiraissa koiraisiin + +uros uroon urosta uroina uroisiin urosten uroita uroina uroissa uroihin + +mies miehen miestä miehenä mieheen miesten miehiä miehinä miehissä miehiin + +airut airuen airutta airuena airueen airuiden airuita airuina airuissa airuisiin/airuihin + +kevät kevään kevättä keväänä kevääseen keväiden keväitä keväinä keväissä keväihin/keväisiin + +kahdeksan kahdeksan kahdeksaa kahdeksana kahdeksaan kahdeksien kahdeksia kahdeksina kahdeksissa kahdeksiin + +tuhat tuhannen tuhatta tuhantena tuhanteen tuhansien tuhansia tuhansina tuhansissa tuhansiin + +kuollut kuolleen kuollutta kuolleena kuolleeseen kuolleiden kuolleita kuolleina kuolleissa kuolleisiin + +hame hameen hametta hameena hameeseen hameiden hameita hameina hameissa hameisiin/hameihin + +terve terveen tervettä terveenä terveeseen terveiden terveitä terveinä terveissä terveisiin/terveihin + +ori oriin oritta oriina oriiseen oritten oriita oriina oriissa oriihin + +kiiru kiiruun kiirutta kiiruuna kiiruuseen kiiruiden kiiruita kiiruina kiiruissa kiiruihin + +askel askelen askelta askelena askeleen askelten/askelien askelia askelina askelissa askeliin + diff --git a/examples/uusisuomi/correct-Omat.txt b/examples/uusisuomi/correct-Omat.txt new file mode 100644 index 000000000..cd3fe61ed --- /dev/null +++ b/examples/uusisuomi/correct-Omat.txt @@ -0,0 +1,188 @@ +rakkaus rakkauden rakkautta rakkautena rakkauteen rakkauksien rakkauksia rakkauksina rakkauksissa rakkauksiin + +hyvyys hyvyyden hyvyyttä hyvyytenä hyvyyteen hyvyyksien hyvyyksiä hyvyyksinä hyvyyksissä hyvyyksiin + +nainen naisen naista naisena naiseen naisten naisia naisina naisissa naisiin + +hyinen hyisen hyistä hyisenä hyiseen hyisten hyisiä hyisinä hyisissä hyisiin + +maa maan maata maana maahan maiden maita maina maissa maihin + +paluu paluun paluuta paluuna paluuhun paluiden paluita paluina paluissa paluihin + +syy syyn syytä syynä syyhyn syiden syitä syinä syissä syihin + +pii piin piitä piinä piihin piiden piitä piinä piissä piihin + +tienoo tienoon tienoota tienoona tienoohon tienoiden tienoita tienoina tienoissa tienoihin + +suo suon suota suona suohon soiden soita soina soissa soihin + +yö yön yötä yönä yöhön öiden öitä öinä öissä öihin + +tie tien tietä tienä tiehen teiden teitä teinä teissä teihin + +korkea korkean korkeaa korkeana korkeaan korkeiden korkeita korkeina korkeissa korkeisiin + +äkeä äkeän äkeää äkeänä äkeään äkeiden äkeitä äkeinä äkeissä äkeisiin + +kaunis kauniin kaunista kauniina kauniiseen kauniiden kauniita kauniina kauniissa kauniisiin + +tyyris tyyriin tyyristä tyyriinä tyyriiseen tyyriiden tyyriitä tyyriinä tyyriissä tyyriisiin + +ruis rukiin ruista rukiina rukiiseen rukiiden rukiita rukiina rukiissa rukiisiin + +liitin liittimen liitintä liittimenä liittimeen liittimien liittimiä liittiminä liittimissä liittimiin + +laidun laitumen laidunta laitumena laitumeen laitumien laitumia laitumina laitumissa laitumiin + +luistin luistimen luistinta luistimena luistimeen luistimien luistimia luistimina luistimissa luistimiin + +onneton onnettoman onnetonta onnettomana onnettomaan onnettomien onnettomia onnettomina onnettomissa onnettomiin + +nimetön nimettömän nimetöntä nimettömänä nimettömään nimettömien nimettömiä nimettöminä nimettömissä nimettömiin + +perhe perheen perhettä perheenä perheeseen perheiden perheitä perheinä perheissä perheisiin + +olut oluen olutta oluena olueen oluiden oluita oluina oluissa oluisiin + +lyhyt lyhyen lyhyttä lyhyenä lyhyeen lyhyiden lyhyitä lyhyinä lyhyissä lyhyisiin + +rengas renkaan rengasta renkaana renkaaseen renkaiden renkaita renkaina renkaissa renkaisiin + +taivas taivaan taivasta taivaana taivaaseen taivaiden taivaita taivaina taivaissa taivaisiin + +piennar pientaren piennarta pientarena pientaren piennarten pientaria pientarina pientarissa pientariin + +sisar sisaren sisarta sisarena sisareen sisarien sisaria sisarina sisarissa sisariin + +rae rakeen raetta rakeena rakeeseen rakeiden rakeita rakeina rakeissa rakeisiin + +syke sykkeen sykettä sykkeenä sykkeeseen sykkeiden sykkeitä sykkeinä sykkeissä sykkeisiin + +taive taipeen taivetta taipeena taipeeseen taipeiden taipeita taipeina taipeissa taipeisiin + +toive toiveen toivetta toiveena toiveeseen toiveiden toiveita toiveina toiveissa toiveisiin + +selkä selän selkää selkänä selkään selkien selkiä selkinä selissä selkiin + +sukka sukan sukkaa sukkana sukkaan sukkien sukkia sukkina sukissa sukkiin + +kappa kapan kappaa kappana kappaan kappojen kappoja kappoina kapoissa kappoihin + +kauppa kaupan kauppaa kauppana kauppaan kauppojen kauppoja kauppoina kaupoissa kauppoihin + +seura seuran seuraa seurana seuraan seurojen seuroja seuroina seuroissa seuroihin + +suku suvun sukua sukuna sukuun sukujen sukuja sukuina suvuissa sukuihin + +ukko ukon ukkoa ukkona ukkoon ukkojen ukkoja ukkoina ukoissa ukkoihin + +auto auton autoa autona autoon autojen autoja autoina autoissa autoihin + +outo oudon outoa outona outoon outojen outoja outoina oudoissa outoihin + +satu satun satua satuna satuun satujen satuja satuina satuissa satuihin + +satu sadun satua satuna satuun satujen satuja satuina saduissa satuihin + +hyppy hypyn hyppyä hyppynä hyppyyn hyppyjen hyppyjä hyppyinä hypyissä hyppyihin + +baari baarin baaria baarina baariin baarien baareja baareina baareissa baareihin + +paatti paatin paattia paattina paattiin paattien paatteja paatteina paateissa paatteihin + +ahven ahvenen ahventa ahvenena ahveneen ahventen ahvenia ahvenina ahvenissa ahveniin + +sävel sävelen säveltä sävelenä säveleen sävelten säveliä sävelinä sävelissä säveliin + +kalsium kalsiumin kalsiumia kalsiumina kalsiumiin kalsiumien kalsiumeja kalsiumeina kalsiumeissa kalsiumeihin + +susi suden sutta sutena suteen susien susia susina susissa susiin + +jälsi jällen jälttä jältenä jälteen jälsien jälsiä jälsinä jälsissä jälsiin + +korsi korren kortta kortena korteen korsien korsia korsina korsissa korsiin + +kuusi kuusen kuusta kuusena kuuseen kuusten kuusia kuusina kuusissa kuusiin + +saari saaren saarta saarena saareen saarten saaria saarina saarissa saariin + +nuoli nuolen nuolta nuolena nuoleen nuolien nuolia nuolina nuolissa nuoliin + +arpi arven arpea arpena arpeen arpien arpia arpina arvissa arpiin + +jälki jäljen jälkeä jälkenä jälkeen jälkien jälkiä jälkinä jäljissä jälkiin + +veitsi veitsen veistä veitsenä veitseen veisten veitsiä veitsinä veitsissä veitsiin + +meri meren merta merenä mereen merten meriä merinä merissä meriin + +veri veren verta verenä vereen verten veriä verinä verissä veriin + +pakkaus pakkauksen pakkausta pakkauksena pakkaukseen pakkauksien pakkauksia pakkauksina pakkauksissa pakkauksiin + +julius juliuksen juliusta juliuksena juliukseen juliuksien juliuksia juliuksina juliuksissa juliuksiin + +hius hiuksen hiusta hiuksena hiukseen hiuksien hiuksia hiuksina hiuksissa hiuksiin + +paperi paperin paperia paperina paperiin papereiden papereita papereina papereissa papereihin + +banaali banaalin banaalia banaalina banaaliin banaalien banaaleja banaaleina banaaleissa banaaleihin + +nalle nallen nallea nallena nalleen nallien nalleja nalleina nalleissa nalleihin + +matala matalan matalaa matalana matalaan matalien matalia matalina matalissa mataliin + +asema aseman asemaa asemana asemaan asemien asemia asemina asemissa asemiin + +kulkija kulkijan kulkijaa kulkijana kulkijaan kulkijoiden kulkijoita kulkijoina kulkijoissa kulkijoihin + +karahka karahkan karahkaa karahkana karahkaan karahkojen karahkoja karahkoina karahkoissa karahkoihin + +kantaja kantajan kantajaa kantajana kantajaan kantajien kantajia kantajina kantajissa kantajiin + +peruna perunan perunaa perunana perunaan perunien perunia perunina perunissa peruniin + +pasuuna pasuunan pasuunaa pasuunana pasuunaan pasuunojen pasuunoja pasuunoina pasuunoissa pasuunoihin + +ainoa ainoan ainoata ainoana ainoaan ainoiden ainoita ainoina ainoissa ainoihin + +herttua herttuan herttuaa herttuana herttuaan herttuoiden herttuoita herttuoina herttuoissa herttuoihin + +vapaa vapaan vapaata vapaana vapaaseen vapaiden vapaita vapaina vapaissa vapaisiin + +tuohi tuohen tuohta tuohena tuoheen tuohien tuohia tuohina tuohissa tuohiin + +lohi lohen lohta lohena loheen lohien lohia lohina lohissa lohiin + +lumi lumen lunta lumena lumeen lumien lumia lumina lumissa lumiin + +tuomi tuomen tuomea tuomena tuomeen tuomien tuomia tuomina tuomissa tuomiin + +niemi niemen niemeä niemenä niemeen niemien niemiä nieminä niemissä niemiin + +pieni pienen pientä pienenä pieneen pienten pieniä pieninä pienissä pieniin + +nuori nuoren nuorta nuorena nuoreen nuorten nuoria nuorina nuorissa nuoriin + +suksi suksen suksea suksena sukseen suksien suksia suksina suksissa suksiin + +uksi uksen uksea uksena ukseen uksien uksia uksina uksissa uksiin + +sankari sankarin sankaria sankarina sankariin sankareiden sankareita sankareina sankareissa sankareihin + +jumala jumalan jumalaa jumalana jumalaan jumalien jumalia jumalina jumalissa jumaliin + +sisar sisaren sisarta sisarena sisareen sisarien sisaria sisarina sisarissa sisariin + +kirves kirveen kirvestä kirveenä kirveeseen kirvesten/kirveiden kirveitä kirveinä kirveissä kirveisiin/kirveihin + +kives kiveksen kivestä kiveksenä kivekseen kivesten/kiveksien kiveksiä kiveksinä kiveksissä kiveksiin + +mies miehen miestä miehenä mieheen miesten miehiä miehinä miehissä miehiin + +kevät kevään kevättä keväänä kevääseen keväiden keväitä keväinä keväissä keväihin/keväisiin + +sydän sydämen sydäntä sydämenä sydämeen sydanten/sydämien sydämiä sydäminä sydämissä sydämiin +