experiment with Finnish morphology

This commit is contained in:
aarne
2008-01-02 16:54:22 +00:00
parent b3da2791fd
commit cbfb9d5e7d
6 changed files with 901 additions and 0 deletions

View File

@@ -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

View File

@@ -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 ()

View File

@@ -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)

View File

@@ -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 <ukko,ukon> 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
<arp + "i", arv + "en"> =>
nForms_arpi ukko ukon (arp + "i" + a) ;
<arp + "i", _ + "i" + ("a" | "ä")> => -- for b-w compat.
nForms_arpi ukko (init (weakGrade ukko) + "en") ukon ;
<terv + "e", terv + "een"> =>
nForms_rae ukko (terv + "een" + a) ;
<nukk + "e", nuk + "en"> =>
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 <ukko,ukon,ukkoja> 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 <ukko,ukon,ukkoa,ukkoja> 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 <ukko : Str> of {
_ + "ä" => -- kylä,kyliä,kylien,kylissä,kyliin
<ukk + "iä", ukk + "ien", ukk, uk, ukk + "iin"> ;
_ + ("au" | "eu") + _ + "a" => -- kauhojen,seurojen
<ukk + "oja",ukk + "ojen",ukk + "o", uk + "o", ukk + "oihin"> ;
_ + ("o" | "u") + _ + "a" => -- pula,pulia,pulien,pulissa,puliin
<ukk + "ia", ukk + "ien", ukk, uk, ukk + "iin"> ;
_ + "a" => -- kala,kaloja,kalojen,-oissa,-oihin
<ukk + "oja",ukk + "ojen",ukk + "o", uk + "o", ukk + "oihin"> ;
_ => -- suku,sukuja,sukujen,-uissa,-uihin
<ukko + "j" + a,ukko + "jen",ukko, uko, ukko + "ihin">
} ;
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
<ar + "tt" + a, arpi + "en",arpi,ar + "t"> ;
_ => -- kuusen,kuusta
<arp + "t" + a,arp + "ten",arpi, arp> ---- suksi,suksen
} ;
"r" => -- suurta,suurten
<arp + "t" + a,arp + "ten",arpi, arp>;
"l" | "h" => -- tuulta,tuulien
<arp + "t" + a,arp + "ien",arpi, arp>;
_ => -- arpea,arpien,arvissa
<arp + "e" + a,arp + "ien",arv+"i",arp>
} ; ---- 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 <rae : Str> of {
_ + "e" =>
<rae + "tt" + a, rakee + "seen"> ; -- raetta,rakeeseen
_ + "s" =>
<rae + "t" + a, rakee + "seen"> ; -- rengasta,renkaaseen
_ + "t" =>
<rae + "t" + a, rakee + "en"> ; -- olutta,olueen
_ + "r" =>
<rae + "t" + a, rakee + "en"> ; -- 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" | "ä") =>
<sav + "ien", sav + "in" + a, sav + "iss" + a, sav + "iin"> ;
elio + "it" + a@("a" | "ä") =>
<elio + "iden", elio + "in" + a, elio + "iss" + a, elio + "ihin"> ;
maal + "ej" + a@("a" | "ä") =>
<maal + "ien", maal + "ein" + a, maal + "eiss" + a, maal + "eihin"> ;
talo + "j" + a@("a" | "ä") =>
<talo + "jen", talo + "in" + a, talo + "iss" + a, talo + "ihin"> ;
_ => Predef.error (["impossible plural partitive"] ++ savia)
} ;
}

View File

@@ -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

View File

@@ -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