Website now in git not CVS
[xapian.git] / xapian-core / languages / hungarian.sbl
blob7f19a930722eea9ecbab73da1af9127590530d7d
1 // Alias: hu
3 /*
4 Hungarian Stemmer
5 Removes noun inflections
6 */
8 routines (
9     mark_regions
10     R1
11     v_ending
12     case
13     case_special
14     case_other
15     plural
16     owned
17     sing_owner
18     plur_owner
19     instrum
20     factive
21     undouble
22     double
25 externals ( stem )
27 integers ( p1 )
28 groupings ( v )
30 stringescapes {}
32 /* special characters (in Unicode) */
34 stringdef a'  hex 'E1'  //a-acute
35 stringdef e'  hex 'E9'  //e-acute
36 stringdef i'  hex 'ED'  //i-acute
37 stringdef o'  hex 'F3'  //o-acute
38 stringdef o"  hex 'F6'  //o-umlaut
39 stringdef oq  hex '151' //o-double acute
40 stringdef u'  hex 'FA'  //u-acute
41 stringdef u"  hex 'FC'  //u-umlaut
42 stringdef uq  hex '171' //u-double acute
44 define v 'aeiou{a'}{e'}{i'}{o'}{o"}{oq}{u'}{u"}{uq}'
46 define mark_regions as (
48     $p1 = limit
50     (v goto non-v
51      among('cs' 'gy' 'ly' 'ny' 'sz' 'ty' 'zs' 'dzs') or next
52      setmark p1)
53     or
55     (non-v gopast v setmark p1)
58 backwardmode (
60     define R1 as $p1 <= cursor
62     define v_ending as (
63         [substring] R1 among(
64             '{a'}' (<- 'a')
65             '{e'}' (<- 'e')
66         )
67     )
69     define double as (
70         test among('bb' 'cc' 'ccs' 'dd' 'ff' 'gg' 'ggy' 'jj' 'kk' 'll' 'lly' 'mm'
71         'nn' 'nny' 'pp' 'rr' 'ss' 'ssz' 'tt' 'tty' 'vv' 'zz' 'zzs')
72     )
74     define undouble as (
75         next [hop 1] delete
76     )
78     define instrum as(
79         [substring] R1 among(
80             'al' (double)
81             'el' (double)
82         )
83         delete
84         undouble
85     )
88     define case as (
89         [substring] R1 among(
90             'ban' 'ben'
91             'ba' 'be'
92             'ra' 're'
93             'nak' 'nek'
94             'val' 'vel'
95             't{o'}l' 't{oq}l'
96             'r{o'}l' 'r{oq}l'
97             'b{o'}l' 'b{oq}l'
98             'hoz' 'hez' 'h{o"}z'
99             'n{a'}l' 'n{e'}l'
100             'ig'
101             'at' 'et' 'ot' '{o"}t'
102             '{e'}rt'
103             'k{e'}pp' 'k{e'}ppen'
104             'kor'
105             'ul' '{u"}l'
106             'v{a'}' 'v{e'}'
107             'onk{e'}nt' 'enk{e'}nt' 'ank{e'}nt'
108             'k{e'}nt'
109             'en' 'on' 'an' '{o"}n'
110             'n'
111             't'
112         )
113         delete
114         v_ending
115     )
117     define case_special as(
118         [substring] R1 among(
119             '{e'}n' (<- 'e')
120             '{a'}n' (<- 'a')
121             '{a'}nk{e'}nt' (<- 'a')
122         )
123     )
125     define case_other as(
126         [substring] R1 among(
127             'astul' 'est{u"}l' (delete)
128             'stul' 'st{u"}l' (delete)
129             '{a'}stul' (<- 'a')
130             '{e'}st{u"}l' (<- 'e')
131         )
132     )
134     define factive as(
135         [substring] R1 among(
136             '{a'}' (double)
137             '{e'}' (double)
138         )
139         delete
140         undouble
141     )
143     define plural as (
144         [substring] R1 among(
145             '{a'}k' (<- 'a')
146             '{e'}k' (<- 'e')
147             '{o"}k' (delete)
148             'ak' (delete)
149             'ok' (delete)
150             'ek' (delete)
151             'k' (delete)
152         )
153     )
155     define owned as (
156         [substring] R1 among (
157             'ok{e'}' '{o"}k{e'}' 'ak{e'}' 'ek{e'}' (delete)
158             '{e'}k{e'}' (<- 'e')
159             '{a'}k{e'}' (<- 'a')
160             'k{e'}' (delete)
161             '{e'}{e'}i' (<- 'e')
162             '{a'}{e'}i' (<- 'a')
163             '{e'}i'  (delete)
164             '{e'}{e'}' (<- 'e')
165             '{e'}' (delete)
166         )
167     )
169     define sing_owner as (
170         [substring] R1 among(
171             '{u"}nk' 'unk' (delete)
172             '{a'}nk' (<- 'a')
173             '{e'}nk' (<- 'e')
174             'nk' (delete)
175             '{a'}juk' (<- 'a')
176             '{e'}j{u"}k' (<- 'e')
177             'juk' 'j{u"}k' (delete)
178             'uk' '{u"}k' (delete)
179             'em' 'om' 'am' (delete)
180             '{a'}m' (<- 'a')
181             '{e'}m' (<- 'e')
182             'm' (delete)
183             'od' 'ed' 'ad' '{o"}d' (delete)
184             '{a'}d' (<- 'a')
185             '{e'}d' (<- 'e')
186             'd' (delete)
187             'ja' 'je' (delete)
188             'a' 'e' 'o' (delete)
189             '{a'}' (<- 'a')
190             '{e'}' (<- 'e')
191         )
192     )
194     define plur_owner as (
195         [substring] R1 among(
196             'jaim' 'jeim' (delete)
197             '{a'}im' (<- 'a')
198             '{e'}im' (<- 'e')
199             'aim' 'eim' (delete)
200             'im' (delete)
201             'jaid' 'jeid' (delete)
202             '{a'}id' (<- 'a')
203             '{e'}id' (<- 'e')
204             'aid' 'eid' (delete)
205             'id' (delete)
206             'jai' 'jei' (delete)
207             '{a'}i' (<- 'a')
208             '{e'}i' (<- 'e')
209             'ai' 'ei' (delete)
210             'i' (delete)
211             'jaink' 'jeink' (delete)
212             'eink' 'aink' (delete)
213             '{a'}ink' (<- 'a')
214             '{e'}ink' (<- 'e')
215             'ink'
216             'jaitok' 'jeitek' (delete)
217             'aitok' 'eitek' (delete)
218             '{a'}itok' (<- 'a')
219             '{e'}itek' (<- 'e')
220             'itek' (delete)
221             'jeik' 'jaik' (delete)
222             'aik' 'eik' (delete)
223             '{a'}ik' (<- 'a')
224             '{e'}ik' (<- 'e')
225             'ik' (delete)
226         )
227     )
230 define stem as (
231     do mark_regions
232     backwards (
233       do instrum
234         do case
235         do case_special
236         do case_other
237         do factive
238         do owned
239         do sing_owner
240         do plur_owner
241         do plural
242     )