// This file was generated automatically by the Snowball to JSX compiler import "base-stemmer.jsx"; import "among.jsx"; /** * This class was automatically generated by a Snowball to JSX compiler * It implements the stemming algorithm defined by a snowball script. */ class FinnishStemmer extends BaseStemmer { static const serialVersionUID = 1; static const methodObject = new FinnishStemmer(); static const a_0 = [ new Among("pa", -1, 1), new Among("sti", -1, 2), new Among("kaan", -1, 1), new Among("han", -1, 1), new Among("kin", -1, 1), new Among("h\u00E4n", -1, 1), new Among("k\u00E4\u00E4n", -1, 1), new Among("ko", -1, 1), new Among("p\u00E4", -1, 1), new Among("k\u00F6", -1, 1) ]; static const a_1 = [ new Among("lla", -1, -1), new Among("na", -1, -1), new Among("ssa", -1, -1), new Among("ta", -1, -1), new Among("lta", 3, -1), new Among("sta", 3, -1) ]; static const a_2 = [ new Among("ll\u00E4", -1, -1), new Among("n\u00E4", -1, -1), new Among("ss\u00E4", -1, -1), new Among("t\u00E4", -1, -1), new Among("lt\u00E4", 3, -1), new Among("st\u00E4", 3, -1) ]; static const a_3 = [ new Among("lle", -1, -1), new Among("ine", -1, -1) ]; static const a_4 = [ new Among("nsa", -1, 3), new Among("mme", -1, 3), new Among("nne", -1, 3), new Among("ni", -1, 2), new Among("si", -1, 1), new Among("an", -1, 4), new Among("en", -1, 6), new Among("\u00E4n", -1, 5), new Among("ns\u00E4", -1, 3) ]; static const a_5 = [ new Among("aa", -1, -1), new Among("ee", -1, -1), new Among("ii", -1, -1), new Among("oo", -1, -1), new Among("uu", -1, -1), new Among("\u00E4\u00E4", -1, -1), new Among("\u00F6\u00F6", -1, -1) ]; static const a_6 = [ new Among("a", -1, 8), new Among("lla", 0, -1), new Among("na", 0, -1), new Among("ssa", 0, -1), new Among("ta", 0, -1), new Among("lta", 4, -1), new Among("sta", 4, -1), new Among("tta", 4, 9), new Among("lle", -1, -1), new Among("ine", -1, -1), new Among("ksi", -1, -1), new Among("n", -1, 7), new Among("han", 11, 1), new Among("den", 11, -1, ((instance : BaseStemmer) : boolean -> (instance as FinnishStemmer).r_VI()), FinnishStemmer.methodObject), new Among("seen", 11, -1, ((instance : BaseStemmer) : boolean -> (instance as FinnishStemmer).r_LONG()), FinnishStemmer.methodObject), new Among("hen", 11, 2), new Among("tten", 11, -1, ((instance : BaseStemmer) : boolean -> (instance as FinnishStemmer).r_VI()), FinnishStemmer.methodObject), new Among("hin", 11, 3), new Among("siin", 11, -1, ((instance : BaseStemmer) : boolean -> (instance as FinnishStemmer).r_VI()), FinnishStemmer.methodObject), new Among("hon", 11, 4), new Among("h\u00E4n", 11, 5), new Among("h\u00F6n", 11, 6), new Among("\u00E4", -1, 8), new Among("ll\u00E4", 22, -1), new Among("n\u00E4", 22, -1), new Among("ss\u00E4", 22, -1), new Among("t\u00E4", 22, -1), new Among("lt\u00E4", 26, -1), new Among("st\u00E4", 26, -1), new Among("tt\u00E4", 26, 9) ]; static const a_7 = [ new Among("eja", -1, -1), new Among("mma", -1, 1), new Among("imma", 1, -1), new Among("mpa", -1, 1), new Among("impa", 3, -1), new Among("mmi", -1, 1), new Among("immi", 5, -1), new Among("mpi", -1, 1), new Among("impi", 7, -1), new Among("ej\u00E4", -1, -1), new Among("mm\u00E4", -1, 1), new Among("imm\u00E4", 10, -1), new Among("mp\u00E4", -1, 1), new Among("imp\u00E4", 12, -1) ]; static const a_8 = [ new Among("i", -1, -1), new Among("j", -1, -1) ]; static const a_9 = [ new Among("mma", -1, 1), new Among("imma", 0, -1) ]; static const g_AEI = [17, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8] : int[]; static const g_V1 = [17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32] : int[]; static const g_V2 = [17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32] : int[]; static const g_particle_end = [17, 97, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32] : int[]; var B_ending_removed : boolean = false; var S_x : string = ""; var I_p2 : int = 0; var I_p1 : int = 0; function copy_from (other : FinnishStemmer) : void { this.B_ending_removed = other.B_ending_removed; this.S_x = other.S_x; this.I_p2 = other.I_p2; this.I_p1 = other.I_p1; super.copy_from(other); } function r_mark_regions () : boolean { var v_1 : int; var v_3 : int; // (, line 41 this.I_p1 = this.limit; this.I_p2 = this.limit; // goto, line 46 golab0: while(true) { v_1 = this.cursor; var lab1 = true; lab1: while (lab1 == true) { lab1 = false; if (!(this.in_grouping(FinnishStemmer.g_V1, 97, 246))) { break lab1; } this.cursor = v_1; break golab0; } this.cursor = v_1; if (this.cursor >= this.limit) { return false; } this.cursor++; } // gopast, line 46 golab2: while(true) { var lab3 = true; lab3: while (lab3 == true) { lab3 = false; if (!(this.out_grouping(FinnishStemmer.g_V1, 97, 246))) { break lab3; } break golab2; } if (this.cursor >= this.limit) { return false; } this.cursor++; } // setmark p1, line 46 this.I_p1 = this.cursor; // goto, line 47 golab4: while(true) { v_3 = this.cursor; var lab5 = true; lab5: while (lab5 == true) { lab5 = false; if (!(this.in_grouping(FinnishStemmer.g_V1, 97, 246))) { break lab5; } this.cursor = v_3; break golab4; } this.cursor = v_3; if (this.cursor >= this.limit) { return false; } this.cursor++; } // gopast, line 47 golab6: while(true) { var lab7 = true; lab7: while (lab7 == true) { lab7 = false; if (!(this.out_grouping(FinnishStemmer.g_V1, 97, 246))) { break lab7; } break golab6; } if (this.cursor >= this.limit) { return false; } this.cursor++; } // setmark p2, line 47 this.I_p2 = this.cursor; return true; } function r_R2 () : boolean { if (!(this.I_p2 <= this.cursor)) { return false; } return true; } function r_particle_etc () : boolean { var among_var : int; var v_1 : int; var v_2 : int; // (, line 54 // setlimit, line 55 v_1 = this.limit - this.cursor; // tomark, line 55 if (this.cursor < this.I_p1) { return false; } this.cursor = this.I_p1; v_2 = this.limit_backward; this.limit_backward = this.cursor; this.cursor = this.limit - v_1; // (, line 55 // [, line 55 this.ket = this.cursor; // substring, line 55 among_var = this.find_among_b(FinnishStemmer.a_0, 10); if (among_var == 0) { this.limit_backward = v_2; return false; } // ], line 55 this.bra = this.cursor; this.limit_backward = v_2; switch (among_var) { case 0: return false; case 1: // (, line 62 if (!(this.in_grouping_b(FinnishStemmer.g_particle_end, 97, 246))) { return false; } break; case 2: // (, line 64 // call R2, line 64 if (!this.r_R2()) { return false; } break; } // delete, line 66 if (!this.slice_del()) { return false; } return true; } function r_possessive () : boolean { var among_var : int; var v_1 : int; var v_2 : int; var v_3 : int; // (, line 68 // setlimit, line 69 v_1 = this.limit - this.cursor; // tomark, line 69 if (this.cursor < this.I_p1) { return false; } this.cursor = this.I_p1; v_2 = this.limit_backward; this.limit_backward = this.cursor; this.cursor = this.limit - v_1; // (, line 69 // [, line 69 this.ket = this.cursor; // substring, line 69 among_var = this.find_among_b(FinnishStemmer.a_4, 9); if (among_var == 0) { this.limit_backward = v_2; return false; } // ], line 69 this.bra = this.cursor; this.limit_backward = v_2; switch (among_var) { case 0: return false; case 1: // (, line 72 // not, line 72 { v_3 = this.limit - this.cursor; var lab0 = true; lab0: while (lab0 == true) { lab0 = false; // literal, line 72 if (!(this.eq_s_b(1, "k"))) { break lab0; } return false; } this.cursor = this.limit - v_3; } // delete, line 72 if (!this.slice_del()) { return false; } break; case 2: // (, line 74 // delete, line 74 if (!this.slice_del()) { return false; } // [, line 74 this.ket = this.cursor; // literal, line 74 if (!(this.eq_s_b(3, "kse"))) { return false; } // ], line 74 this.bra = this.cursor; // <-, line 74 if (!this.slice_from("ksi")) { return false; } break; case 3: // (, line 78 // delete, line 78 if (!this.slice_del()) { return false; } break; case 4: // (, line 81 // among, line 81 if (this.find_among_b(FinnishStemmer.a_1, 6) == 0) { return false; } // delete, line 81 if (!this.slice_del()) { return false; } break; case 5: // (, line 83 // among, line 83 if (this.find_among_b(FinnishStemmer.a_2, 6) == 0) { return false; } // delete, line 84 if (!this.slice_del()) { return false; } break; case 6: // (, line 86 // among, line 86 if (this.find_among_b(FinnishStemmer.a_3, 2) == 0) { return false; } // delete, line 86 if (!this.slice_del()) { return false; } break; } return true; } function r_LONG () : boolean { // among, line 91 if (this.find_among_b(FinnishStemmer.a_5, 7) == 0) { return false; } return true; } function r_VI () : boolean { // (, line 93 // literal, line 93 if (!(this.eq_s_b(1, "i"))) { return false; } if (!(this.in_grouping_b(FinnishStemmer.g_V2, 97, 246))) { return false; } return true; } function r_case_ending () : boolean { var among_var : int; var v_1 : int; var v_2 : int; var v_3 : int; var v_4 : int; var v_5 : int; // (, line 95 // setlimit, line 96 v_1 = this.limit - this.cursor; // tomark, line 96 if (this.cursor < this.I_p1) { return false; } this.cursor = this.I_p1; v_2 = this.limit_backward; this.limit_backward = this.cursor; this.cursor = this.limit - v_1; // (, line 96 // [, line 96 this.ket = this.cursor; // substring, line 96 among_var = this.find_among_b(FinnishStemmer.a_6, 30); if (among_var == 0) { this.limit_backward = v_2; return false; } // ], line 96 this.bra = this.cursor; this.limit_backward = v_2; switch (among_var) { case 0: return false; case 1: // (, line 98 // literal, line 98 if (!(this.eq_s_b(1, "a"))) { return false; } break; case 2: // (, line 99 // literal, line 99 if (!(this.eq_s_b(1, "e"))) { return false; } break; case 3: // (, line 100 // literal, line 100 if (!(this.eq_s_b(1, "i"))) { return false; } break; case 4: // (, line 101 // literal, line 101 if (!(this.eq_s_b(1, "o"))) { return false; } break; case 5: // (, line 102 // literal, line 102 if (!(this.eq_s_b(1, "\u00E4"))) { return false; } break; case 6: // (, line 103 // literal, line 103 if (!(this.eq_s_b(1, "\u00F6"))) { return false; } break; case 7: // (, line 111 // try, line 111 v_3 = this.limit - this.cursor; var lab0 = true; lab0: while (lab0 == true) { lab0 = false; // (, line 111 // and, line 113 v_4 = this.limit - this.cursor; // or, line 112 var lab1 = true; lab1: while (lab1 == true) { lab1 = false; v_5 = this.limit - this.cursor; var lab2 = true; lab2: while (lab2 == true) { lab2 = false; // call LONG, line 111 if (!this.r_LONG()) { break lab2; } break lab1; } this.cursor = this.limit - v_5; // literal, line 112 if (!(this.eq_s_b(2, "ie"))) { this.cursor = this.limit - v_3; break lab0; } } this.cursor = this.limit - v_4; // next, line 113 if (this.cursor <= this.limit_backward) { this.cursor = this.limit - v_3; break lab0; } this.cursor--; // ], line 113 this.bra = this.cursor; } break; case 8: // (, line 119 if (!(this.in_grouping_b(FinnishStemmer.g_V1, 97, 246))) { return false; } if (!(this.out_grouping_b(FinnishStemmer.g_V1, 97, 246))) { return false; } break; case 9: // (, line 121 // literal, line 121 if (!(this.eq_s_b(1, "e"))) { return false; } break; } // delete, line 138 if (!this.slice_del()) { return false; } // set ending_removed, line 139 this.B_ending_removed = true; return true; } function r_other_endings () : boolean { var among_var : int; var v_1 : int; var v_2 : int; var v_3 : int; // (, line 141 // setlimit, line 142 v_1 = this.limit - this.cursor; // tomark, line 142 if (this.cursor < this.I_p2) { return false; } this.cursor = this.I_p2; v_2 = this.limit_backward; this.limit_backward = this.cursor; this.cursor = this.limit - v_1; // (, line 142 // [, line 142 this.ket = this.cursor; // substring, line 142 among_var = this.find_among_b(FinnishStemmer.a_7, 14); if (among_var == 0) { this.limit_backward = v_2; return false; } // ], line 142 this.bra = this.cursor; this.limit_backward = v_2; switch (among_var) { case 0: return false; case 1: // (, line 146 // not, line 146 { v_3 = this.limit - this.cursor; var lab0 = true; lab0: while (lab0 == true) { lab0 = false; // literal, line 146 if (!(this.eq_s_b(2, "po"))) { break lab0; } return false; } this.cursor = this.limit - v_3; } break; } // delete, line 151 if (!this.slice_del()) { return false; } return true; } function r_i_plural () : boolean { var v_1 : int; var v_2 : int; // (, line 153 // setlimit, line 154 v_1 = this.limit - this.cursor; // tomark, line 154 if (this.cursor < this.I_p1) { return false; } this.cursor = this.I_p1; v_2 = this.limit_backward; this.limit_backward = this.cursor; this.cursor = this.limit - v_1; // (, line 154 // [, line 154 this.ket = this.cursor; // substring, line 154 if (this.find_among_b(FinnishStemmer.a_8, 2) == 0) { this.limit_backward = v_2; return false; } // ], line 154 this.bra = this.cursor; this.limit_backward = v_2; // delete, line 158 if (!this.slice_del()) { return false; } return true; } function r_t_plural () : boolean { var among_var : int; var v_1 : int; var v_2 : int; var v_3 : int; var v_4 : int; var v_5 : int; var v_6 : int; // (, line 160 // setlimit, line 161 v_1 = this.limit - this.cursor; // tomark, line 161 if (this.cursor < this.I_p1) { return false; } this.cursor = this.I_p1; v_2 = this.limit_backward; this.limit_backward = this.cursor; this.cursor = this.limit - v_1; // (, line 161 // [, line 162 this.ket = this.cursor; // literal, line 162 if (!(this.eq_s_b(1, "t"))) { this.limit_backward = v_2; return false; } // ], line 162 this.bra = this.cursor; // test, line 162 v_3 = this.limit - this.cursor; if (!(this.in_grouping_b(FinnishStemmer.g_V1, 97, 246))) { this.limit_backward = v_2; return false; } this.cursor = this.limit - v_3; // delete, line 163 if (!this.slice_del()) { return false; } this.limit_backward = v_2; // setlimit, line 165 v_4 = this.limit - this.cursor; // tomark, line 165 if (this.cursor < this.I_p2) { return false; } this.cursor = this.I_p2; v_5 = this.limit_backward; this.limit_backward = this.cursor; this.cursor = this.limit - v_4; // (, line 165 // [, line 165 this.ket = this.cursor; // substring, line 165 among_var = this.find_among_b(FinnishStemmer.a_9, 2); if (among_var == 0) { this.limit_backward = v_5; return false; } // ], line 165 this.bra = this.cursor; this.limit_backward = v_5; switch (among_var) { case 0: return false; case 1: // (, line 167 // not, line 167 { v_6 = this.limit - this.cursor; var lab0 = true; lab0: while (lab0 == true) { lab0 = false; // literal, line 167 if (!(this.eq_s_b(2, "po"))) { break lab0; } return false; } this.cursor = this.limit - v_6; } break; } // delete, line 170 if (!this.slice_del()) { return false; } return true; } function r_tidy () : boolean { var v_1 : int; var v_2 : int; var v_3 : int; var v_4 : int; var v_5 : int; var v_6 : int; var v_7 : int; var v_8 : int; var v_9 : int; // (, line 172 // setlimit, line 173 v_1 = this.limit - this.cursor; // tomark, line 173 if (this.cursor < this.I_p1) { return false; } this.cursor = this.I_p1; v_2 = this.limit_backward; this.limit_backward = this.cursor; this.cursor = this.limit - v_1; // (, line 173 // do, line 174 v_3 = this.limit - this.cursor; var lab0 = true; lab0: while (lab0 == true) { lab0 = false; // (, line 174 // and, line 174 v_4 = this.limit - this.cursor; // call LONG, line 174 if (!this.r_LONG()) { break lab0; } this.cursor = this.limit - v_4; // (, line 174 // [, line 174 this.ket = this.cursor; // next, line 174 if (this.cursor <= this.limit_backward) { break lab0; } this.cursor--; // ], line 174 this.bra = this.cursor; // delete, line 174 if (!this.slice_del()) { return false; } } this.cursor = this.limit - v_3; // do, line 175 v_5 = this.limit - this.cursor; var lab1 = true; lab1: while (lab1 == true) { lab1 = false; // (, line 175 // [, line 175 this.ket = this.cursor; if (!(this.in_grouping_b(FinnishStemmer.g_AEI, 97, 228))) { break lab1; } // ], line 175 this.bra = this.cursor; if (!(this.out_grouping_b(FinnishStemmer.g_V1, 97, 246))) { break lab1; } // delete, line 175 if (!this.slice_del()) { return false; } } this.cursor = this.limit - v_5; // do, line 176 v_6 = this.limit - this.cursor; var lab2 = true; lab2: while (lab2 == true) { lab2 = false; // (, line 176 // [, line 176 this.ket = this.cursor; // literal, line 176 if (!(this.eq_s_b(1, "j"))) { break lab2; } // ], line 176 this.bra = this.cursor; // or, line 176 var lab3 = true; lab3: while (lab3 == true) { lab3 = false; v_7 = this.limit - this.cursor; var lab4 = true; lab4: while (lab4 == true) { lab4 = false; // literal, line 176 if (!(this.eq_s_b(1, "o"))) { break lab4; } break lab3; } this.cursor = this.limit - v_7; // literal, line 176 if (!(this.eq_s_b(1, "u"))) { break lab2; } } // delete, line 176 if (!this.slice_del()) { return false; } } this.cursor = this.limit - v_6; // do, line 177 v_8 = this.limit - this.cursor; var lab5 = true; lab5: while (lab5 == true) { lab5 = false; // (, line 177 // [, line 177 this.ket = this.cursor; // literal, line 177 if (!(this.eq_s_b(1, "o"))) { break lab5; } // ], line 177 this.bra = this.cursor; // literal, line 177 if (!(this.eq_s_b(1, "j"))) { break lab5; } // delete, line 177 if (!this.slice_del()) { return false; } } this.cursor = this.limit - v_8; this.limit_backward = v_2; // goto, line 179 golab6: while(true) { v_9 = this.limit - this.cursor; var lab7 = true; lab7: while (lab7 == true) { lab7 = false; if (!(this.out_grouping_b(FinnishStemmer.g_V1, 97, 246))) { break lab7; } this.cursor = this.limit - v_9; break golab6; } this.cursor = this.limit - v_9; if (this.cursor <= this.limit_backward) { return false; } this.cursor--; } // [, line 179 this.ket = this.cursor; // next, line 179 if (this.cursor <= this.limit_backward) { return false; } this.cursor--; // ], line 179 this.bra = this.cursor; // -> x, line 179 this.S_x = this.slice_to(this.S_x); if (this.S_x == '') { return false; } // name x, line 179 if (!(this.eq_v_b(this.S_x))) { return false; } // delete, line 179 if (!this.slice_del()) { return false; } return true; } override function stem () : boolean { var v_1 : int; var v_2 : int; var v_3 : int; var v_4 : int; var v_5 : int; var v_6 : int; var v_7 : int; var v_8 : int; var v_9 : int; // (, line 183 // do, line 185 v_1 = this.cursor; var lab0 = true; lab0: while (lab0 == true) { lab0 = false; // call mark_regions, line 185 if (!this.r_mark_regions()) { break lab0; } } this.cursor = v_1; // unset ending_removed, line 186 this.B_ending_removed = false; // backwards, line 187 this.limit_backward = this.cursor; this.cursor = this.limit; // (, line 187 // do, line 188 v_2 = this.limit - this.cursor; var lab1 = true; lab1: while (lab1 == true) { lab1 = false; // call particle_etc, line 188 if (!this.r_particle_etc()) { break lab1; } } this.cursor = this.limit - v_2; // do, line 189 v_3 = this.limit - this.cursor; var lab2 = true; lab2: while (lab2 == true) { lab2 = false; // call possessive, line 189 if (!this.r_possessive()) { break lab2; } } this.cursor = this.limit - v_3; // do, line 190 v_4 = this.limit - this.cursor; var lab3 = true; lab3: while (lab3 == true) { lab3 = false; // call case_ending, line 190 if (!this.r_case_ending()) { break lab3; } } this.cursor = this.limit - v_4; // do, line 191 v_5 = this.limit - this.cursor; var lab4 = true; lab4: while (lab4 == true) { lab4 = false; // call other_endings, line 191 if (!this.r_other_endings()) { break lab4; } } this.cursor = this.limit - v_5; // or, line 192 var lab5 = true; lab5: while (lab5 == true) { lab5 = false; v_6 = this.limit - this.cursor; var lab6 = true; lab6: while (lab6 == true) { lab6 = false; // (, line 192 // Boolean test ending_removed, line 192 if (!(this.B_ending_removed)) { break lab6; } // do, line 192 v_7 = this.limit - this.cursor; var lab7 = true; lab7: while (lab7 == true) { lab7 = false; // call i_plural, line 192 if (!this.r_i_plural()) { break lab7; } } this.cursor = this.limit - v_7; break lab5; } this.cursor = this.limit - v_6; // do, line 192 v_8 = this.limit - this.cursor; var lab8 = true; lab8: while (lab8 == true) { lab8 = false; // call t_plural, line 192 if (!this.r_t_plural()) { break lab8; } } this.cursor = this.limit - v_8; } // do, line 193 v_9 = this.limit - this.cursor; var lab9 = true; lab9: while (lab9 == true) { lab9 = false; // call tidy, line 193 if (!this.r_tidy()) { break lab9; } } this.cursor = this.limit - v_9; this.cursor = this.limit_backward; return true; } function equals (o : variant) : boolean { return o instanceof FinnishStemmer; } function hashCode() : int { //http://stackoverflow.com/questions/194846/is-there-any-kind-of-hashcode-function-in-javascript var classname = "FinnishStemmer"; var hash = 0; if (classname.length == 0) return hash; for (var i = 0; i < classname.length; i++) { var char = classname.charCodeAt(i); hash = ((hash << 5) - hash) + char; hash = hash & hash; // Convert to 32bit integer } return hash; } }