// Generated by Snowball 2.1.0 - https://snowballstem.org/ /**@constructor*/ ItalianStemmer = function() { var base = new BaseStemmer(); /** @const */ var a_0 = [ ["", -1, 7], ["qu", 0, 6], ["\u00E1", 0, 1], ["\u00E9", 0, 2], ["\u00ED", 0, 3], ["\u00F3", 0, 4], ["\u00FA", 0, 5] ]; /** @const */ var a_1 = [ ["", -1, 3], ["I", 0, 1], ["U", 0, 2] ]; /** @const */ var a_2 = [ ["la", -1, -1], ["cela", 0, -1], ["gliela", 0, -1], ["mela", 0, -1], ["tela", 0, -1], ["vela", 0, -1], ["le", -1, -1], ["cele", 6, -1], ["gliele", 6, -1], ["mele", 6, -1], ["tele", 6, -1], ["vele", 6, -1], ["ne", -1, -1], ["cene", 12, -1], ["gliene", 12, -1], ["mene", 12, -1], ["sene", 12, -1], ["tene", 12, -1], ["vene", 12, -1], ["ci", -1, -1], ["li", -1, -1], ["celi", 20, -1], ["glieli", 20, -1], ["meli", 20, -1], ["teli", 20, -1], ["veli", 20, -1], ["gli", 20, -1], ["mi", -1, -1], ["si", -1, -1], ["ti", -1, -1], ["vi", -1, -1], ["lo", -1, -1], ["celo", 31, -1], ["glielo", 31, -1], ["melo", 31, -1], ["telo", 31, -1], ["velo", 31, -1] ]; /** @const */ var a_3 = [ ["ando", -1, 1], ["endo", -1, 1], ["ar", -1, 2], ["er", -1, 2], ["ir", -1, 2] ]; /** @const */ var a_4 = [ ["ic", -1, -1], ["abil", -1, -1], ["os", -1, -1], ["iv", -1, 1] ]; /** @const */ var a_5 = [ ["ic", -1, 1], ["abil", -1, 1], ["iv", -1, 1] ]; /** @const */ var a_6 = [ ["ica", -1, 1], ["logia", -1, 3], ["osa", -1, 1], ["ista", -1, 1], ["iva", -1, 9], ["anza", -1, 1], ["enza", -1, 5], ["ice", -1, 1], ["atrice", 7, 1], ["iche", -1, 1], ["logie", -1, 3], ["abile", -1, 1], ["ibile", -1, 1], ["usione", -1, 4], ["azione", -1, 2], ["uzione", -1, 4], ["atore", -1, 2], ["ose", -1, 1], ["ante", -1, 1], ["mente", -1, 1], ["amente", 19, 7], ["iste", -1, 1], ["ive", -1, 9], ["anze", -1, 1], ["enze", -1, 5], ["ici", -1, 1], ["atrici", 25, 1], ["ichi", -1, 1], ["abili", -1, 1], ["ibili", -1, 1], ["ismi", -1, 1], ["usioni", -1, 4], ["azioni", -1, 2], ["uzioni", -1, 4], ["atori", -1, 2], ["osi", -1, 1], ["anti", -1, 1], ["amenti", -1, 6], ["imenti", -1, 6], ["isti", -1, 1], ["ivi", -1, 9], ["ico", -1, 1], ["ismo", -1, 1], ["oso", -1, 1], ["amento", -1, 6], ["imento", -1, 6], ["ivo", -1, 9], ["it\u00E0", -1, 8], ["ist\u00E0", -1, 1], ["ist\u00E8", -1, 1], ["ist\u00EC", -1, 1] ]; /** @const */ var a_7 = [ ["isca", -1, 1], ["enda", -1, 1], ["ata", -1, 1], ["ita", -1, 1], ["uta", -1, 1], ["ava", -1, 1], ["eva", -1, 1], ["iva", -1, 1], ["erebbe", -1, 1], ["irebbe", -1, 1], ["isce", -1, 1], ["ende", -1, 1], ["are", -1, 1], ["ere", -1, 1], ["ire", -1, 1], ["asse", -1, 1], ["ate", -1, 1], ["avate", 16, 1], ["evate", 16, 1], ["ivate", 16, 1], ["ete", -1, 1], ["erete", 20, 1], ["irete", 20, 1], ["ite", -1, 1], ["ereste", -1, 1], ["ireste", -1, 1], ["ute", -1, 1], ["erai", -1, 1], ["irai", -1, 1], ["isci", -1, 1], ["endi", -1, 1], ["erei", -1, 1], ["irei", -1, 1], ["assi", -1, 1], ["ati", -1, 1], ["iti", -1, 1], ["eresti", -1, 1], ["iresti", -1, 1], ["uti", -1, 1], ["avi", -1, 1], ["evi", -1, 1], ["ivi", -1, 1], ["isco", -1, 1], ["ando", -1, 1], ["endo", -1, 1], ["Yamo", -1, 1], ["iamo", -1, 1], ["avamo", -1, 1], ["evamo", -1, 1], ["ivamo", -1, 1], ["eremo", -1, 1], ["iremo", -1, 1], ["assimo", -1, 1], ["ammo", -1, 1], ["emmo", -1, 1], ["eremmo", 54, 1], ["iremmo", 54, 1], ["immo", -1, 1], ["ano", -1, 1], ["iscano", 58, 1], ["avano", 58, 1], ["evano", 58, 1], ["ivano", 58, 1], ["eranno", -1, 1], ["iranno", -1, 1], ["ono", -1, 1], ["iscono", 65, 1], ["arono", 65, 1], ["erono", 65, 1], ["irono", 65, 1], ["erebbero", -1, 1], ["irebbero", -1, 1], ["assero", -1, 1], ["essero", -1, 1], ["issero", -1, 1], ["ato", -1, 1], ["ito", -1, 1], ["uto", -1, 1], ["avo", -1, 1], ["evo", -1, 1], ["ivo", -1, 1], ["ar", -1, 1], ["ir", -1, 1], ["er\u00E0", -1, 1], ["ir\u00E0", -1, 1], ["er\u00F2", -1, 1], ["ir\u00F2", -1, 1] ]; /** @const */ var /** Array */ g_v = [17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2, 1]; /** @const */ var /** Array */ g_AEIO = [17, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2]; /** @const */ var /** Array */ g_CG = [17]; var /** number */ I_p2 = 0; var /** number */ I_p1 = 0; var /** number */ I_pV = 0; /** @return {boolean} */ function r_prelude() { var /** number */ among_var; var /** number */ v_1 = base.cursor; while(true) { var /** number */ v_2 = base.cursor; lab0: { base.bra = base.cursor; among_var = base.find_among(a_0); if (among_var == 0) { break lab0; } base.ket = base.cursor; switch (among_var) { case 1: if (!base.slice_from("\u00E0")) { return false; } break; case 2: if (!base.slice_from("\u00E8")) { return false; } break; case 3: if (!base.slice_from("\u00EC")) { return false; } break; case 4: if (!base.slice_from("\u00F2")) { return false; } break; case 5: if (!base.slice_from("\u00F9")) { return false; } break; case 6: if (!base.slice_from("qU")) { return false; } break; case 7: if (base.cursor >= base.limit) { break lab0; } base.cursor++; break; } continue; } base.cursor = v_2; break; } base.cursor = v_1; while(true) { var /** number */ v_3 = base.cursor; lab1: { golab2: while(true) { var /** number */ v_4 = base.cursor; lab3: { if (!(base.in_grouping(g_v, 97, 249))) { break lab3; } base.bra = base.cursor; lab4: { var /** number */ v_5 = base.cursor; lab5: { if (!(base.eq_s("u"))) { break lab5; } base.ket = base.cursor; if (!(base.in_grouping(g_v, 97, 249))) { break lab5; } if (!base.slice_from("U")) { return false; } break lab4; } base.cursor = v_5; if (!(base.eq_s("i"))) { break lab3; } base.ket = base.cursor; if (!(base.in_grouping(g_v, 97, 249))) { break lab3; } if (!base.slice_from("I")) { return false; } } base.cursor = v_4; break golab2; } base.cursor = v_4; if (base.cursor >= base.limit) { break lab1; } base.cursor++; } continue; } base.cursor = v_3; break; } return true; }; /** @return {boolean} */ function r_mark_regions() { I_pV = base.limit; I_p1 = base.limit; I_p2 = base.limit; var /** number */ v_1 = base.cursor; lab0: { lab1: { var /** number */ v_2 = base.cursor; lab2: { if (!(base.in_grouping(g_v, 97, 249))) { break lab2; } lab3: { var /** number */ v_3 = base.cursor; lab4: { if (!(base.out_grouping(g_v, 97, 249))) { break lab4; } golab5: while(true) { lab6: { if (!(base.in_grouping(g_v, 97, 249))) { break lab6; } break golab5; } if (base.cursor >= base.limit) { break lab4; } base.cursor++; } break lab3; } base.cursor = v_3; if (!(base.in_grouping(g_v, 97, 249))) { break lab2; } golab7: while(true) { lab8: { if (!(base.out_grouping(g_v, 97, 249))) { break lab8; } break golab7; } if (base.cursor >= base.limit) { break lab2; } base.cursor++; } } break lab1; } base.cursor = v_2; if (!(base.out_grouping(g_v, 97, 249))) { break lab0; } lab9: { var /** number */ v_6 = base.cursor; lab10: { if (!(base.out_grouping(g_v, 97, 249))) { break lab10; } golab11: while(true) { lab12: { if (!(base.in_grouping(g_v, 97, 249))) { break lab12; } break golab11; } if (base.cursor >= base.limit) { break lab10; } base.cursor++; } break lab9; } base.cursor = v_6; if (!(base.in_grouping(g_v, 97, 249))) { break lab0; } if (base.cursor >= base.limit) { break lab0; } base.cursor++; } } I_pV = base.cursor; } base.cursor = v_1; var /** number */ v_8 = base.cursor; lab13: { golab14: while(true) { lab15: { if (!(base.in_grouping(g_v, 97, 249))) { break lab15; } break golab14; } if (base.cursor >= base.limit) { break lab13; } base.cursor++; } golab16: while(true) { lab17: { if (!(base.out_grouping(g_v, 97, 249))) { break lab17; } break golab16; } if (base.cursor >= base.limit) { break lab13; } base.cursor++; } I_p1 = base.cursor; golab18: while(true) { lab19: { if (!(base.in_grouping(g_v, 97, 249))) { break lab19; } break golab18; } if (base.cursor >= base.limit) { break lab13; } base.cursor++; } golab20: while(true) { lab21: { if (!(base.out_grouping(g_v, 97, 249))) { break lab21; } break golab20; } if (base.cursor >= base.limit) { break lab13; } base.cursor++; } I_p2 = base.cursor; } base.cursor = v_8; return true; }; /** @return {boolean} */ function r_postlude() { var /** number */ among_var; while(true) { var /** number */ v_1 = base.cursor; lab0: { base.bra = base.cursor; among_var = base.find_among(a_1); if (among_var == 0) { break lab0; } base.ket = base.cursor; switch (among_var) { case 1: if (!base.slice_from("i")) { return false; } break; case 2: if (!base.slice_from("u")) { return false; } break; case 3: if (base.cursor >= base.limit) { break lab0; } base.cursor++; break; } continue; } base.cursor = v_1; break; } return true; }; /** @return {boolean} */ function r_RV() { if (!(I_pV <= base.cursor)) { return false; } return true; }; /** @return {boolean} */ function r_R1() { if (!(I_p1 <= base.cursor)) { return false; } return true; }; /** @return {boolean} */ function r_R2() { if (!(I_p2 <= base.cursor)) { return false; } return true; }; /** @return {boolean} */ function r_attached_pronoun() { var /** number */ among_var; base.ket = base.cursor; if (base.find_among_b(a_2) == 0) { return false; } base.bra = base.cursor; among_var = base.find_among_b(a_3); if (among_var == 0) { return false; } if (!r_RV()) { return false; } switch (among_var) { case 1: if (!base.slice_del()) { return false; } break; case 2: if (!base.slice_from("e")) { return false; } break; } return true; }; /** @return {boolean} */ function r_standard_suffix() { var /** number */ among_var; base.ket = base.cursor; among_var = base.find_among_b(a_6); if (among_var == 0) { return false; } base.bra = base.cursor; switch (among_var) { case 1: if (!r_R2()) { return false; } if (!base.slice_del()) { return false; } break; case 2: if (!r_R2()) { return false; } if (!base.slice_del()) { return false; } var /** number */ v_1 = base.limit - base.cursor; lab0: { base.ket = base.cursor; if (!(base.eq_s_b("ic"))) { base.cursor = base.limit - v_1; break lab0; } base.bra = base.cursor; if (!r_R2()) { base.cursor = base.limit - v_1; break lab0; } if (!base.slice_del()) { return false; } } break; case 3: if (!r_R2()) { return false; } if (!base.slice_from("log")) { return false; } break; case 4: if (!r_R2()) { return false; } if (!base.slice_from("u")) { return false; } break; case 5: if (!r_R2()) { return false; } if (!base.slice_from("ente")) { return false; } break; case 6: if (!r_RV()) { return false; } if (!base.slice_del()) { return false; } break; case 7: if (!r_R1()) { return false; } if (!base.slice_del()) { return false; } var /** number */ v_2 = base.limit - base.cursor; lab1: { base.ket = base.cursor; among_var = base.find_among_b(a_4); if (among_var == 0) { base.cursor = base.limit - v_2; break lab1; } base.bra = base.cursor; if (!r_R2()) { base.cursor = base.limit - v_2; break lab1; } if (!base.slice_del()) { return false; } switch (among_var) { case 1: base.ket = base.cursor; if (!(base.eq_s_b("at"))) { base.cursor = base.limit - v_2; break lab1; } base.bra = base.cursor; if (!r_R2()) { base.cursor = base.limit - v_2; break lab1; } if (!base.slice_del()) { return false; } break; } } break; case 8: if (!r_R2()) { return false; } if (!base.slice_del()) { return false; } var /** number */ v_3 = base.limit - base.cursor; lab2: { base.ket = base.cursor; if (base.find_among_b(a_5) == 0) { base.cursor = base.limit - v_3; break lab2; } base.bra = base.cursor; if (!r_R2()) { base.cursor = base.limit - v_3; break lab2; } if (!base.slice_del()) { return false; } } break; case 9: if (!r_R2()) { return false; } if (!base.slice_del()) { return false; } var /** number */ v_4 = base.limit - base.cursor; lab3: { base.ket = base.cursor; if (!(base.eq_s_b("at"))) { base.cursor = base.limit - v_4; break lab3; } base.bra = base.cursor; if (!r_R2()) { base.cursor = base.limit - v_4; break lab3; } if (!base.slice_del()) { return false; } base.ket = base.cursor; if (!(base.eq_s_b("ic"))) { base.cursor = base.limit - v_4; break lab3; } base.bra = base.cursor; if (!r_R2()) { base.cursor = base.limit - v_4; break lab3; } if (!base.slice_del()) { return false; } } break; } return true; }; /** @return {boolean} */ function r_verb_suffix() { if (base.cursor < I_pV) { return false; } var /** number */ v_2 = base.limit_backward; base.limit_backward = I_pV; base.ket = base.cursor; if (base.find_among_b(a_7) == 0) { base.limit_backward = v_2; return false; } base.bra = base.cursor; if (!base.slice_del()) { return false; } base.limit_backward = v_2; return true; }; /** @return {boolean} */ function r_vowel_suffix() { var /** number */ v_1 = base.limit - base.cursor; lab0: { base.ket = base.cursor; if (!(base.in_grouping_b(g_AEIO, 97, 242))) { base.cursor = base.limit - v_1; break lab0; } base.bra = base.cursor; if (!r_RV()) { base.cursor = base.limit - v_1; break lab0; } if (!base.slice_del()) { return false; } base.ket = base.cursor; if (!(base.eq_s_b("i"))) { base.cursor = base.limit - v_1; break lab0; } base.bra = base.cursor; if (!r_RV()) { base.cursor = base.limit - v_1; break lab0; } if (!base.slice_del()) { return false; } } var /** number */ v_2 = base.limit - base.cursor; lab1: { base.ket = base.cursor; if (!(base.eq_s_b("h"))) { base.cursor = base.limit - v_2; break lab1; } base.bra = base.cursor; if (!(base.in_grouping_b(g_CG, 99, 103))) { base.cursor = base.limit - v_2; break lab1; } if (!r_RV()) { base.cursor = base.limit - v_2; break lab1; } if (!base.slice_del()) { return false; } } return true; }; this.stem = /** @return {boolean} */ function() { var /** number */ v_1 = base.cursor; r_prelude(); base.cursor = v_1; r_mark_regions(); base.limit_backward = base.cursor; base.cursor = base.limit; var /** number */ v_3 = base.limit - base.cursor; r_attached_pronoun(); base.cursor = base.limit - v_3; var /** number */ v_4 = base.limit - base.cursor; lab0: { lab1: { var /** number */ v_5 = base.limit - base.cursor; lab2: { if (!r_standard_suffix()) { break lab2; } break lab1; } base.cursor = base.limit - v_5; if (!r_verb_suffix()) { break lab0; } } } base.cursor = base.limit - v_4; var /** number */ v_6 = base.limit - base.cursor; r_vowel_suffix(); base.cursor = base.limit - v_6; base.cursor = base.limit_backward; var /** number */ v_7 = base.cursor; r_postlude(); base.cursor = v_7; return true; }; /**@return{string}*/ this['stemWord'] = function(/**string*/word) { base.setCurrent(word); this.stem(); return base.getCurrent(); }; };