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 NorwegianStemmer 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("a", -1, 1), 21 new Among("e", -1, 1), 22 new Among("ede", 1, 1), 23 new Among("ande", 1, 1), 24 new Among("ende", 1, 1), 25 new Among("ane", 1, 1), 26 new Among("ene", 1, 1), 27 new Among("hetene", 6, 1), 28 new Among("erte", 1, 3), 29 new Among("en", -1, 1), 30 new Among("heten", 9, 1), 31 new Among("ar", -1, 1), 32 new Among("er", -1, 1), 33 new Among("heter", 12, 1), 34 new Among("s", -1, 2), 35 new Among("as", 14, 1), 36 new Among("es", 14, 1), 37 new Among("edes", 16, 1), 38 new Among("endes", 16, 1), 39 new Among("enes", 16, 1), 40 new Among("hetenes", 19, 1), 41 new Among("ens", 14, 1), 42 new Among("hetens", 21, 1), 43 new Among("ers", 14, 1), 44 new Among("ets", 14, 1), 45 new Among("et", -1, 1), 46 new Among("het", 25, 1), 47 new Among("ert", -1, 3), 48 new Among("ast", -1, 1) 49 }; 50 51 private static final Among a_1[] = {new Among("dt", -1, -1), new Among("vt", -1, -1)}; 52 53 private static final Among a_2[] = { 54 new Among("leg", -1, 1), 55 new Among("eleg", 0, 1), 56 new Among("ig", -1, 1), 57 new Among("eig", 2, 1), 58 new Among("lig", 2, 1), 59 new Among("elig", 4, 1), 60 new Among("els", -1, 1), 61 new Among("lov", -1, 1), 62 new Among("elov", 7, 1), 63 new Among("slov", 7, 1), 64 new Among("hetslov", 9, 1) 65 }; 66 67 private static final char g_v[] = {17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128}; 68 69 private static final char g_s_ending[] = {119, 125, 149, 1}; 70 71 private int I_x; 72 private int I_p1; 73 r_mark_regions()74 private boolean r_mark_regions() { 75 I_p1 = limit; 76 int v_1 = cursor; 77 { 78 int c = cursor + 3; 79 if (0 > c || c > limit) { 80 return false; 81 } 82 cursor = c; 83 } 84 I_x = cursor; 85 cursor = v_1; 86 golab0: 87 while (true) { 88 int v_2 = cursor; 89 lab1: 90 { 91 if (!(in_grouping(g_v, 97, 248))) { 92 break lab1; 93 } 94 cursor = v_2; 95 break golab0; 96 } 97 cursor = v_2; 98 if (cursor >= limit) { 99 return false; 100 } 101 cursor++; 102 } 103 golab2: 104 while (true) { 105 lab3: 106 { 107 if (!(out_grouping(g_v, 97, 248))) { 108 break lab3; 109 } 110 break golab2; 111 } 112 if (cursor >= limit) { 113 return false; 114 } 115 cursor++; 116 } 117 I_p1 = cursor; 118 lab4: 119 { 120 if (!(I_p1 < I_x)) { 121 break lab4; 122 } 123 I_p1 = I_x; 124 } 125 return true; 126 } 127 r_main_suffix()128 private boolean r_main_suffix() { 129 int among_var; 130 if (cursor < I_p1) { 131 return false; 132 } 133 int v_2 = limit_backward; 134 limit_backward = I_p1; 135 ket = cursor; 136 among_var = find_among_b(a_0); 137 if (among_var == 0) { 138 limit_backward = v_2; 139 return false; 140 } 141 bra = cursor; 142 limit_backward = v_2; 143 switch (among_var) { 144 case 1: 145 slice_del(); 146 break; 147 case 2: 148 lab0: 149 { 150 int v_3 = limit - cursor; 151 lab1: 152 { 153 if (!(in_grouping_b(g_s_ending, 98, 122))) { 154 break lab1; 155 } 156 break lab0; 157 } 158 cursor = limit - v_3; 159 if (!(eq_s_b("k"))) { 160 return false; 161 } 162 if (!(out_grouping_b(g_v, 97, 248))) { 163 return false; 164 } 165 } 166 slice_del(); 167 break; 168 case 3: 169 slice_from("er"); 170 break; 171 } 172 return true; 173 } 174 r_consonant_pair()175 private boolean r_consonant_pair() { 176 int v_1 = limit - cursor; 177 if (cursor < I_p1) { 178 return false; 179 } 180 int v_3 = limit_backward; 181 limit_backward = I_p1; 182 ket = cursor; 183 if (find_among_b(a_1) == 0) { 184 limit_backward = v_3; 185 return false; 186 } 187 bra = cursor; 188 limit_backward = v_3; 189 cursor = limit - v_1; 190 if (cursor <= limit_backward) { 191 return false; 192 } 193 cursor--; 194 bra = cursor; 195 slice_del(); 196 return true; 197 } 198 r_other_suffix()199 private boolean r_other_suffix() { 200 if (cursor < I_p1) { 201 return false; 202 } 203 int v_2 = limit_backward; 204 limit_backward = I_p1; 205 ket = cursor; 206 if (find_among_b(a_2) == 0) { 207 limit_backward = v_2; 208 return false; 209 } 210 bra = cursor; 211 limit_backward = v_2; 212 slice_del(); 213 return true; 214 } 215 216 @Override stem()217 public boolean stem() { 218 int v_1 = cursor; 219 r_mark_regions(); 220 cursor = v_1; 221 limit_backward = cursor; 222 cursor = limit; 223 int v_2 = limit - cursor; 224 r_main_suffix(); 225 cursor = limit - v_2; 226 int v_3 = limit - cursor; 227 r_consonant_pair(); 228 cursor = limit - v_3; 229 int v_4 = limit - cursor; 230 r_other_suffix(); 231 cursor = limit - v_4; 232 cursor = limit_backward; 233 return true; 234 } 235 236 @Override equals(Object o)237 public boolean equals(Object o) { 238 return o instanceof NorwegianStemmer; 239 } 240 241 @Override hashCode()242 public int hashCode() { 243 return NorwegianStemmer.class.getName().hashCode(); 244 } 245 } 246