mirror of https://gitee.com/bigwinds/arangodb
230 lines
4.9 KiB
Plaintext
230 lines
4.9 KiB
Plaintext
integers ( p1 p2 )
|
|
booleans ( Y_found )
|
|
|
|
routines (
|
|
prelude postlude
|
|
mark_regions
|
|
shortv
|
|
R1 R2
|
|
Step_1a Step_1b Step_1c Step_2 Step_3 Step_4 Step_5
|
|
exception1
|
|
exception2
|
|
)
|
|
|
|
externals ( stem )
|
|
|
|
groupings ( v v_WXY valid_LI )
|
|
|
|
stringescapes {}
|
|
|
|
define v 'aeiouy'
|
|
define v_WXY v + 'wxY'
|
|
|
|
define valid_LI 'cdeghkmnrt'
|
|
|
|
define prelude as (
|
|
unset Y_found
|
|
do ( ['{'}'] delete)
|
|
do ( ['y'] <-'Y' set Y_found)
|
|
do repeat(goto (v ['y']) <-'Y' set Y_found)
|
|
)
|
|
|
|
define mark_regions as (
|
|
$p1 = limit
|
|
$p2 = limit
|
|
do(
|
|
among (
|
|
'gener'
|
|
'commun' // added May 2005
|
|
'arsen' // added Nov 2006 (arsenic/arsenal)
|
|
// ... extensions possible here ...
|
|
) or (gopast v gopast non-v)
|
|
setmark p1
|
|
gopast v gopast non-v setmark p2
|
|
)
|
|
)
|
|
|
|
backwardmode (
|
|
|
|
define shortv as (
|
|
( non-v_WXY v non-v )
|
|
or
|
|
( non-v v atlimit )
|
|
)
|
|
|
|
define R1 as $p1 <= cursor
|
|
define R2 as $p2 <= cursor
|
|
|
|
define Step_1a as (
|
|
try (
|
|
[substring] among (
|
|
'{'}' '{'}s' '{'}s{'}'
|
|
(delete)
|
|
)
|
|
)
|
|
[substring] among (
|
|
'sses' (<-'ss')
|
|
'ied' 'ies'
|
|
((hop 2 <-'i') or <-'ie')
|
|
's' (next gopast v delete)
|
|
'us' 'ss'
|
|
)
|
|
)
|
|
|
|
define Step_1b as (
|
|
[substring] among (
|
|
'eed' 'eedly'
|
|
(R1 <-'ee')
|
|
'ed' 'edly' 'ing' 'ingly'
|
|
(
|
|
test gopast v delete
|
|
test substring among(
|
|
'at' 'bl' 'iz'
|
|
(<+ 'e')
|
|
'bb' 'dd' 'ff' 'gg' 'mm' 'nn' 'pp' 'rr' 'tt'
|
|
// ignoring double c, h, j, k, q, v, w, and x
|
|
([next] delete)
|
|
'' (atmark p1 test shortv <+ 'e')
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
define Step_1c as (
|
|
['y' or 'Y']
|
|
non-v not atlimit
|
|
<-'i'
|
|
)
|
|
|
|
define Step_2 as (
|
|
[substring] R1 among (
|
|
'tional' (<-'tion')
|
|
'enci' (<-'ence')
|
|
'anci' (<-'ance')
|
|
'abli' (<-'able')
|
|
'entli' (<-'ent')
|
|
'izer' 'ization'
|
|
(<-'ize')
|
|
'ational' 'ation' 'ator'
|
|
(<-'ate')
|
|
'alism' 'aliti' 'alli'
|
|
(<-'al')
|
|
'fulness' (<-'ful')
|
|
'ousli' 'ousness'
|
|
(<-'ous')
|
|
'iveness' 'iviti'
|
|
(<-'ive')
|
|
'biliti' 'bli'
|
|
(<-'ble')
|
|
'ogi' ('l' <-'og')
|
|
'fulli' (<-'ful')
|
|
'lessli' (<-'less')
|
|
'li' (valid_LI delete)
|
|
)
|
|
)
|
|
|
|
define Step_3 as (
|
|
[substring] R1 among (
|
|
'tional' (<- 'tion')
|
|
'ational' (<- 'ate')
|
|
'alize' (<-'al')
|
|
'icate' 'iciti' 'ical'
|
|
(<-'ic')
|
|
'ful' 'ness'
|
|
(delete)
|
|
'ative'
|
|
(R2 delete) // 'R2' added Dec 2001
|
|
)
|
|
)
|
|
|
|
define Step_4 as (
|
|
[substring] R2 among (
|
|
'al' 'ance' 'ence' 'er' 'ic' 'able' 'ible' 'ant' 'ement'
|
|
'ment' 'ent' 'ism' 'ate' 'iti' 'ous' 'ive' 'ize'
|
|
(delete)
|
|
'ion' ('s' or 't' delete)
|
|
)
|
|
)
|
|
|
|
define Step_5 as (
|
|
[substring] among (
|
|
'e' (R2 or (R1 not shortv) delete)
|
|
'l' (R2 'l' delete)
|
|
)
|
|
)
|
|
|
|
define exception2 as (
|
|
|
|
[substring] atlimit among(
|
|
'inning' 'outing' 'canning' 'herring' 'earring'
|
|
'proceed' 'exceed' 'succeed'
|
|
|
|
// ... extensions possible here ...
|
|
|
|
)
|
|
)
|
|
)
|
|
|
|
define exception1 as (
|
|
|
|
[substring] atlimit among(
|
|
|
|
/* special changes: */
|
|
|
|
'skis' (<-'ski')
|
|
'skies' (<-'sky')
|
|
'dying' (<-'die')
|
|
'lying' (<-'lie')
|
|
'tying' (<-'tie')
|
|
|
|
/* special -LY cases */
|
|
|
|
'idly' (<-'idl')
|
|
'gently' (<-'gentl')
|
|
'ugly' (<-'ugli')
|
|
'early' (<-'earli')
|
|
'only' (<-'onli')
|
|
'singly' (<-'singl')
|
|
|
|
// ... extensions possible here ...
|
|
|
|
/* invariant forms: */
|
|
|
|
'sky'
|
|
'news'
|
|
'howe'
|
|
|
|
'atlas' 'cosmos' 'bias' 'andes' // not plural forms
|
|
|
|
// ... extensions possible here ...
|
|
)
|
|
)
|
|
|
|
define postlude as (Y_found repeat(goto (['Y']) <-'y'))
|
|
|
|
define stem as (
|
|
|
|
exception1 or
|
|
not hop 3 or (
|
|
do prelude
|
|
do mark_regions
|
|
backwards (
|
|
|
|
do Step_1a
|
|
|
|
exception2 or (
|
|
|
|
do Step_1b
|
|
do Step_1c
|
|
|
|
do Step_2
|
|
do Step_3
|
|
do Step_4
|
|
|
|
do Step_5
|
|
)
|
|
)
|
|
do postlude
|
|
)
|
|
)
|