xref: /Lucene/lucene/analysis/common/src/java/org/tartarus/snowball/ext/NorwegianStemmer.java (revision 0b1d8ccba6cf394f707a09217813a25ec1504e50)
1 // Generated by Snowball 2.0.0 - https://snowballstem.org/
2 
3 package org.tartarus.snowball.ext;
4 
5 import org.tartarus.snowball.Among;
6 
7 /**
8  * This class implements the stemming algorithm defined by a snowball script.
9  *
10  * <p>Generated by Snowball 2.0.0 - https://snowballstem.org/
11  */
12 @SuppressWarnings("unused")
13 public class NorwegianStemmer extends org.tartarus.snowball.SnowballStemmer {
14 
15   private static final long serialVersionUID = 1L;
16   private static final java.lang.invoke.MethodHandles.Lookup methodObject =
17       java.lang.invoke.MethodHandles.lookup();
18 
19   private static final Among a_0[] = {
20     new Among("a", -1, 1),
21     new Among("e", -1, 1),
22     new Among("ede", 1, 1),
23     new Among("ande", 1, 1),
24     new Among("ende", 1, 1),
25     new Among("ane", 1, 1),
26     new Among("ene", 1, 1),
27     new Among("hetene", 6, 1),
28     new Among("erte", 1, 3),
29     new Among("en", -1, 1),
30     new Among("heten", 9, 1),
31     new Among("ar", -1, 1),
32     new Among("er", -1, 1),
33     new Among("heter", 12, 1),
34     new Among("s", -1, 2),
35     new Among("as", 14, 1),
36     new Among("es", 14, 1),
37     new Among("edes", 16, 1),
38     new Among("endes", 16, 1),
39     new Among("enes", 16, 1),
40     new Among("hetenes", 19, 1),
41     new Among("ens", 14, 1),
42     new Among("hetens", 21, 1),
43     new Among("ers", 14, 1),
44     new Among("ets", 14, 1),
45     new Among("et", -1, 1),
46     new Among("het", 25, 1),
47     new Among("ert", -1, 3),
48     new Among("ast", -1, 1)
49   };
50 
51   private static final Among a_1[] = {new Among("dt", -1, -1), new Among("vt", -1, -1)};
52 
53   private static final Among a_2[] = {
54     new Among("leg", -1, 1),
55     new Among("eleg", 0, 1),
56     new Among("ig", -1, 1),
57     new Among("eig", 2, 1),
58     new Among("lig", 2, 1),
59     new Among("elig", 4, 1),
60     new Among("els", -1, 1),
61     new Among("lov", -1, 1),
62     new Among("elov", 7, 1),
63     new Among("slov", 7, 1),
64     new Among("hetslov", 9, 1)
65   };
66 
67   private static final char g_v[] = {17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128};
68 
69   private static final char g_s_ending[] = {119, 125, 149, 1};
70 
71   private int I_x;
72   private int I_p1;
73 
r_mark_regions()74   private boolean r_mark_regions() {
75     I_p1 = limit;
76     int v_1 = cursor;
77     {
78       int c = cursor + 3;
79       if (0 > c || c > limit) {
80         return false;
81       }
82       cursor = c;
83     }
84     I_x = cursor;
85     cursor = v_1;
86     golab0:
87     while (true) {
88       int v_2 = cursor;
89       lab1:
90       {
91         if (!(in_grouping(g_v, 97, 248))) {
92           break lab1;
93         }
94         cursor = v_2;
95         break golab0;
96       }
97       cursor = v_2;
98       if (cursor >= limit) {
99         return false;
100       }
101       cursor++;
102     }
103     golab2:
104     while (true) {
105       lab3:
106       {
107         if (!(out_grouping(g_v, 97, 248))) {
108           break lab3;
109         }
110         break golab2;
111       }
112       if (cursor >= limit) {
113         return false;
114       }
115       cursor++;
116     }
117     I_p1 = cursor;
118     lab4:
119     {
120       if (!(I_p1 < I_x)) {
121         break lab4;
122       }
123       I_p1 = I_x;
124     }
125     return true;
126   }
127 
r_main_suffix()128   private boolean r_main_suffix() {
129     int among_var;
130     if (cursor < I_p1) {
131       return false;
132     }
133     int v_2 = limit_backward;
134     limit_backward = I_p1;
135     ket = cursor;
136     among_var = find_among_b(a_0);
137     if (among_var == 0) {
138       limit_backward = v_2;
139       return false;
140     }
141     bra = cursor;
142     limit_backward = v_2;
143     switch (among_var) {
144       case 1:
145         slice_del();
146         break;
147       case 2:
148         lab0:
149         {
150           int v_3 = limit - cursor;
151           lab1:
152           {
153             if (!(in_grouping_b(g_s_ending, 98, 122))) {
154               break lab1;
155             }
156             break lab0;
157           }
158           cursor = limit - v_3;
159           if (!(eq_s_b("k"))) {
160             return false;
161           }
162           if (!(out_grouping_b(g_v, 97, 248))) {
163             return false;
164           }
165         }
166         slice_del();
167         break;
168       case 3:
169         slice_from("er");
170         break;
171     }
172     return true;
173   }
174 
r_consonant_pair()175   private boolean r_consonant_pair() {
176     int v_1 = limit - cursor;
177     if (cursor < I_p1) {
178       return false;
179     }
180     int v_3 = limit_backward;
181     limit_backward = I_p1;
182     ket = cursor;
183     if (find_among_b(a_1) == 0) {
184       limit_backward = v_3;
185       return false;
186     }
187     bra = cursor;
188     limit_backward = v_3;
189     cursor = limit - v_1;
190     if (cursor <= limit_backward) {
191       return false;
192     }
193     cursor--;
194     bra = cursor;
195     slice_del();
196     return true;
197   }
198 
r_other_suffix()199   private boolean r_other_suffix() {
200     if (cursor < I_p1) {
201       return false;
202     }
203     int v_2 = limit_backward;
204     limit_backward = I_p1;
205     ket = cursor;
206     if (find_among_b(a_2) == 0) {
207       limit_backward = v_2;
208       return false;
209     }
210     bra = cursor;
211     limit_backward = v_2;
212     slice_del();
213     return true;
214   }
215 
216   @Override
stem()217   public boolean stem() {
218     int v_1 = cursor;
219     r_mark_regions();
220     cursor = v_1;
221     limit_backward = cursor;
222     cursor = limit;
223     int v_2 = limit - cursor;
224     r_main_suffix();
225     cursor = limit - v_2;
226     int v_3 = limit - cursor;
227     r_consonant_pair();
228     cursor = limit - v_3;
229     int v_4 = limit - cursor;
230     r_other_suffix();
231     cursor = limit - v_4;
232     cursor = limit_backward;
233     return true;
234   }
235 
236   @Override
equals(Object o)237   public boolean equals(Object o) {
238     return o instanceof NorwegianStemmer;
239   }
240 
241   @Override
hashCode()242   public int hashCode() {
243     return NorwegianStemmer.class.getName().hashCode();
244   }
245 }
246