You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

stem_ISO_8859_1.sbl 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. /*
  2. Extra rule for -nisse ending added 11 Dec 2009
  3. */
  4. routines (
  5. prelude postlude
  6. mark_regions
  7. R1 R2
  8. standard_suffix
  9. )
  10. externals ( stem )
  11. integers ( p1 p2 x )
  12. groupings ( v s_ending st_ending )
  13. stringescapes {}
  14. /* special characters (in ISO Latin I) */
  15. stringdef a" hex 'E4'
  16. stringdef o" hex 'F6'
  17. stringdef u" hex 'FC'
  18. stringdef ss hex 'DF'
  19. define v 'aeiouy{a"}{o"}{u"}'
  20. define s_ending 'bdfghklmnrt'
  21. define st_ending s_ending - 'r'
  22. define prelude as (
  23. test repeat (
  24. (
  25. ['{ss}'] <- 'ss'
  26. ) or next
  27. )
  28. repeat goto (
  29. v [('u'] v <- 'U') or
  30. ('y'] v <- 'Y')
  31. )
  32. )
  33. define mark_regions as (
  34. $p1 = limit
  35. $p2 = limit
  36. test(hop 3 setmark x)
  37. gopast v gopast non-v setmark p1
  38. try($p1 < x $p1 = x) // at least 3
  39. gopast v gopast non-v setmark p2
  40. )
  41. define postlude as repeat (
  42. [substring] among(
  43. 'Y' (<- 'y')
  44. 'U' (<- 'u')
  45. '{a"}' (<- 'a')
  46. '{o"}' (<- 'o')
  47. '{u"}' (<- 'u')
  48. '' (next)
  49. )
  50. )
  51. backwardmode (
  52. define R1 as $p1 <= cursor
  53. define R2 as $p2 <= cursor
  54. define standard_suffix as (
  55. do (
  56. [substring] R1 among(
  57. 'em' 'ern' 'er'
  58. ( delete
  59. )
  60. 'e' 'en' 'es'
  61. ( delete
  62. try (['s'] 'nis' delete)
  63. )
  64. 's'
  65. ( s_ending delete
  66. )
  67. )
  68. )
  69. do (
  70. [substring] R1 among(
  71. 'en' 'er' 'est'
  72. ( delete
  73. )
  74. 'st'
  75. ( st_ending hop 3 delete
  76. )
  77. )
  78. )
  79. do (
  80. [substring] R2 among(
  81. 'end' 'ung'
  82. ( delete
  83. try (['ig'] not 'e' R2 delete)
  84. )
  85. 'ig' 'ik' 'isch'
  86. ( not 'e' delete
  87. )
  88. 'lich' 'heit'
  89. ( delete
  90. try (
  91. ['er' or 'en'] R1 delete
  92. )
  93. )
  94. 'keit'
  95. ( delete
  96. try (
  97. [substring] R2 among(
  98. 'lich' 'ig'
  99. ( delete
  100. )
  101. )
  102. )
  103. )
  104. )
  105. )
  106. )
  107. )
  108. define stem as (
  109. do prelude
  110. do mark_regions
  111. backwards
  112. do standard_suffix
  113. do postlude
  114. )