~snowball-yiddish-dev/snowball-yiddish/trunk

« back to all changes in this revision

Viewing changes to snowball/algorithms/german2/stem.sbl

  • Committer: richard
  • Date: 2004-02-25 11:41:49 UTC
  • Revision ID: svn-v4:633ccae0-01f4-0310-8c99-d3591da6f01f:trunk:244
Add german2 stemmer, and fixes for some of the compiler warnings reported.

Show diffs side-by-side

added added

removed removed

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