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