This is an implementation of the stemmer described in:
Ntais, Georgios. Development of a Stemmer for the Greek Language. Diss. Royal Institute of Technology, 2006.
with additional improvements from:
Saroukos, Spyridon. Enhancing a Greek language stemmer. University of Tampere, 2008.
// A stemmer for Modern Greek language, based on:
//
// Ntais, Georgios. Development of a Stemmer for the Greek
// Language. Diss. Royal Institute of Technology, 2006.
// https://sais.se/mthprize/2007/ntais2007.pdf
//
// Saroukos, Spyridon. Enhancing a Greek language stemmer.
// University of Tampere, 2008.
// https://trepo.tuni.fi/bitstream/handle/10024/80480/gradu03463.pdf
stringescapes {}
stringdef a '{U+03B1}' // alpha
stringdef v '{U+03B2}' // beta
stringdef g '{U+03B3}' // gamma
stringdef d '{U+03B4}' // delta
stringdef e '{U+03B5}' // epsilon
stringdef z '{U+03B6}' // zeta
stringdef i '{U+03B7}' // eta
stringdef th '{U+03B8}' // theta
stringdef y '{U+03B9}' // iota
stringdef k '{U+03BA}' // kappa
stringdef l '{U+03BB}' // lambda
stringdef m '{U+03BC}' // mu
stringdef n '{U+03BD}' // nu
stringdef x '{U+03BE}' // xi
stringdef o '{U+03BF}' // omicron
stringdef p '{U+03C0}' // pi
stringdef r '{U+03C1}' // rho
stringdef ss '{U+03C2}' // sigma final
stringdef s '{U+03C3}' // sigma
stringdef t '{U+03C4}' // tau
stringdef u '{U+03C5}' // upsilon
stringdef f '{U+03C6}' // phi
stringdef ch '{U+03C7}' // chi
stringdef ps '{U+03C8}' // psi
stringdef oo '{U+03C9}' // omega
stringdef A '{U+0391}' // Alpha
stringdef V '{U+0392}' // Beta
stringdef G '{U+0393}' // Gamma
stringdef D '{U+0394}' // Delta
stringdef E '{U+0395}' // Epsilon
stringdef Z '{U+0396}' // Zeta
stringdef I '{U+0397}' // Eta
stringdef Th '{U+0398}' // Theta
stringdef Y '{U+0399}' // Iota
stringdef K '{U+039A}' // Kappa
stringdef L '{U+039B}' // Lambda
stringdef M '{U+039C}' // Mu
stringdef N '{U+039D}' // Nu
stringdef X '{U+039E}' // Xi
stringdef O '{U+039F}' // Omicron
stringdef P '{U+03A0}' // Pi
stringdef R '{U+03A1}' // Rho
stringdef S '{U+03A3}' // Sigma
stringdef T '{U+03A4}' // Tau
stringdef U '{U+03A5}' // Upsilon
stringdef F '{U+03A6}' // Phi
stringdef Ch '{U+03A7}' // Chi
stringdef Ps '{U+03A8}' // Psi
stringdef Oo '{U+03A9}' // Omega
stringdef Y: '{U+03AA}' // Iota with dialytika
stringdef U: '{U+03AB}' // Upsilon with dialytika
stringdef a' '{U+03AC}' // alpha with tonos
stringdef e' '{U+03AD}' // epsilon with tonos
stringdef i' '{U+03AE}' // eta with tonos
stringdef y' '{U+03AF}' // iota with tonos
stringdef o' '{U+03CC}' // omicron with tonos
stringdef u' '{U+03CD}' // upsilon with tonos
stringdef oo' '{U+03CE}' // omega with tonos
stringdef i:' '{U+0390}' // iota with dialytika and tonos
stringdef u:' '{U+03B0}' // upsilon with dialytika and tonos
stringdef i: '{U+03CA}' // iota with dialytika
stringdef u: '{U+03CB}' // upsilon with dialytika
stringdef A' '{U+0386}' // Alpha with tonos
stringdef E' '{U+0388}' // Epsilon with tonos
stringdef I' '{U+0389}' // Eta with tonos
stringdef Y' '{U+038A}' // Iota with tonos
stringdef O' '{U+038C}' // Omicron with tonos
stringdef U' '{U+038E}' // Upsilon with tonos
stringdef OO' '{U+038F}' // Omega with tonos
externals ( stem )
booleans ( test1 )
groupings ( v v2 )
routines ( tolower has_min_length
step_s1 step_s2 step_s3 step_s4 step_s5 step_s6 step_s7
step_s8 step_s9 step_s10
step_1 step_2a step_2b step_2c step_2d step_3 step_4
step_5a step_5b step_5c step_5d step_5e step_5f
step_5g step_5h step_5i
step_5j step_5k step_5l step_5m
step_6 step_7 )
define v '{a}{e}{i}{y}{o}{u}{oo}'
define v2 '{a}{e}{i}{y}{o}{oo}'
backwardmode (
define has_min_length as (
$(len >= 3)
)
define tolower as (
repeat (
[substring] among (
'{A}' (<- '{a}')
'{V}' (<- '{v}')
'{G}' (<- '{g}')
'{D}' (<- '{d}')
'{E}' (<- '{e}')
'{Z}' (<- '{z}')
'{I}' (<- '{i}')
'{Th}' (<- '{th}')
'{Y}' (<- '{y}')
'{K}' (<- '{k}')
'{L}' (<- '{l}')
'{M}' (<- '{m}')
'{N}' (<- '{n}')
'{X}' (<- '{x}')
'{O}' (<- '{o}')
'{P}' (<- '{p}')
'{R}' (<- '{r}')
'{S}' (<- '{s}')
'{T}' (<- '{t}')
'{U}' (<- '{u}')
'{F}' (<- '{f}')
'{Ch}' (<- '{ch}')
'{Ps}' (<- '{ps}')
'{Oo}' (<- '{oo}')
'{Y:}' (<- '{y}')
'{U:}' (<- '{u}')
'{a'}' (<- '{a}')
'{e'}' (<- '{e}')
'{i'}' (<- '{i}')
'{y'}' (<- '{y}')
'{o'}' (<- '{o}')
'{u'}' (<- '{u}')
'{oo'}' (<- '{oo}')
'{i:'}' (<- '{i}')
'{u:'}' (<- '{u}')
'{i:}' (<- '{i}')
'{u:}' (<- '{u}')
'{A'}' (<- '{a}')
'{E'}' (<- '{e}')
'{I'}' (<- '{i}')
'{Y'}' (<- '{y}')
'{O'}' (<- '{o}')
'{U'}' (<- '{u}')
'{OO'}' (<- '{oo}')
'{ss}' (<- '{s}')
'' (next)
)
)
)
define step_1 as (
[substring] among (
'{f}{a}{g}{y}{a}' '{f}{a}{g}{y}{o}{u}' '{f}{a}{g}{y}{oo}{n}' (<- '{f}{a}')
'{s}{k}{a}{g}{y}{a}' '{s}{k}{a}{g}{y}{o}{u}' '{s}{k}{a}{g}{y}{oo}{n}' (<- '{s}{k}{a}')
'{o}{l}{o}{g}{y}{o}{u}' '{o}{l}{o}{g}{y}{a}' '{o}{l}{o}{g}{y}{oo}{n}' (<- '{o}{l}{o}')
'{s}{o}{g}{y}{o}{u}' '{s}{o}{g}{y}{a}' '{s}{o}{g}{y}{oo}{n}' (<- '{s}{o}')
'{t}{a}{t}{o}{g}{y}{a}' '{t}{a}{t}{o}{g}{y}{o}{u}' '{t}{a}{t}{o}{g}{y}{oo}{n}' (<- '{t}{a}{t}{o}')
'{k}{r}{e}{a}{s}' '{k}{r}{e}{a}{t}{o}{s}' '{k}{r}{e}{a}{t}{a}' '{k}{r}{e}{a}{t}{oo}{n}' (<- '{k}{r}{e}')
'{p}{e}{r}{a}{s}' '{p}{e}{r}{a}{t}{o}{s}' '{p}{e}{r}{a}{t}{i}' '{p}{e}{r}{a}{t}{a}' '{p}{e}{r}{a}{t}{oo}{n}' (<- '{p}{e}{r}')
'{t}{e}{r}{a}{s}' '{t}{e}{r}{a}{t}{o}{s}' '{t}{e}{r}{a}{t}{a}' '{t}{e}{r}{a}{t}{oo}{n}' (<- '{t}{e}{r}')
'{f}{oo}{s}' '{f}{oo}{t}{o}{s}' '{f}{oo}{t}{a}' '{f}{oo}{t}{oo}{n}' (<- '{f}{oo}')
'{k}{a}{th}{e}{s}{t}{oo}{s}' '{k}{a}{th}{e}{s}{t}{oo}{t}{o}{s}' '{k}{a}{th}{e}{s}{t}{oo}{t}{a}' '{k}{a}{th}{e}{s}{t}{oo}{t}{oo}{n}' (<- '{k}{a}{th}{e}{s}{t}')
'{g}{e}{g}{o}{n}{o}{s}' '{g}{e}{g}{o}{n}{o}{t}{o}{s}' '{g}{e}{g}{o}{n}{o}{t}{a}' '{g}{e}{g}{o}{n}{o}{t}{oo}{n}' (<- '{g}{e}{g}{o}{n}')
)
unset test1
)
define step_s1 as (
[substring] among (
'{y}{z}{a}' '{y}{z}{e}{s}' '{y}{z}{e}' '{y}{z}{a}{m}{e}' '{y}{z}{a}{t}{e}' '{y}{z}{a}{n}' '{y}{z}{a}{n}{e}' '{y}{z}{oo}' '{y}{z}{e}{y}{s}' '{y}{z}{e}{y}'
'{y}{z}{o}{u}{m}{e}' '{y}{z}{e}{t}{e}' '{y}{z}{o}{u}{n}' '{y}{z}{o}{u}{n}{e}' (
delete
unset test1
([] substring atlimit among (
'{a}{n}{a}{m}{p}{a}' '{e}{m}{p}{a}' '{e}{p}{a}' '{x}{a}{n}{a}{p}{a}' '{p}{a}' '{p}{e}{r}{y}{p}{a}' '{a}{th}{r}{o}' '{s}{u}{n}{a}{th}{r}{o}' '{d}{a}{n}{e}'
(<- '{y}')
'{m}{a}{r}{k}' '{k}{o}{r}{n}' '{a}{m}{p}{a}{r}' '{a}{r}{r}' '{v}{a}{th}{u}{r}{y}' '{v}{a}{r}{k}' '{v}' '{v}{o}{l}{v}{o}{r}' '{g}{k}{r}'
'{g}{l}{u}{k}{o}{r}' '{g}{l}{u}{k}{u}{r}' '{y}{m}{p}' '{l}' '{l}{o}{u}' '{m}{a}{r}' '{m}' '{p}{r}' '{m}{p}{r}' '{p}{o}{l}{u}{r}' '{p}'
'{r}' '{p}{y}{p}{e}{r}{o}{r}'
(<- '{y}{z}')
))
)
)
)
define step_s2 as (
[substring] among (
'{oo}{th}{i}{k}{a}' '{oo}{th}{i}{k}{e}{s}' '{oo}{th}{i}{k}{e}' '{oo}{th}{i}{k}{a}{m}{e}' '{oo}{th}{i}{k}{a}{t}{e}' '{oo}{th}{i}{k}{a}{n}' '{oo}{th}{i}{k}{a}{n}{e}' (
delete
unset test1
[] substring atlimit among (
'{a}{l}' '{v}{y}' '{e}{n}' '{u}{ps}' '{l}{y}' '{z}{oo}' '{s}' '{ch}' (<- '{oo}{n}')
)
)
)
)
define step_s3 as (
(['{y}{s}{a}'] atlimit <- '{y}{s}') or
[substring] among (
'{y}{s}{a}' '{y}{s}{e}{s}' '{y}{s}{e}' '{y}{s}{a}{m}{e}' '{y}{s}{a}{t}{e}' '{y}{s}{a}{n}' '{y}{s}{a}{n}{e}' (
delete
unset test1
([] substring atlimit among (
'{a}{n}{a}{m}{p}{a}' '{a}{th}{r}{o}' '{e}{m}{p}{a}' '{e}{s}{e}' '{e}{s}{oo}{k}{l}{e}' '{e}{p}{a}' '{x}{a}{n}{a}{p}{a}' '{e}{p}{e}' '{p}{e}{r}{y}{p}{a}'
'{s}{u}{n}{a}{th}{r}{o}' '{d}{a}{n}{e}' '{k}{l}{e}' '{ch}{a}{r}{t}{o}{p}{a}' '{e}{x}{a}{r}{ch}{a}' '{m}{e}{t}{e}{p}{e}' '{a}{p}{o}{k}{l}{e}'
'{a}{p}{e}{k}{l}{e}' '{e}{k}{l}{e}' '{p}{e}'
(<- '{y}')
'{a}{n}' '{a}{f}' '{g}{e}' '{g}{y}{g}{a}{n}{t}{o}{a}{f}' '{g}{k}{e}' '{d}{i}{m}{o}{k}{r}{a}{t}' '{k}{o}{m}' '{g}{k}' '{m}' '{p}'
'{p}{o}{u}{k}{a}{m}' '{o}{l}{o}' '{l}{a}{r}'
(<- '{y}{s}')
))
)
)
)
define step_s4 as (
[substring] among (
'{y}{s}{oo}' '{y}{s}{e}{y}{s}' '{y}{s}{e}{y}' '{y}{s}{o}{u}{m}{e}' '{y}{s}{e}{t}{e}' '{y}{s}{o}{u}{n}' '{y}{s}{o}{u}{n}{e}' (
delete
unset test1
[] substring atlimit among (
'{a}{n}{a}{m}{p}{a}' '{e}{m}{p}{a}' '{e}{s}{e}' '{e}{s}{oo}{k}{l}{e}' '{e}{p}{a}' '{x}{a}{n}{a}{p}{a}' '{e}{p}{e}' '{p}{e}{r}{y}{p}{a}' '{a}{th}{r}{o}'
'{s}{u}{n}{a}{th}{r}{o}' '{d}{a}{n}{e}' '{k}{l}{e}' '{ch}{a}{r}{t}{o}{p}{a}' '{e}{x}{a}{r}{ch}{a}' '{m}{e}{t}{e}{p}{e}' '{a}{p}{o}{k}{l}{e}' '{a}{p}{e}{k}{l}{e}'
'{e}{k}{l}{e}' '{p}{e}'
(<- '{y}')
)
)
)
)
define step_s5 as (
[substring] among (
'{y}{s}{t}{o}{s}' '{y}{s}{t}{o}{u}' '{y}{s}{t}{o}' '{y}{s}{t}{e}' '{y}{s}{t}{o}{y}' '{y}{s}{t}{oo}{n}' '{y}{s}{t}{o}{u}{s}' '{y}{s}{t}{i}' '{y}{s}{t}{i}{s}'
'{y}{s}{t}{a}' '{y}{s}{t}{e}{s}' (
delete
unset test1
([] substring atlimit among (
'{d}{a}{n}{e}' '{s}{u}{n}{a}{th}{r}{o}' '{k}{l}{e}' '{s}{e}' '{e}{s}{oo}{k}{l}{e}' '{a}{s}{e}' '{p}{l}{e}'
(<- '{y}')
'{m}' '{p}' '{a}{p}' '{a}{r}' '{i}{d}' '{k}{t}' '{s}{k}' '{s}{ch}' '{u}{ps}' '{f}{a}' '{ch}{r}' '{ch}{t}' '{a}{k}{t}'
'{a}{o}{r}' '{a}{s}{ch}' '{a}{t}{a}' '{a}{ch}{n}' '{a}{ch}{t}' '{g}{e}{m}' '{g}{u}{r}' '{e}{m}{p}' '{e}{u}{p}' '{e}{ch}{th}' '{i}{f}{a}'
'{k}{a}{th}' '{k}{a}{k}' '{k}{u}{l}' '{l}{u}{g}' '{m}{a}{k}' '{m}{e}{g}' '{t}{a}{ch}' '{f}{y}{l}' '{ch}{oo}{r}'
(<- '{y}{s}{t}')
))
)
)
)
define step_s6 as (
[substring] among (
'{y}{s}{m}{o}' '{y}{s}{m}{o}{y}' '{y}{s}{m}{o}{s}' '{y}{s}{m}{o}{u}' '{y}{s}{m}{o}{u}{s}' '{y}{s}{m}{oo}{n}' (
delete
unset test1
([] substring atlimit among (
'{s}{e}' '{m}{e}{t}{a}{s}{e}' '{m}{y}{k}{r}{o}{s}{e}' '{e}{g}{k}{l}{e}' '{a}{p}{o}{k}{l}{e}'
(<- '{y}{s}{m}')
'{d}{a}{n}{e}' '{a}{n}{t}{y}{d}{a}{n}{e}'
(<- '{y}')
)) or
([substring] among (
'{a}{g}{n}{oo}{s}{t}{y}{k}' (<- '{a}{g}{n}{oo}{s}{t}')
'{a}{t}{o}{m}{y}{k}' (<- '{a}{t}{o}{m}')
'{g}{n}{oo}{s}{t}{y}{k}' (<- '{g}{n}{oo}{s}{t}')
'{e}{th}{n}{y}{k}' (<- '{e}{th}{n}')
'{e}{k}{l}{e}{k}{t}{y}{k}' (<- '{e}{k}{l}{e}{k}{t}')
'{s}{k}{e}{p}{t}{y}{k}' (<- '{s}{k}{e}{p}{t}')
'{t}{o}{p}{y}{k}' (<- '{t}{o}{p}')
'{a}{l}{e}{x}{a}{n}{d}{r}{y}{n}' (<- '{a}{l}{e}{x}{a}{n}{d}{r}')
'{v}{u}{z}{a}{n}{t}{y}{n}' (<- '{v}{u}{z}{a}{n}{t}')
'{th}{e}{a}{t}{r}{y}{n}' (<- '{th}{e}{a}{t}{r}')
))
)
)
)
define step_s7 as (
[substring] among (
'{a}{r}{a}{k}{y}' '{a}{r}{a}{k}{y}{a}' '{o}{u}{d}{a}{k}{y}' '{o}{u}{d}{a}{k}{y}{a}' (
delete
unset test1
[] substring atlimit among (
'{s}' '{ch}'
(<- '{a}{r}{a}{k}')
)
)
)
)
define step_s8 as (
[substring] among (
'{a}{k}{y}' '{a}{k}{y}{a}' '{y}{t}{s}{a}' '{y}{t}{s}{a}{s}' '{y}{t}{s}{e}{s}' '{y}{t}{s}{oo}{n}' '{a}{r}{a}{k}{y}' '{a}{r}{a}{k}{y}{a}' (
delete
unset test1
([] substring atlimit among (
'{v}{a}{m}{v}' '{v}{r}' '{k}{a}{y}{m}' '{k}{o}{n}' '{k}{o}{r}' '{l}{a}{v}{r}' '{l}{o}{u}{l}' '{m}{e}{r}' '{m}{o}{u}{s}{t}'
'{n}{a}{g}{k}{a}{s}' '{p}{l}' '{r}' '{r}{u}' '{s}' '{s}{k}' '{s}{o}{k}' '{s}{p}{a}{n}' '{t}{z}' '{f}{a}{r}{m}' '{ch}' '{k}{a}{p}{a}{k}'
'{a}{l}{y}{s}{f}' '{a}{m}{v}{r}' '{a}{n}{th}{r}' '{k}' '{f}{u}{l}' '{k}{a}{t}{r}{a}{p}' '{k}{l}{y}{m}' '{m}{a}{l}' '{s}{l}{o}{v}' '{f}'
'{s}{f}' '{t}{s}{e}{ch}{o}{s}{l}{o}{v}'
(<- '{a}{k}')
'{v}' '{v}{a}{l}' '{g}{y}{a}{n}' '{g}{l}' '{z}' '{i}{g}{o}{u}{m}{e}{n}' '{k}{a}{r}{d}' '{m}{a}{k}{r}{u}{n}' '{n}{u}{f}'
'{p}{a}{t}{e}{r}' '{p}' '{t}{o}{s}' '{t}{r}{y}{p}{o}{l}'
// We're implementing the revised algorithm from the Saroukos paper
// which also lists '{k}{o}{n}' and '{s}{k}' here, but these are
// also listed just above in the `Add {a}{k} in the end` exception.
// It seems they're redundant here, so we omit them (otherwise the
// Snowball compiler would report an error).
(<- '{y}{t}{s}')
)) or
([] '{k}{o}{r}' <- '{y}{t}{s}')
)
)
)
define step_s9 as (
[substring] among (
'{y}{d}{y}{o}' '{y}{d}{y}{a}' '{y}{d}{y}{oo}{n}' (
delete
unset test1
([] substring atlimit among (
'{a}{y}{f}{n}' '{y}{r}' '{o}{l}{o}' '{ps}{a}{l}' (<- '{y}{d}')
)) or
([] substring among (
'{e}' '{p}{a}{y}{ch}{n}' (<- '{y}{d}')
))
)
)
)
define step_s10 as (
[substring] among (
'{y}{s}{k}{o}{s}' '{y}{s}{k}{o}{u}' '{y}{s}{k}{o}' '{y}{s}{k}{e}' (
delete
unset test1
[] substring atlimit among (
'{d}' '{y}{v}' '{m}{i}{n}' '{r}' '{f}{r}{a}{g}{k}' '{l}{u}{k}' '{o}{v}{e}{l}'
(<- '{y}{s}{k}')
)
)
)
)
define step_2a as (
[substring] among (
'{a}{d}{e}{s}' '{a}{d}{oo}{n}' (delete)
)
not (substring among (
'{o}{k}' '{m}{a}{m}' '{m}{a}{n}' '{m}{p}{a}{m}{p}' '{p}{a}{t}{e}{r}' '{g}{y}{a}{g}{y}' '{n}{t}{a}{n}{t}' '{k}{u}{r}' '{th}{e}{y}' '{p}{e}{th}{e}{r}'
))
insert '{a}{d}'
)
define step_2b as (
[substring] among (
'{e}{d}{e}{s}' '{e}{d}{oo}{n}' (delete)
)
[] substring among (
'{o}{p}' '{y}{p}' '{e}{m}{p}' '{u}{p}' '{g}{i}{p}' '{d}{a}{p}' '{k}{r}{a}{s}{p}' '{m}{y}{l}' (<- '{e}{d}')
)
)
define step_2c as (
[substring] among (
'{o}{u}{d}{e}{s}' '{o}{u}{d}{oo}{n}' (delete)
)
[] substring among (
'{a}{r}{k}' '{k}{a}{l}{y}{a}{k}' '{p}{e}{t}{a}{l}' '{l}{y}{ch}' '{p}{l}{e}{x}' '{s}{k}' '{s}' '{f}{l}' '{f}{r}' '{v}{e}{l}' '{l}{o}{u}{l}' '{ch}{n}'
'{s}{p}' '{t}{r}{a}{g}' '{f}{e}' (<- '{o}{u}{d}')
)
)
define step_2d as (
[substring] among (
'{e}{oo}{s}' '{e}{oo}{n}' (delete unset test1)
)
[] substring atlimit among (
'{th}' '{d}' '{e}{l}' '{g}{a}{l}' '{n}' '{p}' '{y}{d}' '{p}{a}{r}' (<- '{e}')
)
)
define step_3 as (
[substring] among (
'{y}{a}' '{y}{o}{u}' '{y}{oo}{n}' (delete unset test1)
)
([] v <- '{y}')
)
define step_4 as (
[substring] among (
'{y}{k}{a}' '{y}{k}{o}' '{y}{k}{o}{u}' '{y}{k}{oo}{n}' (delete unset test1)
)
([] v <- '{y}{k}') or
[] substring atlimit among (
'{a}{l}' '{a}{d}' '{e}{n}{d}' '{a}{m}{a}{n}' '{a}{m}{m}{o}{ch}{a}{l}' '{i}{th}' '{a}{n}{i}{th}' '{a}{n}{t}{y}{d}' '{f}{u}{s}' '{v}{r}{oo}{m}' '{g}{e}{r}'
'{e}{x}{oo}{d}' '{k}{a}{l}{p}' '{k}{a}{l}{l}{y}{n}' '{k}{a}{t}{a}{d}' '{m}{o}{u}{l}' '{m}{p}{a}{n}' '{m}{p}{a}{g}{y}{a}{t}' '{m}{p}{o}{l}' '{m}{p}{o}{s}'
'{n}{y}{t}' '{x}{y}{k}' '{s}{u}{n}{o}{m}{i}{l}' '{p}{e}{t}{s}' '{p}{y}{t}{s}' '{p}{y}{k}{a}{n}{t}' '{p}{l}{y}{a}{t}{s}' '{p}{o}{s}{t}{e}{l}{n}' '{p}{r}{oo}{t}{o}{d}'
'{s}{e}{r}{t}' '{s}{u}{n}{a}{d}' '{t}{s}{a}{m}' '{u}{p}{o}{d}' '{f}{y}{l}{o}{n}' '{f}{u}{l}{o}{d}' '{ch}{a}{s}'
(<- '{y}{k}')
)
)
define step_5a as (
do (['{a}{g}{a}{m}{e}'] atlimit <- '{a}{g}{a}{m}')
do (
[substring] among (
'{a}{g}{a}{m}{e}' '{i}{s}{a}{m}{e}' '{o}{u}{s}{a}{m}{e}' '{i}{k}{a}{m}{e}' '{i}{th}{i}{k}{a}{m}{e}' (delete unset test1)
)
)
['{a}{m}{e}']
delete
unset test1
[] substring atlimit among (
'{a}{n}{a}{p}' '{a}{p}{o}{th}' '{a}{p}{o}{k}' '{a}{p}{o}{s}{t}' '{v}{o}{u}{v}' '{x}{e}{th}' '{o}{u}{l}' '{p}{e}{th}' '{p}{y}{k}{r}' '{p}{o}{t}' '{s}{y}{ch}' '{ch}'
(<- '{a}{m}')
)
)
define step_5b as (
do (
[substring] among (
'{a}{g}{a}{n}{e}' '{i}{s}{a}{n}{e}' '{o}{u}{s}{a}{n}{e}' '{y}{o}{n}{t}{a}{n}{e}' '{y}{o}{t}{a}{n}{e}' '{y}{o}{u}{n}{t}{a}{n}{e}' '{o}{n}{t}{a}{n}{e}' '{o}{t}{a}{n}{e}'
'{o}{u}{n}{t}{a}{n}{e}' '{i}{k}{a}{n}{e}' '{i}{th}{i}{k}{a}{n}{e}' (
delete
unset test1
[] substring atlimit among (
'{t}{r}' '{t}{s}' (<- '{a}{g}{a}{n}')
)
)
)
)
['{a}{n}{e}']
delete
unset test1
([] v2 <- '{a}{n}') or
[] substring atlimit among (
'{v}{e}{t}{e}{r}' '{v}{o}{u}{l}{k}' '{v}{r}{a}{ch}{m}' '{g}' '{d}{r}{a}{d}{o}{u}{m}'
'{th}' '{k}{a}{l}{p}{o}{u}{z}' '{k}{a}{s}{t}{e}{l}' '{k}{o}{r}{m}{o}{r}' '{l}{a}{o}{p}{l}' '{m}{oo}{a}{m}{e}{th}'
'{m}' '{m}{o}{u}{s}{o}{u}{l}{m}' '{n}' '{o}{u}{l}' '{p}' '{p}{e}{l}{e}{k}' '{p}{l}' '{p}{o}{l}{y}{s}'
'{p}{o}{r}{t}{o}{l}' '{s}{a}{r}{a}{k}{a}{t}{s}' '{s}{o}{u}{l}{t}' '{t}{s}{a}{r}{l}{a}{t}' '{o}{r}{f}'
'{t}{s}{y}{g}{g}' '{t}{s}{o}{p}' '{f}{oo}{t}{o}{s}{t}{e}{f}' '{ch}' '{ps}{u}{ch}{o}{p}{l}' '{a}{g}'
'{g}{a}{l}' '{g}{e}{r}' '{d}{e}{k}' '{d}{y}{p}{l}' '{a}{m}{e}{r}{y}{k}{a}{n}' '{o}{u}{r}' '{p}{y}{th}'
'{p}{o}{u}{r}{y}{t}' '{s}' '{z}{oo}{n}{t}' '{y}{k}' '{k}{a}{s}{t}' '{k}{o}{p}' '{l}{y}{ch}'
'{l}{o}{u}{th}{i}{r}' '{m}{a}{y}{n}{t}' '{m}{e}{l}' '{s}{y}{g}' '{s}{p}' '{s}{t}{e}{g}' '{t}{r}{a}{g}'
'{t}{s}{a}{g}' '{f}' '{e}{r}' '{a}{d}{a}{p}' '{a}{th}{y}{g}{g}' '{a}{m}{i}{ch}' '{a}{n}{y}{k}'
'{a}{n}{o}{r}{g}' '{a}{p}{i}{g}' '{a}{p}{y}{th}' '{a}{t}{s}{y}{g}{g}' '{v}{a}{s}' '{v}{a}{s}{k}'
'{v}{a}{th}{u}{g}{a}{l}' '{v}{y}{o}{m}{i}{ch}' '{v}{r}{a}{ch}{u}{k}' '{d}{y}{a}{t}' '{d}{y}{a}{f}' '{e}{n}{o}{r}{g}'
'{th}{u}{s}' '{k}{a}{p}{n}{o}{v}{y}{o}{m}{i}{ch}' '{k}{a}{t}{a}{g}{a}{l}' '{k}{l}{y}{v}' '{k}{o}{y}{l}{a}{r}{f}'
'{l}{y}{v}' '{m}{e}{g}{l}{o}{v}{y}{o}{m}{i}{ch}' '{m}{y}{k}{r}{o}{v}{y}{o}{m}{i}{ch}' '{n}{t}{a}{v}'
'{x}{i}{r}{o}{k}{l}{y}{v}' '{o}{l}{y}{g}{o}{d}{a}{m}' '{o}{l}{o}{g}{a}{l}' '{p}{e}{n}{t}{a}{r}{f}' '{p}{e}{r}{i}{f}'
'{p}{e}{r}{y}{t}{r}' '{p}{l}{a}{t}' '{p}{o}{l}{u}{d}{a}{p}' '{p}{o}{l}{u}{m}{i}{ch}' '{s}{t}{e}{f}' '{t}{a}{v}'
'{t}{e}{t}' '{u}{p}{e}{r}{i}{f}' '{u}{p}{o}{k}{o}{p}' '{ch}{a}{m}{i}{l}{o}{d}{a}{p}' '{ps}{i}{l}{o}{t}{a}{v}'
(<- '{a}{n}')
)
)
define step_5c as (
do (
[substring] among (
'{i}{s}{e}{t}{e}' (delete unset test1)
)
)
['{e}{t}{e}']
delete
unset test1
([] v2 <- '{e}{t}') or
([] substring among (
'{o}{d}' '{a}{y}{r}' '{f}{o}{r}' '{t}{a}{th}' '{d}{y}{a}{th}' '{s}{ch}' '{e}{n}{d}' '{e}{u}{r}' '{t}{y}{th}' '{u}{p}{e}{r}{th}'
'{r}{a}{th}' '{e}{n}{th}' '{r}{o}{th}' '{s}{th}' '{p}{u}{r}' '{a}{y}{n}' '{s}{u}{n}{d}' '{s}{u}{n}' '{s}{u}{n}{th}' '{ch}{oo}{r}'
'{p}{o}{n}' '{v}{r}' '{k}{a}{th}' '{e}{u}{th}' '{e}{k}{th}' '{n}{e}{t}' '{r}{o}{n}' '{a}{r}{k}' '{v}{a}{r}' '{v}{o}{l}' '{oo}{f}{e}{l}'
(<- '{e}{t}')
)) or
[] substring atlimit among (
'{a}{v}{a}{r}' '{v}{e}{n}' '{e}{n}{a}{r}' '{a}{v}{r}' '{a}{d}' '{a}{th}' '{a}{n}' '{a}{p}{l}' '{v}{a}{r}{o}{n}' '{n}{t}{r}' '{s}{k}' '{k}{o}{p}'
'{m}{p}{o}{r}' '{n}{y}{f}' '{p}{a}{g}' '{p}{a}{r}{a}{k}{a}{l}' '{s}{e}{r}{p}' '{s}{k}{e}{l}' '{s}{u}{r}{f}' '{t}{o}{k}' '{u}' '{d}' '{e}{m}'
'{th}{a}{r}{r}' '{th}'
(<- '{e}{t}')
)
)
define step_5d as (
[substring] among (
'{o}{n}{t}{a}{s}' '{oo}{n}{t}{a}{s}' (
delete
unset test1
([] '{a}{r}{ch}' atlimit <- '{o}{n}{t}') or
([] '{k}{r}{e}' <- '{oo}{n}{t}')
)
)
)
define step_5e as (
[substring] among (
'{o}{m}{a}{s}{t}{e}' '{y}{o}{m}{a}{s}{t}{e}' (
delete
unset test1
([] '{o}{n}' atlimit <- '{o}{m}{a}{s}{t}')
)
)
)
define step_5f as (
do (
['{y}{e}{s}{t}{e}']
delete
unset test1
[] substring atlimit among (
'{p}' '{a}{p}' '{s}{u}{m}{p}' '{a}{s}{u}{m}{p}' '{a}{k}{a}{t}{a}{p}' '{a}{m}{e}{t}{a}{m}{f}' (<- '{y}{e}{s}{t}')
)
)
['{e}{s}{t}{e}']
delete
unset test1
[] substring atlimit among (
'{a}{l}' '{a}{r}' '{e}{k}{t}{e}{l}' '{z}' '{m}' '{x}' '{p}{a}{r}{a}{k}{a}{l}' '{p}{r}{o}' '{n}{y}{s}'
(<- '{y}{e}{s}{t}')
)
)
define step_5g as (
do (
[substring] among (
'{i}{th}{i}{k}{a}' '{i}{th}{i}{k}{e}{s}' '{i}{th}{i}{k}{e}' (delete unset test1)
)
)
[substring] among (
'{i}{k}{a}' '{i}{k}{e}{s}' '{i}{k}{e}' (
delete
unset test1
([] substring among (
'{s}{k}{oo}{l}' '{s}{k}{o}{u}{l}' '{n}{a}{r}{th}' '{s}{f}' '{o}{th}' '{p}{y}{th}' (<- '{i}{k}')
)) or
([] substring atlimit among (
'{d}{y}{a}{th}' '{th}' '{p}{a}{r}{a}{k}{a}{t}{a}{th}' '{p}{r}{o}{s}{th}' '{s}{u}{n}{th}' (<- '{i}{k}')
))
)
)
)
define step_5h as (
[substring] among (
'{o}{u}{s}{a}' '{o}{u}{s}{e}{s}' '{o}{u}{s}{e}' (
delete
unset test1
([] substring among (
'{p}{o}{d}{a}{r}' '{v}{l}{e}{p}' '{p}{a}{n}{t}{a}{ch}' '{f}{r}{u}{d}' '{m}{a}{n}{t}{y}{l}' '{m}{a}{l}{l}' '{k}{u}{m}{a}{t}' '{l}{a}{ch}' '{l}{i}{g}'
'{f}{a}{g}' '{o}{m}' '{p}{r}{oo}{t}' (<- '{o}{u}{s}')
)) or
([] substring atlimit among (
'{f}{a}{r}{m}{a}{k}' '{ch}{a}{d}' '{a}{g}{k}' '{a}{n}{a}{r}{r}' '{v}{r}{o}{m}' '{e}{k}{l}{y}{p}' '{l}{a}{m}{p}{y}{d}' '{l}{e}{ch}' '{m}' '{p}{a}{t}'
'{r}' '{l}' '{m}{e}{d}' '{m}{e}{s}{a}{z}' '{u}{p}{o}{t}{e}{y}{n}' '{a}{m}' '{a}{y}{th}' '{a}{n}{i}{k}' '{d}{e}{s}{p}{o}{z}'
'{e}{n}{d}{y}{a}{f}{e}{r}' '{d}{e}' '{d}{e}{u}{t}{e}{r}{e}{u}' '{k}{a}{th}{a}{r}{e}{u}' '{p}{l}{e}' '{t}{s}{a}'
(<- '{o}{u}{s}')
))
)
)
)
define step_5i as (
[substring] among (
'{a}{g}{a}' '{a}{g}{e}{s}' '{a}{g}{e}' (
delete
unset test1
([] '{k}{o}{l}{l}' <- '{a}{g}') or (
([] substring among (
'{ps}{o}{f}' '{n}{a}{u}{l}{o}{ch}' ()
'{o}{f}' '{p}{e}{l}' '{ch}{o}{r}{t}' '{l}{l}' '{s}{f}' '{r}{p}' '{f}{r}' '{p}{r}' '{l}{o}{ch}' '{s}{m}{i}{n}'
(<- '{a}{g}')
)) or
([] substring atlimit among (
'{a}{v}{a}{s}{t}' '{p}{o}{l}{u}{f}' '{a}{d}{i}{f}' '{p}{a}{m}{f}' '{r}' '{a}{s}{p}' '{a}{f}' '{a}{m}{a}{l}' '{a}{m}{a}{l}{l}{y}'
'{a}{n}{u}{s}{t}' '{a}{p}{e}{r}' '{a}{s}{p}{a}{r}' '{a}{ch}{a}{r}' '{d}{e}{r}{v}{e}{n}' '{d}{r}{o}{s}{o}{p}' '{x}{e}{f}' '{n}{e}{o}{p}'
'{n}{o}{m}{o}{t}' '{o}{l}{o}{p}' '{o}{m}{o}{t}' '{p}{r}{o}{s}{t}' '{p}{r}{o}{s}{oo}{p}{o}{p}' '{s}{u}{m}{p}' '{s}{u}{n}{t}' '{t}' '{u}{p}{o}{t}'
'{ch}{a}{r}' '{a}{e}{y}{p}' '{a}{y}{m}{o}{s}{t}' '{a}{n}{u}{p}' '{a}{p}{o}{t}' '{a}{r}{t}{y}{p}' '{d}{y}{a}{t}' '{e}{n}' '{e}{p}{y}{t}'
'{k}{r}{o}{k}{a}{l}{o}{p}' '{s}{y}{d}{i}{r}{o}{p}' '{l}' '{n}{a}{u}' '{o}{u}{l}{a}{m}' '{o}{u}{r}' '{p}' '{t}{r}' '{m}'
(<- '{a}{g}')
))
)
)
)
)
define step_5j as (
[substring] among (
'{i}{s}{e}' '{i}{s}{o}{u}' '{i}{s}{a}' (delete unset test1)
)
[] substring atlimit among (
'{n}' '{ch}{e}{r}{s}{o}{n}' '{d}{oo}{d}{e}{k}{a}{n}' '{e}{r}{i}{m}{o}{n}' '{m}{e}{g}{a}{l}{o}{n}' '{e}{p}{t}{a}{n}' (<- '{i}{s}')
)
)
define step_5k as (
[substring] among (
'{i}{s}{t}{e}' (delete unset test1)
)
[] substring atlimit among (
'{a}{s}{v}' '{s}{v}' '{a}{ch}{r}' '{ch}{r}' '{a}{p}{l}' '{a}{e}{y}{m}{n}' '{d}{u}{s}{ch}{r}' '{e}{u}{ch}{r}' '{k}{o}{y}{n}{o}{ch}{r}' '{p}{a}{l}{y}{m}{ps}'
(<- '{i}{s}{t}')
)
)
define step_5l as (
[substring] among (
'{o}{u}{n}{e}' '{i}{s}{o}{u}{n}{e}' '{i}{th}{o}{u}{n}{e}' (delete unset test1)
)
[] substring atlimit among (
'{n}' '{r}' '{s}{p}{y}' '{s}{t}{r}{a}{v}{o}{m}{o}{u}{t}{s}' '{k}{a}{k}{o}{m}{o}{u}{t}{s}' '{e}{x}{oo}{n}' (<- '{o}{u}{n}')
)
)
define step_5m as (
[substring] among (
'{o}{u}{m}{e}' '{i}{s}{o}{u}{m}{e}' '{i}{th}{o}{u}{m}{e}' (delete unset test1)
)
[] substring atlimit among (
'{p}{a}{r}{a}{s}{o}{u}{s}' '{f}' '{ch}' '{oo}{r}{y}{o}{p}{l}' '{a}{z}' '{a}{l}{l}{o}{s}{o}{u}{s}' '{a}{s}{o}{u}{s}'
(<- '{o}{u}{m}')
)
)
define step_6 as (
do (
[substring] among (
'{m}{a}{t}{a}' '{m}{a}{t}{oo}{n}' '{m}{a}{t}{o}{s}' (<- '{m}{a}')
)
)
test1
[substring] among (
'{a}' '{a}{g}{a}{t}{e}' '{a}{g}{a}{n}' '{a}{e}{y}' '{a}{m}{a}{y}' '{a}{n}' '{a}{s}' '{a}{s}{a}{y}' '{a}{t}{a}{y}' '{a}{oo}' '{e}' '{e}{y}'
'{e}{y}{s}' '{e}{y}{t}{e}' '{e}{s}{a}{y}' '{e}{s}' '{e}{t}{a}{y}' '{y}' '{y}{e}{m}{a}{y}' '{y}{e}{m}{a}{s}{t}{e}' '{y}{e}{t}{a}{y}' '{y}{e}{s}{a}{y}'
'{y}{e}{s}{a}{s}{t}{e}' '{y}{o}{m}{a}{s}{t}{a}{n}' '{y}{o}{m}{o}{u}{n}' '{y}{o}{m}{o}{u}{n}{a}' '{y}{o}{n}{t}{a}{n}' '{y}{o}{n}{t}{o}{u}{s}{a}{n}' '{y}{o}{s}{a}{s}{t}{a}{n}'
'{y}{o}{s}{a}{s}{t}{e}' '{y}{o}{s}{o}{u}{n}' '{y}{o}{s}{o}{u}{n}{a}' '{y}{o}{t}{a}{n}' '{y}{o}{u}{m}{a}' '{y}{o}{u}{m}{a}{s}{t}{e}' '{y}{o}{u}{n}{t}{a}{y}'
'{y}{o}{u}{n}{t}{a}{n}' '{i}' '{i}{d}{e}{s}' '{i}{d}{oo}{n}' '{i}{th}{e}{y}' '{i}{th}{e}{y}{s}' '{i}{th}{e}{y}{t}{e}' '{i}{th}{i}{k}{a}{t}{e}' '{i}{th}{i}{k}{a}{n}'
'{i}{th}{o}{u}{n}' '{i}{th}{oo}' '{i}{k}{a}{t}{e}' '{i}{k}{a}{n}' '{i}{s}' '{i}{s}{a}{n}' '{i}{s}{a}{t}{e}' '{i}{s}{e}{y}' '{i}{s}{e}{s}' '{i}{s}{o}{u}{n}'
'{i}{s}{oo}' '{o}' '{o}{y}' '{o}{m}{a}{y}' '{o}{m}{a}{s}{t}{a}{n}' '{o}{m}{o}{u}{n}' '{o}{m}{o}{u}{n}{a}' '{o}{n}{t}{a}{y}' '{o}{n}{t}{a}{n}'
'{o}{n}{t}{o}{u}{s}{a}{n}' '{o}{s}' '{o}{s}{a}{s}{t}{a}{n}' '{o}{s}{a}{s}{t}{e}' '{o}{s}{o}{u}{n}' '{o}{s}{o}{u}{n}{a}' '{o}{t}{a}{n}' '{o}{u}' '{o}{u}{m}{a}{y}'
'{o}{u}{m}{a}{s}{t}{e}' '{o}{u}{n}' '{o}{u}{n}{t}{a}{y}' '{o}{u}{n}{t}{a}{n}' '{o}{u}{s}' '{o}{u}{s}{a}{n}' '{o}{u}{s}{a}{t}{e}' '{u}' '{u}{s}' '{oo}'
'{oo}{n}' (delete)
)
)
define step_7 as (
[substring] among (
'{e}{s}{t}{e}{r}' '{e}{s}{t}{a}{t}' '{o}{t}{e}{r}' '{o}{t}{a}{t}' '{u}{t}{e}{r}' '{u}{t}{a}{t}' '{oo}{t}{e}{r}' '{oo}{t}{a}{t}' (delete)
)
)
)
define stem as (
backwards (
do tolower
has_min_length
set test1
do step_1
do step_s1
do step_s2
do step_s3
do step_s4
do step_s5
do step_s6
do step_s7
do step_s8
do step_s9
do step_s10
do step_2a
do step_2b
do step_2c
do step_2d
do step_3
do step_4
do step_5a
do step_5b
do step_5c
do step_5d
do step_5e
do step_5f
do step_5g
do step_5h
do step_5j
do step_5i
do step_5k
do step_5l
do step_5m
do step_6
do step_7
)
)