Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

porter.sbl 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. integers ( p1 p2 )
  2. booleans ( Y_found )
  3. routines (
  4. shortv
  5. R1 R2
  6. Step_1a Step_1b Step_1c Step_2 Step_3 Step_4 Step_5a Step_5b
  7. )
  8. externals ( stem )
  9. groupings ( v v_WXY )
  10. define v 'aeiouy'
  11. define v_WXY v + 'wxY'
  12. backwardmode (
  13. define shortv as ( non-v_WXY v non-v )
  14. define R1 as $p1 <= cursor
  15. define R2 as $p2 <= cursor
  16. define Step_1a as (
  17. [substring] among (
  18. 'sses' (<-'ss')
  19. 'ies' (<-'i')
  20. 'ss' ()
  21. 's' (delete)
  22. )
  23. )
  24. define Step_1b as (
  25. [substring] among (
  26. 'eed' (R1 <-'ee')
  27. 'ed'
  28. 'ing' (
  29. test gopast v delete
  30. test substring among(
  31. 'at' 'bl' 'iz'
  32. (<+ 'e')
  33. 'bb' 'dd' 'ff' 'gg' 'mm' 'nn' 'pp' 'rr' 'tt'
  34. // ignoring double c, h, j, k, q, v, w, and x
  35. ([next] delete)
  36. '' (atmark p1 test shortv <+ 'e')
  37. )
  38. )
  39. )
  40. )
  41. define Step_1c as (
  42. ['y' or 'Y']
  43. gopast v
  44. <-'i'
  45. )
  46. define Step_2 as (
  47. [substring] R1 among (
  48. 'tional' (<-'tion')
  49. 'enci' (<-'ence')
  50. 'anci' (<-'ance')
  51. 'abli' (<-'able')
  52. 'entli' (<-'ent')
  53. 'eli' (<-'e')
  54. 'izer' 'ization'
  55. (<-'ize')
  56. 'ational' 'ation' 'ator'
  57. (<-'ate')
  58. 'alli' (<-'al')
  59. 'alism' 'aliti'
  60. (<-'al')
  61. 'fulness' (<-'ful')
  62. 'ousli' 'ousness'
  63. (<-'ous')
  64. 'iveness' 'iviti'
  65. (<-'ive')
  66. 'biliti' (<-'ble')
  67. )
  68. )
  69. define Step_3 as (
  70. [substring] R1 among (
  71. 'alize' (<-'al')
  72. 'icate' 'iciti' 'ical'
  73. (<-'ic')
  74. 'ative' 'ful' 'ness'
  75. (delete)
  76. )
  77. )
  78. define Step_4 as (
  79. [substring] R2 among (
  80. 'al' 'ance' 'ence' 'er' 'ic' 'able' 'ible' 'ant' 'ement'
  81. 'ment' 'ent' 'ou' 'ism' 'ate' 'iti' 'ous' 'ive' 'ize'
  82. (delete)
  83. 'ion' ('s' or 't' delete)
  84. )
  85. )
  86. define Step_5a as (
  87. ['e']
  88. R2 or (R1 not shortv)
  89. delete
  90. )
  91. define Step_5b as (
  92. ['l']
  93. R2 'l'
  94. delete
  95. )
  96. )
  97. define stem as (
  98. unset Y_found
  99. do ( ['y'] <-'Y' set Y_found)
  100. do repeat(goto (v ['y']) <-'Y' set Y_found)
  101. $p1 = limit
  102. $p2 = limit
  103. do(
  104. gopast v gopast non-v setmark p1
  105. gopast v gopast non-v setmark p2
  106. )
  107. backwards (
  108. do Step_1a
  109. do Step_1b
  110. do Step_1c
  111. do Step_2
  112. do Step_3
  113. do Step_4
  114. do Step_5a
  115. do Step_5b
  116. )
  117. do(Y_found repeat(goto (['Y']) <-'y'))
  118. )