xref: /Lucene/lucene/analysis/common/src/java/org/tartarus/snowball/ext/ItalianStemmer.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 ItalianStemmer 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("", -1, 7),
21     new Among("qu", 0, 6),
22     new Among("\u00E1", 0, 1),
23     new Among("\u00E9", 0, 2),
24     new Among("\u00ED", 0, 3),
25     new Among("\u00F3", 0, 4),
26     new Among("\u00FA", 0, 5)
27   };
28 
29   private static final Among a_1[] = {
30     new Among("", -1, 3), new Among("I", 0, 1), new Among("U", 0, 2)
31   };
32 
33   private static final Among a_2[] = {
34     new Among("la", -1, -1),
35     new Among("cela", 0, -1),
36     new Among("gliela", 0, -1),
37     new Among("mela", 0, -1),
38     new Among("tela", 0, -1),
39     new Among("vela", 0, -1),
40     new Among("le", -1, -1),
41     new Among("cele", 6, -1),
42     new Among("gliele", 6, -1),
43     new Among("mele", 6, -1),
44     new Among("tele", 6, -1),
45     new Among("vele", 6, -1),
46     new Among("ne", -1, -1),
47     new Among("cene", 12, -1),
48     new Among("gliene", 12, -1),
49     new Among("mene", 12, -1),
50     new Among("sene", 12, -1),
51     new Among("tene", 12, -1),
52     new Among("vene", 12, -1),
53     new Among("ci", -1, -1),
54     new Among("li", -1, -1),
55     new Among("celi", 20, -1),
56     new Among("glieli", 20, -1),
57     new Among("meli", 20, -1),
58     new Among("teli", 20, -1),
59     new Among("veli", 20, -1),
60     new Among("gli", 20, -1),
61     new Among("mi", -1, -1),
62     new Among("si", -1, -1),
63     new Among("ti", -1, -1),
64     new Among("vi", -1, -1),
65     new Among("lo", -1, -1),
66     new Among("celo", 31, -1),
67     new Among("glielo", 31, -1),
68     new Among("melo", 31, -1),
69     new Among("telo", 31, -1),
70     new Among("velo", 31, -1)
71   };
72 
73   private static final Among a_3[] = {
74     new Among("ando", -1, 1),
75     new Among("endo", -1, 1),
76     new Among("ar", -1, 2),
77     new Among("er", -1, 2),
78     new Among("ir", -1, 2)
79   };
80 
81   private static final Among a_4[] = {
82     new Among("ic", -1, -1),
83     new Among("abil", -1, -1),
84     new Among("os", -1, -1),
85     new Among("iv", -1, 1)
86   };
87 
88   private static final Among a_5[] = {
89     new Among("ic", -1, 1), new Among("abil", -1, 1), new Among("iv", -1, 1)
90   };
91 
92   private static final Among a_6[] = {
93     new Among("ica", -1, 1),
94     new Among("logia", -1, 3),
95     new Among("osa", -1, 1),
96     new Among("ista", -1, 1),
97     new Among("iva", -1, 9),
98     new Among("anza", -1, 1),
99     new Among("enza", -1, 5),
100     new Among("ice", -1, 1),
101     new Among("atrice", 7, 1),
102     new Among("iche", -1, 1),
103     new Among("logie", -1, 3),
104     new Among("abile", -1, 1),
105     new Among("ibile", -1, 1),
106     new Among("usione", -1, 4),
107     new Among("azione", -1, 2),
108     new Among("uzione", -1, 4),
109     new Among("atore", -1, 2),
110     new Among("ose", -1, 1),
111     new Among("ante", -1, 1),
112     new Among("mente", -1, 1),
113     new Among("amente", 19, 7),
114     new Among("iste", -1, 1),
115     new Among("ive", -1, 9),
116     new Among("anze", -1, 1),
117     new Among("enze", -1, 5),
118     new Among("ici", -1, 1),
119     new Among("atrici", 25, 1),
120     new Among("ichi", -1, 1),
121     new Among("abili", -1, 1),
122     new Among("ibili", -1, 1),
123     new Among("ismi", -1, 1),
124     new Among("usioni", -1, 4),
125     new Among("azioni", -1, 2),
126     new Among("uzioni", -1, 4),
127     new Among("atori", -1, 2),
128     new Among("osi", -1, 1),
129     new Among("anti", -1, 1),
130     new Among("amenti", -1, 6),
131     new Among("imenti", -1, 6),
132     new Among("isti", -1, 1),
133     new Among("ivi", -1, 9),
134     new Among("ico", -1, 1),
135     new Among("ismo", -1, 1),
136     new Among("oso", -1, 1),
137     new Among("amento", -1, 6),
138     new Among("imento", -1, 6),
139     new Among("ivo", -1, 9),
140     new Among("it\u00E0", -1, 8),
141     new Among("ist\u00E0", -1, 1),
142     new Among("ist\u00E8", -1, 1),
143     new Among("ist\u00EC", -1, 1)
144   };
145 
146   private static final Among a_7[] = {
147     new Among("isca", -1, 1),
148     new Among("enda", -1, 1),
149     new Among("ata", -1, 1),
150     new Among("ita", -1, 1),
151     new Among("uta", -1, 1),
152     new Among("ava", -1, 1),
153     new Among("eva", -1, 1),
154     new Among("iva", -1, 1),
155     new Among("erebbe", -1, 1),
156     new Among("irebbe", -1, 1),
157     new Among("isce", -1, 1),
158     new Among("ende", -1, 1),
159     new Among("are", -1, 1),
160     new Among("ere", -1, 1),
161     new Among("ire", -1, 1),
162     new Among("asse", -1, 1),
163     new Among("ate", -1, 1),
164     new Among("avate", 16, 1),
165     new Among("evate", 16, 1),
166     new Among("ivate", 16, 1),
167     new Among("ete", -1, 1),
168     new Among("erete", 20, 1),
169     new Among("irete", 20, 1),
170     new Among("ite", -1, 1),
171     new Among("ereste", -1, 1),
172     new Among("ireste", -1, 1),
173     new Among("ute", -1, 1),
174     new Among("erai", -1, 1),
175     new Among("irai", -1, 1),
176     new Among("isci", -1, 1),
177     new Among("endi", -1, 1),
178     new Among("erei", -1, 1),
179     new Among("irei", -1, 1),
180     new Among("assi", -1, 1),
181     new Among("ati", -1, 1),
182     new Among("iti", -1, 1),
183     new Among("eresti", -1, 1),
184     new Among("iresti", -1, 1),
185     new Among("uti", -1, 1),
186     new Among("avi", -1, 1),
187     new Among("evi", -1, 1),
188     new Among("ivi", -1, 1),
189     new Among("isco", -1, 1),
190     new Among("ando", -1, 1),
191     new Among("endo", -1, 1),
192     new Among("Yamo", -1, 1),
193     new Among("iamo", -1, 1),
194     new Among("avamo", -1, 1),
195     new Among("evamo", -1, 1),
196     new Among("ivamo", -1, 1),
197     new Among("eremo", -1, 1),
198     new Among("iremo", -1, 1),
199     new Among("assimo", -1, 1),
200     new Among("ammo", -1, 1),
201     new Among("emmo", -1, 1),
202     new Among("eremmo", 54, 1),
203     new Among("iremmo", 54, 1),
204     new Among("immo", -1, 1),
205     new Among("ano", -1, 1),
206     new Among("iscano", 58, 1),
207     new Among("avano", 58, 1),
208     new Among("evano", 58, 1),
209     new Among("ivano", 58, 1),
210     new Among("eranno", -1, 1),
211     new Among("iranno", -1, 1),
212     new Among("ono", -1, 1),
213     new Among("iscono", 65, 1),
214     new Among("arono", 65, 1),
215     new Among("erono", 65, 1),
216     new Among("irono", 65, 1),
217     new Among("erebbero", -1, 1),
218     new Among("irebbero", -1, 1),
219     new Among("assero", -1, 1),
220     new Among("essero", -1, 1),
221     new Among("issero", -1, 1),
222     new Among("ato", -1, 1),
223     new Among("ito", -1, 1),
224     new Among("uto", -1, 1),
225     new Among("avo", -1, 1),
226     new Among("evo", -1, 1),
227     new Among("ivo", -1, 1),
228     new Among("ar", -1, 1),
229     new Among("ir", -1, 1),
230     new Among("er\u00E0", -1, 1),
231     new Among("ir\u00E0", -1, 1),
232     new Among("er\u00F2", -1, 1),
233     new Among("ir\u00F2", -1, 1)
234   };
235 
236   private static final char g_v[] = {
237     17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2, 1
238   };
239 
240   private static final char g_AEIO[] = {
241     17, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2
242   };
243 
244   private static final char g_CG[] = {17};
245 
246   private int I_p2;
247   private int I_p1;
248   private int I_pV;
249 
r_prelude()250   private boolean r_prelude() {
251     int among_var;
252     int v_1 = cursor;
253     while (true) {
254       int v_2 = cursor;
255       lab0:
256       {
257         bra = cursor;
258         among_var = find_among(a_0);
259         if (among_var == 0) {
260           break lab0;
261         }
262         ket = cursor;
263         switch (among_var) {
264           case 1:
265             slice_from("\u00E0");
266             break;
267           case 2:
268             slice_from("\u00E8");
269             break;
270           case 3:
271             slice_from("\u00EC");
272             break;
273           case 4:
274             slice_from("\u00F2");
275             break;
276           case 5:
277             slice_from("\u00F9");
278             break;
279           case 6:
280             slice_from("qU");
281             break;
282           case 7:
283             if (cursor >= limit) {
284               break lab0;
285             }
286             cursor++;
287             break;
288         }
289         continue;
290       }
291       cursor = v_2;
292       break;
293     }
294     cursor = v_1;
295     while (true) {
296       int v_3 = cursor;
297       lab1:
298       {
299         golab2:
300         while (true) {
301           int v_4 = cursor;
302           lab3:
303           {
304             if (!(in_grouping(g_v, 97, 249))) {
305               break lab3;
306             }
307             bra = cursor;
308             lab4:
309             {
310               int v_5 = cursor;
311               lab5:
312               {
313                 if (!(eq_s("u"))) {
314                   break lab5;
315                 }
316                 ket = cursor;
317                 if (!(in_grouping(g_v, 97, 249))) {
318                   break lab5;
319                 }
320                 slice_from("U");
321                 break lab4;
322               }
323               cursor = v_5;
324               if (!(eq_s("i"))) {
325                 break lab3;
326               }
327               ket = cursor;
328               if (!(in_grouping(g_v, 97, 249))) {
329                 break lab3;
330               }
331               slice_from("I");
332             }
333             cursor = v_4;
334             break golab2;
335           }
336           cursor = v_4;
337           if (cursor >= limit) {
338             break lab1;
339           }
340           cursor++;
341         }
342         continue;
343       }
344       cursor = v_3;
345       break;
346     }
347     return true;
348   }
349 
r_mark_regions()350   private boolean r_mark_regions() {
351     I_pV = limit;
352     I_p1 = limit;
353     I_p2 = limit;
354     int v_1 = cursor;
355     lab0:
356     {
357       lab1:
358       {
359         int v_2 = cursor;
360         lab2:
361         {
362           if (!(in_grouping(g_v, 97, 249))) {
363             break lab2;
364           }
365           lab3:
366           {
367             int v_3 = cursor;
368             lab4:
369             {
370               if (!(out_grouping(g_v, 97, 249))) {
371                 break lab4;
372               }
373               golab5:
374               while (true) {
375                 lab6:
376                 {
377                   if (!(in_grouping(g_v, 97, 249))) {
378                     break lab6;
379                   }
380                   break golab5;
381                 }
382                 if (cursor >= limit) {
383                   break lab4;
384                 }
385                 cursor++;
386               }
387               break lab3;
388             }
389             cursor = v_3;
390             if (!(in_grouping(g_v, 97, 249))) {
391               break lab2;
392             }
393             golab7:
394             while (true) {
395               lab8:
396               {
397                 if (!(out_grouping(g_v, 97, 249))) {
398                   break lab8;
399                 }
400                 break golab7;
401               }
402               if (cursor >= limit) {
403                 break lab2;
404               }
405               cursor++;
406             }
407           }
408           break lab1;
409         }
410         cursor = v_2;
411         if (!(out_grouping(g_v, 97, 249))) {
412           break lab0;
413         }
414         lab9:
415         {
416           int v_6 = cursor;
417           lab10:
418           {
419             if (!(out_grouping(g_v, 97, 249))) {
420               break lab10;
421             }
422             golab11:
423             while (true) {
424               lab12:
425               {
426                 if (!(in_grouping(g_v, 97, 249))) {
427                   break lab12;
428                 }
429                 break golab11;
430               }
431               if (cursor >= limit) {
432                 break lab10;
433               }
434               cursor++;
435             }
436             break lab9;
437           }
438           cursor = v_6;
439           if (!(in_grouping(g_v, 97, 249))) {
440             break lab0;
441           }
442           if (cursor >= limit) {
443             break lab0;
444           }
445           cursor++;
446         }
447       }
448       I_pV = cursor;
449     }
450     cursor = v_1;
451     int v_8 = cursor;
452     lab13:
453     {
454       golab14:
455       while (true) {
456         lab15:
457         {
458           if (!(in_grouping(g_v, 97, 249))) {
459             break lab15;
460           }
461           break golab14;
462         }
463         if (cursor >= limit) {
464           break lab13;
465         }
466         cursor++;
467       }
468       golab16:
469       while (true) {
470         lab17:
471         {
472           if (!(out_grouping(g_v, 97, 249))) {
473             break lab17;
474           }
475           break golab16;
476         }
477         if (cursor >= limit) {
478           break lab13;
479         }
480         cursor++;
481       }
482       I_p1 = cursor;
483       golab18:
484       while (true) {
485         lab19:
486         {
487           if (!(in_grouping(g_v, 97, 249))) {
488             break lab19;
489           }
490           break golab18;
491         }
492         if (cursor >= limit) {
493           break lab13;
494         }
495         cursor++;
496       }
497       golab20:
498       while (true) {
499         lab21:
500         {
501           if (!(out_grouping(g_v, 97, 249))) {
502             break lab21;
503           }
504           break golab20;
505         }
506         if (cursor >= limit) {
507           break lab13;
508         }
509         cursor++;
510       }
511       I_p2 = cursor;
512     }
513     cursor = v_8;
514     return true;
515   }
516 
r_postlude()517   private boolean r_postlude() {
518     int among_var;
519     while (true) {
520       int v_1 = cursor;
521       lab0:
522       {
523         bra = cursor;
524         among_var = find_among(a_1);
525         if (among_var == 0) {
526           break lab0;
527         }
528         ket = cursor;
529         switch (among_var) {
530           case 1:
531             slice_from("i");
532             break;
533           case 2:
534             slice_from("u");
535             break;
536           case 3:
537             if (cursor >= limit) {
538               break lab0;
539             }
540             cursor++;
541             break;
542         }
543         continue;
544       }
545       cursor = v_1;
546       break;
547     }
548     return true;
549   }
550 
r_RV()551   private boolean r_RV() {
552     if (!(I_pV <= cursor)) {
553       return false;
554     }
555     return true;
556   }
557 
r_R1()558   private boolean r_R1() {
559     if (!(I_p1 <= cursor)) {
560       return false;
561     }
562     return true;
563   }
564 
r_R2()565   private boolean r_R2() {
566     if (!(I_p2 <= cursor)) {
567       return false;
568     }
569     return true;
570   }
571 
r_attached_pronoun()572   private boolean r_attached_pronoun() {
573     int among_var;
574     ket = cursor;
575     if (find_among_b(a_2) == 0) {
576       return false;
577     }
578     bra = cursor;
579     among_var = find_among_b(a_3);
580     if (among_var == 0) {
581       return false;
582     }
583     if (!r_RV()) {
584       return false;
585     }
586     switch (among_var) {
587       case 1:
588         slice_del();
589         break;
590       case 2:
591         slice_from("e");
592         break;
593     }
594     return true;
595   }
596 
r_standard_suffix()597   private boolean r_standard_suffix() {
598     int among_var;
599     ket = cursor;
600     among_var = find_among_b(a_6);
601     if (among_var == 0) {
602       return false;
603     }
604     bra = cursor;
605     switch (among_var) {
606       case 1:
607         if (!r_R2()) {
608           return false;
609         }
610         slice_del();
611         break;
612       case 2:
613         if (!r_R2()) {
614           return false;
615         }
616         slice_del();
617         int v_1 = limit - cursor;
618         lab0:
619         {
620           ket = cursor;
621           if (!(eq_s_b("ic"))) {
622             cursor = limit - v_1;
623             break lab0;
624           }
625           bra = cursor;
626           if (!r_R2()) {
627             cursor = limit - v_1;
628             break lab0;
629           }
630           slice_del();
631         }
632         break;
633       case 3:
634         if (!r_R2()) {
635           return false;
636         }
637         slice_from("log");
638         break;
639       case 4:
640         if (!r_R2()) {
641           return false;
642         }
643         slice_from("u");
644         break;
645       case 5:
646         if (!r_R2()) {
647           return false;
648         }
649         slice_from("ente");
650         break;
651       case 6:
652         if (!r_RV()) {
653           return false;
654         }
655         slice_del();
656         break;
657       case 7:
658         if (!r_R1()) {
659           return false;
660         }
661         slice_del();
662         int v_2 = limit - cursor;
663         lab1:
664         {
665           ket = cursor;
666           among_var = find_among_b(a_4);
667           if (among_var == 0) {
668             cursor = limit - v_2;
669             break lab1;
670           }
671           bra = cursor;
672           if (!r_R2()) {
673             cursor = limit - v_2;
674             break lab1;
675           }
676           slice_del();
677           switch (among_var) {
678             case 1:
679               ket = cursor;
680               if (!(eq_s_b("at"))) {
681                 cursor = limit - v_2;
682                 break lab1;
683               }
684               bra = cursor;
685               if (!r_R2()) {
686                 cursor = limit - v_2;
687                 break lab1;
688               }
689               slice_del();
690               break;
691           }
692         }
693         break;
694       case 8:
695         if (!r_R2()) {
696           return false;
697         }
698         slice_del();
699         int v_3 = limit - cursor;
700         lab2:
701         {
702           ket = cursor;
703           if (find_among_b(a_5) == 0) {
704             cursor = limit - v_3;
705             break lab2;
706           }
707           bra = cursor;
708           if (!r_R2()) {
709             cursor = limit - v_3;
710             break lab2;
711           }
712           slice_del();
713         }
714         break;
715       case 9:
716         if (!r_R2()) {
717           return false;
718         }
719         slice_del();
720         int v_4 = limit - cursor;
721         lab3:
722         {
723           ket = cursor;
724           if (!(eq_s_b("at"))) {
725             cursor = limit - v_4;
726             break lab3;
727           }
728           bra = cursor;
729           if (!r_R2()) {
730             cursor = limit - v_4;
731             break lab3;
732           }
733           slice_del();
734           ket = cursor;
735           if (!(eq_s_b("ic"))) {
736             cursor = limit - v_4;
737             break lab3;
738           }
739           bra = cursor;
740           if (!r_R2()) {
741             cursor = limit - v_4;
742             break lab3;
743           }
744           slice_del();
745         }
746         break;
747     }
748     return true;
749   }
750 
r_verb_suffix()751   private boolean r_verb_suffix() {
752     if (cursor < I_pV) {
753       return false;
754     }
755     int v_2 = limit_backward;
756     limit_backward = I_pV;
757     ket = cursor;
758     if (find_among_b(a_7) == 0) {
759       limit_backward = v_2;
760       return false;
761     }
762     bra = cursor;
763     slice_del();
764     limit_backward = v_2;
765     return true;
766   }
767 
r_vowel_suffix()768   private boolean r_vowel_suffix() {
769     int v_1 = limit - cursor;
770     lab0:
771     {
772       ket = cursor;
773       if (!(in_grouping_b(g_AEIO, 97, 242))) {
774         cursor = limit - v_1;
775         break lab0;
776       }
777       bra = cursor;
778       if (!r_RV()) {
779         cursor = limit - v_1;
780         break lab0;
781       }
782       slice_del();
783       ket = cursor;
784       if (!(eq_s_b("i"))) {
785         cursor = limit - v_1;
786         break lab0;
787       }
788       bra = cursor;
789       if (!r_RV()) {
790         cursor = limit - v_1;
791         break lab0;
792       }
793       slice_del();
794     }
795     int v_2 = limit - cursor;
796     lab1:
797     {
798       ket = cursor;
799       if (!(eq_s_b("h"))) {
800         cursor = limit - v_2;
801         break lab1;
802       }
803       bra = cursor;
804       if (!(in_grouping_b(g_CG, 99, 103))) {
805         cursor = limit - v_2;
806         break lab1;
807       }
808       if (!r_RV()) {
809         cursor = limit - v_2;
810         break lab1;
811       }
812       slice_del();
813     }
814     return true;
815   }
816 
817   @Override
stem()818   public boolean stem() {
819     int v_1 = cursor;
820     r_prelude();
821     cursor = v_1;
822     r_mark_regions();
823     limit_backward = cursor;
824     cursor = limit;
825     int v_3 = limit - cursor;
826     r_attached_pronoun();
827     cursor = limit - v_3;
828     int v_4 = limit - cursor;
829     lab0:
830     {
831       lab1:
832       {
833         int v_5 = limit - cursor;
834         lab2:
835         {
836           if (!r_standard_suffix()) {
837             break lab2;
838           }
839           break lab1;
840         }
841         cursor = limit - v_5;
842         if (!r_verb_suffix()) {
843           break lab0;
844         }
845       }
846     }
847     cursor = limit - v_4;
848     int v_6 = limit - cursor;
849     r_vowel_suffix();
850     cursor = limit - v_6;
851     cursor = limit_backward;
852     int v_7 = cursor;
853     r_postlude();
854     cursor = v_7;
855     return true;
856   }
857 
858   @Override
equals(Object o)859   public boolean equals(Object o) {
860     return o instanceof ItalianStemmer;
861   }
862 
863   @Override
hashCode()864   public int hashCode() {
865     return ItalianStemmer.class.getName().hashCode();
866   }
867 }
868