xref: /Lucene/lucene/analysis/common/src/java/org/tartarus/snowball/ext/RussianStemmer.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 RussianStemmer 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("\u0432", -1, 1),
21     new Among("\u0438\u0432", 0, 2),
22     new Among("\u044B\u0432", 0, 2),
23     new Among("\u0432\u0448\u0438", -1, 1),
24     new Among("\u0438\u0432\u0448\u0438", 3, 2),
25     new Among("\u044B\u0432\u0448\u0438", 3, 2),
26     new Among("\u0432\u0448\u0438\u0441\u044C", -1, 1),
27     new Among("\u0438\u0432\u0448\u0438\u0441\u044C", 6, 2),
28     new Among("\u044B\u0432\u0448\u0438\u0441\u044C", 6, 2)
29   };
30 
31   private static final Among a_1[] = {
32     new Among("\u0435\u0435", -1, 1),
33     new Among("\u0438\u0435", -1, 1),
34     new Among("\u043E\u0435", -1, 1),
35     new Among("\u044B\u0435", -1, 1),
36     new Among("\u0438\u043C\u0438", -1, 1),
37     new Among("\u044B\u043C\u0438", -1, 1),
38     new Among("\u0435\u0439", -1, 1),
39     new Among("\u0438\u0439", -1, 1),
40     new Among("\u043E\u0439", -1, 1),
41     new Among("\u044B\u0439", -1, 1),
42     new Among("\u0435\u043C", -1, 1),
43     new Among("\u0438\u043C", -1, 1),
44     new Among("\u043E\u043C", -1, 1),
45     new Among("\u044B\u043C", -1, 1),
46     new Among("\u0435\u0433\u043E", -1, 1),
47     new Among("\u043E\u0433\u043E", -1, 1),
48     new Among("\u0435\u043C\u0443", -1, 1),
49     new Among("\u043E\u043C\u0443", -1, 1),
50     new Among("\u0438\u0445", -1, 1),
51     new Among("\u044B\u0445", -1, 1),
52     new Among("\u0435\u044E", -1, 1),
53     new Among("\u043E\u044E", -1, 1),
54     new Among("\u0443\u044E", -1, 1),
55     new Among("\u044E\u044E", -1, 1),
56     new Among("\u0430\u044F", -1, 1),
57     new Among("\u044F\u044F", -1, 1)
58   };
59 
60   private static final Among a_2[] = {
61     new Among("\u0435\u043C", -1, 1),
62     new Among("\u043D\u043D", -1, 1),
63     new Among("\u0432\u0448", -1, 1),
64     new Among("\u0438\u0432\u0448", 2, 2),
65     new Among("\u044B\u0432\u0448", 2, 2),
66     new Among("\u0449", -1, 1),
67     new Among("\u044E\u0449", 5, 1),
68     new Among("\u0443\u044E\u0449", 6, 2)
69   };
70 
71   private static final Among a_3[] = {
72     new Among("\u0441\u044C", -1, 1), new Among("\u0441\u044F", -1, 1)
73   };
74 
75   private static final Among a_4[] = {
76     new Among("\u043B\u0430", -1, 1),
77     new Among("\u0438\u043B\u0430", 0, 2),
78     new Among("\u044B\u043B\u0430", 0, 2),
79     new Among("\u043D\u0430", -1, 1),
80     new Among("\u0435\u043D\u0430", 3, 2),
81     new Among("\u0435\u0442\u0435", -1, 1),
82     new Among("\u0438\u0442\u0435", -1, 2),
83     new Among("\u0439\u0442\u0435", -1, 1),
84     new Among("\u0435\u0439\u0442\u0435", 7, 2),
85     new Among("\u0443\u0439\u0442\u0435", 7, 2),
86     new Among("\u043B\u0438", -1, 1),
87     new Among("\u0438\u043B\u0438", 10, 2),
88     new Among("\u044B\u043B\u0438", 10, 2),
89     new Among("\u0439", -1, 1),
90     new Among("\u0435\u0439", 13, 2),
91     new Among("\u0443\u0439", 13, 2),
92     new Among("\u043B", -1, 1),
93     new Among("\u0438\u043B", 16, 2),
94     new Among("\u044B\u043B", 16, 2),
95     new Among("\u0435\u043C", -1, 1),
96     new Among("\u0438\u043C", -1, 2),
97     new Among("\u044B\u043C", -1, 2),
98     new Among("\u043D", -1, 1),
99     new Among("\u0435\u043D", 22, 2),
100     new Among("\u043B\u043E", -1, 1),
101     new Among("\u0438\u043B\u043E", 24, 2),
102     new Among("\u044B\u043B\u043E", 24, 2),
103     new Among("\u043D\u043E", -1, 1),
104     new Among("\u0435\u043D\u043E", 27, 2),
105     new Among("\u043D\u043D\u043E", 27, 1),
106     new Among("\u0435\u0442", -1, 1),
107     new Among("\u0443\u0435\u0442", 30, 2),
108     new Among("\u0438\u0442", -1, 2),
109     new Among("\u044B\u0442", -1, 2),
110     new Among("\u044E\u0442", -1, 1),
111     new Among("\u0443\u044E\u0442", 34, 2),
112     new Among("\u044F\u0442", -1, 2),
113     new Among("\u043D\u044B", -1, 1),
114     new Among("\u0435\u043D\u044B", 37, 2),
115     new Among("\u0442\u044C", -1, 1),
116     new Among("\u0438\u0442\u044C", 39, 2),
117     new Among("\u044B\u0442\u044C", 39, 2),
118     new Among("\u0435\u0448\u044C", -1, 1),
119     new Among("\u0438\u0448\u044C", -1, 2),
120     new Among("\u044E", -1, 2),
121     new Among("\u0443\u044E", 44, 2)
122   };
123 
124   private static final Among a_5[] = {
125     new Among("\u0430", -1, 1),
126     new Among("\u0435\u0432", -1, 1),
127     new Among("\u043E\u0432", -1, 1),
128     new Among("\u0435", -1, 1),
129     new Among("\u0438\u0435", 3, 1),
130     new Among("\u044C\u0435", 3, 1),
131     new Among("\u0438", -1, 1),
132     new Among("\u0435\u0438", 6, 1),
133     new Among("\u0438\u0438", 6, 1),
134     new Among("\u0430\u043C\u0438", 6, 1),
135     new Among("\u044F\u043C\u0438", 6, 1),
136     new Among("\u0438\u044F\u043C\u0438", 10, 1),
137     new Among("\u0439", -1, 1),
138     new Among("\u0435\u0439", 12, 1),
139     new Among("\u0438\u0435\u0439", 13, 1),
140     new Among("\u0438\u0439", 12, 1),
141     new Among("\u043E\u0439", 12, 1),
142     new Among("\u0430\u043C", -1, 1),
143     new Among("\u0435\u043C", -1, 1),
144     new Among("\u0438\u0435\u043C", 18, 1),
145     new Among("\u043E\u043C", -1, 1),
146     new Among("\u044F\u043C", -1, 1),
147     new Among("\u0438\u044F\u043C", 21, 1),
148     new Among("\u043E", -1, 1),
149     new Among("\u0443", -1, 1),
150     new Among("\u0430\u0445", -1, 1),
151     new Among("\u044F\u0445", -1, 1),
152     new Among("\u0438\u044F\u0445", 26, 1),
153     new Among("\u044B", -1, 1),
154     new Among("\u044C", -1, 1),
155     new Among("\u044E", -1, 1),
156     new Among("\u0438\u044E", 30, 1),
157     new Among("\u044C\u044E", 30, 1),
158     new Among("\u044F", -1, 1),
159     new Among("\u0438\u044F", 33, 1),
160     new Among("\u044C\u044F", 33, 1)
161   };
162 
163   private static final Among a_6[] = {
164     new Among("\u043E\u0441\u0442", -1, 1), new Among("\u043E\u0441\u0442\u044C", -1, 1)
165   };
166 
167   private static final Among a_7[] = {
168     new Among("\u0435\u0439\u0448\u0435", -1, 1),
169     new Among("\u043D", -1, 2),
170     new Among("\u0435\u0439\u0448", -1, 1),
171     new Among("\u044C", -1, 3)
172   };
173 
174   private static final char g_v[] = {33, 65, 8, 232};
175 
176   private int I_p2;
177   private int I_pV;
178 
r_mark_regions()179   private boolean r_mark_regions() {
180     I_pV = limit;
181     I_p2 = limit;
182     int v_1 = cursor;
183     lab0:
184     {
185       golab1:
186       while (true) {
187         lab2:
188         {
189           if (!(in_grouping(g_v, 1072, 1103))) {
190             break lab2;
191           }
192           break golab1;
193         }
194         if (cursor >= limit) {
195           break lab0;
196         }
197         cursor++;
198       }
199       I_pV = cursor;
200       golab3:
201       while (true) {
202         lab4:
203         {
204           if (!(out_grouping(g_v, 1072, 1103))) {
205             break lab4;
206           }
207           break golab3;
208         }
209         if (cursor >= limit) {
210           break lab0;
211         }
212         cursor++;
213       }
214       golab5:
215       while (true) {
216         lab6:
217         {
218           if (!(in_grouping(g_v, 1072, 1103))) {
219             break lab6;
220           }
221           break golab5;
222         }
223         if (cursor >= limit) {
224           break lab0;
225         }
226         cursor++;
227       }
228       golab7:
229       while (true) {
230         lab8:
231         {
232           if (!(out_grouping(g_v, 1072, 1103))) {
233             break lab8;
234           }
235           break golab7;
236         }
237         if (cursor >= limit) {
238           break lab0;
239         }
240         cursor++;
241       }
242       I_p2 = cursor;
243     }
244     cursor = v_1;
245     return true;
246   }
247 
r_R2()248   private boolean r_R2() {
249     if (!(I_p2 <= cursor)) {
250       return false;
251     }
252     return true;
253   }
254 
r_perfective_gerund()255   private boolean r_perfective_gerund() {
256     int among_var;
257     ket = cursor;
258     among_var = find_among_b(a_0);
259     if (among_var == 0) {
260       return false;
261     }
262     bra = cursor;
263     switch (among_var) {
264       case 1:
265         lab0:
266         {
267           int v_1 = limit - cursor;
268           lab1:
269           {
270             if (!(eq_s_b("\u0430"))) {
271               break lab1;
272             }
273             break lab0;
274           }
275           cursor = limit - v_1;
276           if (!(eq_s_b("\u044F"))) {
277             return false;
278           }
279         }
280         slice_del();
281         break;
282       case 2:
283         slice_del();
284         break;
285     }
286     return true;
287   }
288 
r_adjective()289   private boolean r_adjective() {
290     ket = cursor;
291     if (find_among_b(a_1) == 0) {
292       return false;
293     }
294     bra = cursor;
295     slice_del();
296     return true;
297   }
298 
r_adjectival()299   private boolean r_adjectival() {
300     int among_var;
301     if (!r_adjective()) {
302       return false;
303     }
304     int v_1 = limit - cursor;
305     lab0:
306     {
307       ket = cursor;
308       among_var = find_among_b(a_2);
309       if (among_var == 0) {
310         cursor = limit - v_1;
311         break lab0;
312       }
313       bra = cursor;
314       switch (among_var) {
315         case 1:
316           lab1:
317           {
318             int v_2 = limit - cursor;
319             lab2:
320             {
321               if (!(eq_s_b("\u0430"))) {
322                 break lab2;
323               }
324               break lab1;
325             }
326             cursor = limit - v_2;
327             if (!(eq_s_b("\u044F"))) {
328               cursor = limit - v_1;
329               break lab0;
330             }
331           }
332           slice_del();
333           break;
334         case 2:
335           slice_del();
336           break;
337       }
338     }
339     return true;
340   }
341 
r_reflexive()342   private boolean r_reflexive() {
343     ket = cursor;
344     if (find_among_b(a_3) == 0) {
345       return false;
346     }
347     bra = cursor;
348     slice_del();
349     return true;
350   }
351 
r_verb()352   private boolean r_verb() {
353     int among_var;
354     ket = cursor;
355     among_var = find_among_b(a_4);
356     if (among_var == 0) {
357       return false;
358     }
359     bra = cursor;
360     switch (among_var) {
361       case 1:
362         lab0:
363         {
364           int v_1 = limit - cursor;
365           lab1:
366           {
367             if (!(eq_s_b("\u0430"))) {
368               break lab1;
369             }
370             break lab0;
371           }
372           cursor = limit - v_1;
373           if (!(eq_s_b("\u044F"))) {
374             return false;
375           }
376         }
377         slice_del();
378         break;
379       case 2:
380         slice_del();
381         break;
382     }
383     return true;
384   }
385 
r_noun()386   private boolean r_noun() {
387     ket = cursor;
388     if (find_among_b(a_5) == 0) {
389       return false;
390     }
391     bra = cursor;
392     slice_del();
393     return true;
394   }
395 
r_derivational()396   private boolean r_derivational() {
397     ket = cursor;
398     if (find_among_b(a_6) == 0) {
399       return false;
400     }
401     bra = cursor;
402     if (!r_R2()) {
403       return false;
404     }
405     slice_del();
406     return true;
407   }
408 
r_tidy_up()409   private boolean r_tidy_up() {
410     int among_var;
411     ket = cursor;
412     among_var = find_among_b(a_7);
413     if (among_var == 0) {
414       return false;
415     }
416     bra = cursor;
417     switch (among_var) {
418       case 1:
419         slice_del();
420         ket = cursor;
421         if (!(eq_s_b("\u043D"))) {
422           return false;
423         }
424         bra = cursor;
425         if (!(eq_s_b("\u043D"))) {
426           return false;
427         }
428         slice_del();
429         break;
430       case 2:
431         if (!(eq_s_b("\u043D"))) {
432           return false;
433         }
434         slice_del();
435         break;
436       case 3:
437         slice_del();
438         break;
439     }
440     return true;
441   }
442 
443   @Override
stem()444   public boolean stem() {
445     int v_1 = cursor;
446     lab0:
447     {
448       while (true) {
449         int v_2 = cursor;
450         lab1:
451         {
452           golab2:
453           while (true) {
454             int v_3 = cursor;
455             lab3:
456             {
457               bra = cursor;
458               if (!(eq_s("\u0451"))) {
459                 break lab3;
460               }
461               ket = cursor;
462               cursor = v_3;
463               break golab2;
464             }
465             cursor = v_3;
466             if (cursor >= limit) {
467               break lab1;
468             }
469             cursor++;
470           }
471           slice_from("\u0435");
472           continue;
473         }
474         cursor = v_2;
475         break;
476       }
477     }
478     cursor = v_1;
479     r_mark_regions();
480     limit_backward = cursor;
481     cursor = limit;
482     if (cursor < I_pV) {
483       return false;
484     }
485     int v_6 = limit_backward;
486     limit_backward = I_pV;
487     int v_7 = limit - cursor;
488     lab4:
489     {
490       lab5:
491       {
492         int v_8 = limit - cursor;
493         lab6:
494         {
495           if (!r_perfective_gerund()) {
496             break lab6;
497           }
498           break lab5;
499         }
500         cursor = limit - v_8;
501         int v_9 = limit - cursor;
502         lab7:
503         {
504           if (!r_reflexive()) {
505             cursor = limit - v_9;
506             break lab7;
507           }
508         }
509         lab8:
510         {
511           int v_10 = limit - cursor;
512           lab9:
513           {
514             if (!r_adjectival()) {
515               break lab9;
516             }
517             break lab8;
518           }
519           cursor = limit - v_10;
520           lab10:
521           {
522             if (!r_verb()) {
523               break lab10;
524             }
525             break lab8;
526           }
527           cursor = limit - v_10;
528           if (!r_noun()) {
529             break lab4;
530           }
531         }
532       }
533     }
534     cursor = limit - v_7;
535     int v_11 = limit - cursor;
536     lab11:
537     {
538       ket = cursor;
539       if (!(eq_s_b("\u0438"))) {
540         cursor = limit - v_11;
541         break lab11;
542       }
543       bra = cursor;
544       slice_del();
545     }
546     int v_12 = limit - cursor;
547     r_derivational();
548     cursor = limit - v_12;
549     int v_13 = limit - cursor;
550     r_tidy_up();
551     cursor = limit - v_13;
552     limit_backward = v_6;
553     cursor = limit_backward;
554     return true;
555   }
556 
557   @Override
equals(Object o)558   public boolean equals(Object o) {
559     return o instanceof RussianStemmer;
560   }
561 
562   @Override
hashCode()563   public int hashCode() {
564     return RussianStemmer.class.getName().hashCode();
565   }
566 }
567