blob: d1158c19628a665cffe813bbd92d811934335c34 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
externals ( stem )
/* Special characters in Unicode Latin-1 and Latin Extended-A */
// ' nosine
stringdef a' decimal '261' // ą a + ogonek
stringdef e' decimal '281' // ę e + ogonek
stringdef i' decimal '303' // į i + ogonek
stringdef u' decimal '371' // ų u + ogonek
// . taskas
stringdef e. decimal '279' // ė e + dot
// - ilgoji
stringdef u- decimal '363' // ū u + macron
// * varnele
stringdef c* decimal '269' // č c + caron (haček)
stringdef s* decimal '353' // š s + caron (haček)
stringdef z* decimal '382' // ž z + caron (haček)
// [C](VC)^m[V|C]
// definitions of variables for
// p1 - position of m = 0
// p2 - position of m = 1
integers ( p1 p2 s)
// booleans - to be commented
// CHANGE
booleans ( CHANGE )
// escape symbols for substituting lithuanian characters
stringescapes { }
// groupings
// v - lithuanian vowels
groupings ( v )
// v - all lithuanian vowels
define v 'aeiyou{a'}{e'}{i'}{u'}{e.}{u-}'
// all lithuanian stemmer routines: 4 steps
routines (
step2 R1 step1 fix_chdz fix_gd fix_conflicts
)
backwardmode(
define R1 as $p1 <= cursor
define step1 as (
setlimit tomark p1 for ([substring]) R1 among(
// Daiktavardžiai
// I linksniuotė
'as' 'ias' 'is' 'ys' // vyras, kelias, brolis, gaidys
'o' 'io' // vyro, kelio
'ui' 'iui' // vyrui, keliui
'{a'}' 'i{a'}' '{i'}' // vyrą, kelią, brolį
'u' 'iu' // vyru, keliu
'e' 'yje' // vyre, kelyje
'y' 'au' 'i' // kely, brolau, broli,
'an' // nusižengiman
'ai' 'iai' // vyrai, keliai
'{u'}' 'i{u'}' // vyrų, kelių
'ams' 'am' // vyrams, vyram
'iams' 'iam' // broliams, broliam
'us' 'ius' // vyrus, brolius
'ais' 'iais' // vyrais, keliais
'uose' 'iuose' 'uos' 'iuos' // vyruose, keliuose, vyruos, keliuos
'uosna' 'iuosna' // vyruosna, keliuosna
'ysna' // žutysna
'asis' 'aisi' // sukimasis, sukimaisi
'osi' '{u'}si' // sukimosi, sukimųsi
'uisi' // sukimuisi
'{a'}si' // sukimąsi
'usi' // sukimusi
'esi' // sukimesi
'uo' // mėnuo
// II linksniuote
'a' 'ia' // galva, vysnios
'os' 'ios' // galvos, vysnios
'oj' 'oje' 'ioje' // galvoje, vysnioje
'osna' 'iosna' // galvosna, vyšniosna
'om' 'oms' 'ioms' // galvoms, vysnioms
'omis' 'iomis' // galvomis, vysniomis
'ose' 'iose' // galvose, vysniose
'on' 'ion' // galvon, vyšnion
// III linksniuote
'{e.}' // gervė
'{e.}s' // gervės
'ei' // gervei
'{e'}' // gervę
'{e.}j' '{e.}je' // gervėj, gervėje
'{e.}ms' // gervėms
'es' // gerves
'{e.}mis' // gervėmis
'{e.}se' // gervėse
'{e.}sna' // gervėsna
'{e.}n' // žydaitėn
// IV linksniuote
'aus' 'iaus' // sūnaus, skaičiaus
'umi' 'iumi' // sūnumi, skaičiumi
'uje' 'iuje' // sūnuje, skaičiuje
'iau' // skaičiau
'{u-}s' // sūnūs
'ums' // sūnums
'umis' // sūnumis
'un' 'iun' // sūnun, administratoriun
// V linksniuote
'ies' 'ens' 'enio' 'ers' // avies, vandens, sesers
'eniui' 'eriai' // vandeniui, eriai
'en{i'}' 'er{i'}' // vandenį, seserį
'imi' 'eniu' 'erimi' 'eria' // avimi, vandeniu, seserimi, seseria
'enyje' 'eryje' // vandenyje, seseryje
'ie' 'enie' 'erie' // avie, vandenie, seserie
'enys' 'erys' // vandenys, seserys
// 'en{u'}' konfliktas su 'žandenų' 'antenų'
'er{u'}' // seserų
'ims' 'enims' 'erims' // avims, vandemins, seserims
'enis' // vandenis
'imis' // žebenkštimis
'enimis' // vandenimis
'yse' 'enyse' 'eryse' // avyse, vandenyse, seseryse
// Būdvardžiai
// (i)a linksniuotė
'iem' 'iems' // geriem, geriems
'ame' 'iame' // naujame, mediniame
// Veiksmažodžiai
// Tiesioginė nuosaka
// esamasis laikas
// (i)a asmenuotė
'uosi' 'iuosi' // dirbuosi, traukiuosi
'iesi' // dirbiesi
'asi' 'iasi' // dirbasi, traukiasi
'am{e.}s' 'iam{e.}s' // dirbamės, traukiamės
'at' 'ate' 'iat' 'iate' // dirbat, dirbate, ariat, traukiate
'at{e.}s' 'iat{e.}s' // dirbatės, traukiatės
// i asmenuotė
'isi' // tikisi
'im' // mylim
//'ime' konfliktassu daiktavardžiu vietininku, pvz. 'gėrime'
'im{e.}s' // tikimės
'it' 'ite' // mylit, mylite, tikitės
// 'it{e.}s' konfliktas su priesaga ir dgs. vardininko galūne -ait-ės pvz. žydaitės
// o asmenuotė
'ome' 'omės' // mokome, bijomės
'ot' 'ote' 'otės' // mokot, mokote, bijotės
// būtasis laikas
// o asmenuotė
'{e.}jo' '{e.}josi' // tikėjo, tikėjosi
'ot{e.}s' // tikėjotės
// ė asmenuotė
'eisi' // mokeisi
'{e.}si' // mokėsi
'{e.}m' '{e.}me' // mokėm, mokėme
'{e.}m{e.}s' // mokėmės
'{e.}t' '{e.}te' // mokėt, mokėte
'{e.}t{e.}s' // mokėtės
// būtasis dažninis laikas
'ausi' // mokydavausi
'om{e.}s' // mokydavomės
// būsimasis laikas
'siu' 'siuosi' // dirbsiu, mokysiuosi
'si' 'siesi' // dirbsi, dirbsiesi
's' 'ysis' // dirbs, mokysis
'sim' 'sime' // dirbsim, dirbsime
'sit' 'site' // gersit, gersite
// tariamoji nuosaka
'{c*}iau' '{c*}iausi' // dirbčiau
'tum' 'tumei' // dirbtum, dirbtumei
'tumeis' 'tumeisi' // mokytumeis, mokytumeisi
// 't{u'}' nes blogai batutų -> batų
't{u'}si' // mokytųsi
// 'tume' konfliktas su 'šventume'
'tum{e.}m' // dirbtumėm
'tum{e.}me' // dirbtumėme
'tum{e.}m{e.}s' // mokytumėmės
'tute' 'tum{e.}t' // dirbtute, dirbtumėt
'tum{e.}te' // dirbtumėte
'tum{e.}t{e.}s' // mokytumėtės
// liepiamoji nuosaka
'k' 'ki' // dirbk, dirbki, mokykis
// 'kis' konfliktas viln-išk-is
// 'kime' konfliktas, nes pirkime
'kim{e.}s' // mokykimės
// bendratis
'uoti' 'iuoti' // meluoti, dygsniuoti
'auti' 'iauti' // draugauti, girtuokliauti
'oti' 'ioti' // dovanoti, meškerioti
'{e.}ti' // auklėti
'yti' // akyti
'inti' // auginti
'in{e.}ti' // blusinėti
'enti' // gyventi
'tel{e.}ti' // bumbtelėti
'ter{e.}ti' // bumbterėti
'ti' // skalbti
// 'tis' konfliktas, nes rytme-tis -> rytme
// dalyviai
'{a'}s' 'i{a'}s' '{i'}s' // dirbąs, žaidžiąs, gulįs
't{u'}s' // suktųs -> suk
'sim{e.}s' // suksimės
'sit{e.}s' // suksitės
'kite' // supkite
)
delete
)
define step2 as repeat (
setlimit tomark p1 for ([substring]) among(
// daiktavardziu priesagos
// budvardziu priesagos
// 'in' // konfliktas su 'augintinis' ir 'akiniais' // lauk-in-is
'ing' // tvark-ing-as
'i{s*}k' // lenk-išk-as
'{e.}t' // dem-ėt-as
'ot' // garban-ot-as
'uot' 'iuot' // lang-uot-as, akin-iuot-as
// 'tin', nes augintinis // dirb-tin-is
// 'ut', nes batutas, degutas etc. // maž-ut-is
'yt' // maž-yt-is
'iuk' // maž-iuk-as
'iul' // maž-ul-is
'{e.}l' // maž-ėl-is
'yl' // maž-yl-is
'u{c*}iuk' // maž-učiuk-as
'uliuk' // maž-uliuk-as
'ut{e.}ait' // maž-utėlait-is
'ok' // did-ok-as
'iok' // višč-iok-as
'sv' '{s*}v' 'zgan' // sal-sv-as, pilk-šv-as, bal-zgan-as
'op' 'iop' // dvej-op-as, viener-iop-as
'ain' // apval-ain-as
'yk{s*}t' 'yk{s*}{c*}' // ten-ykšt-is, vakar-ykšč-ias
// laisniai
'esn' // did-esn-is
'aus' 'iaus' // nauj-aus-ias, ger-iaus-ias
// ivardziuotiniai budvardziai
// vyriska gimine
'ias' // žaliasis
'oj' 'ioj' // gerojo, žaliojo
'aj' 'iaj' // gerajam, žaliajam
'{a'}j' 'i{a'}j' // garąjį, žaliąjį
'uoj' 'iuoj' // geruoju, žaliuoju
'iej' // gerieji
'{u'}j' 'i{u'}j' // gerųjų, žaliųjų
'ies' // geriesiems
'uos' 'iuos' // geruosius, žaliuosius
'ais' 'iais' // geraisiais, žaliaisiais
// moteriska gimine
'os' 'ios' // gerosios, žaliosios
'{a'}s' 'i{a'}s' // gerąsios, žaliąsias
// būtasis dažninis laikas
'dav' // ei-dav-o
// dalyvių priesagos
'ant' 'iant'
'int' // tur-int-is
'{e.}j' // tur-ėj-o
'{e'}' //
'{e.}j{e'}'
'{e'}s' // dirb-ęs-is
'siant' // dirb-siant
// pusdalyviai
'dam' // bėg-dam-as
'auj' // ūkinink-auj-a
'jam'
'iau'
'am' // baiminim-ams-i
)
delete
)
define fix_conflicts as (
[substring] among (
// 'lietuvaite' -> 'lietuvaitė', konfliktas su 'myl-ite'
'aite' (<-'ait{e.}' set CHANGE)
// 'lietuvaitės' -> 'lietuvaitė', konfliktas su 'myl-itės'
'ait{e.}s' (<-'ait{e.}' set CHANGE)
// ''ūs-uotės' -> 'ūs-uotė', konfliktas 'mokotės'
'uot{e.}s' (<-'uot{e.}' set CHANGE)
// ''ūs-uote' -> 'ūs-uotė', konfliktas 'mokote'
'uote' (<-'uot{e.}' set CHANGE)
// 'žerėjime' -> 'žėrėjimas', konfliktas su 'žais-ime'
'{e.}jime' (<-'{e.}jimas' set CHANGE)
// 'žvilgesiu' -> 'žvilgesys', konfliktas su 'dirb-siu'
'esiu' (<-'esys' set CHANGE)
// 'duobkasiu' -> 'duobkasys', konfliktas su 'pakasiu'
'asius' (<-'asys' set CHANGE)
// 'žioravime' -> 'žioravimas', konfliktas su 'myl-ime'
'avime' (<-'avimas' set CHANGE)
'ojime' (<-'ojimas' set CHANGE)
// 'advokatės' -> 'advokatė', konfliktas su 'dirb-atės'
'okat{e.}s' (<-'okat{e.}' set CHANGE)
// 'advokate' -> 'advokatė', konfliktas su 'dirb-ate'
'okate' (<-'okat{e.}' set CHANGE)
)
)
define fix_chdz as (
[substring] among (
'{c*}' (<-'t' set CHANGE)
'd{z*}' (<-'d' set CHANGE)
)
)
define fix_gd as (
[substring] among (
'gd' (<-'g' set CHANGE)
//'{e.}k' (<-'{e.}g' set CHANGE)
)
)
)
define stem as (
$p1 = limit
$p2 = limit
$s = size
do (
// priešdėlis 'a' ilgeniuose nei 6 raidės žodžiuose, pvz. 'a-liejus'.
try (test 'a' $s > 6 hop 1)
gopast v gopast non-v setmark p1
gopast v gopast non-v setmark p2
)
backwards (
do fix_conflicts
do step1
do fix_chdz
do step2
do fix_chdz
do fix_gd
)
)