1# Generated by Snowball 2.2.0 - https://snowballstem.org/ 2 3from .basestemmer import BaseStemmer 4from .among import Among 5 6 7class SwedishStemmer(BaseStemmer): 8 ''' 9 This class implements the stemming algorithm defined by a snowball script. 10 Generated by Snowball 2.2.0 - https://snowballstem.org/ 11 ''' 12 13 a_0 = [ 14 Among(u"a", -1, 1), 15 Among(u"arna", 0, 1), 16 Among(u"erna", 0, 1), 17 Among(u"heterna", 2, 1), 18 Among(u"orna", 0, 1), 19 Among(u"ad", -1, 1), 20 Among(u"e", -1, 1), 21 Among(u"ade", 6, 1), 22 Among(u"ande", 6, 1), 23 Among(u"arne", 6, 1), 24 Among(u"are", 6, 1), 25 Among(u"aste", 6, 1), 26 Among(u"en", -1, 1), 27 Among(u"anden", 12, 1), 28 Among(u"aren", 12, 1), 29 Among(u"heten", 12, 1), 30 Among(u"ern", -1, 1), 31 Among(u"ar", -1, 1), 32 Among(u"er", -1, 1), 33 Among(u"heter", 18, 1), 34 Among(u"or", -1, 1), 35 Among(u"s", -1, 2), 36 Among(u"as", 21, 1), 37 Among(u"arnas", 22, 1), 38 Among(u"ernas", 22, 1), 39 Among(u"ornas", 22, 1), 40 Among(u"es", 21, 1), 41 Among(u"ades", 26, 1), 42 Among(u"andes", 26, 1), 43 Among(u"ens", 21, 1), 44 Among(u"arens", 29, 1), 45 Among(u"hetens", 29, 1), 46 Among(u"erns", 21, 1), 47 Among(u"at", -1, 1), 48 Among(u"andet", -1, 1), 49 Among(u"het", -1, 1), 50 Among(u"ast", -1, 1) 51 ] 52 53 a_1 = [ 54 Among(u"dd", -1, -1), 55 Among(u"gd", -1, -1), 56 Among(u"nn", -1, -1), 57 Among(u"dt", -1, -1), 58 Among(u"gt", -1, -1), 59 Among(u"kt", -1, -1), 60 Among(u"tt", -1, -1) 61 ] 62 63 a_2 = [ 64 Among(u"ig", -1, 1), 65 Among(u"lig", 0, 1), 66 Among(u"els", -1, 1), 67 Among(u"fullt", -1, 3), 68 Among(u"l\u00F6st", -1, 2) 69 ] 70 71 g_v = [17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 32] 72 73 g_s_ending = [119, 127, 149] 74 75 I_x = 0 76 I_p1 = 0 77 78 def __r_mark_regions(self): 79 self.I_p1 = self.limit 80 v_1 = self.cursor 81 c = self.cursor + 3 82 if c > self.limit: 83 return False 84 self.cursor = c 85 self.I_x = self.cursor 86 self.cursor = v_1 87 if not self.go_out_grouping(SwedishStemmer.g_v, 97, 246): 88 return False 89 if not self.go_in_grouping(SwedishStemmer.g_v, 97, 246): 90 return False 91 self.cursor += 1 92 self.I_p1 = self.cursor 93 try: 94 if not self.I_p1 < self.I_x: 95 raise lab0() 96 self.I_p1 = self.I_x 97 except lab0: pass 98 return True 99 100 def __r_main_suffix(self): 101 if self.cursor < self.I_p1: 102 return False 103 v_2 = self.limit_backward 104 self.limit_backward = self.I_p1 105 self.ket = self.cursor 106 among_var = self.find_among_b(SwedishStemmer.a_0) 107 if among_var == 0: 108 self.limit_backward = v_2 109 return False 110 self.bra = self.cursor 111 self.limit_backward = v_2 112 if among_var == 1: 113 if not self.slice_del(): 114 return False 115 116 else: 117 if not self.in_grouping_b(SwedishStemmer.g_s_ending, 98, 121): 118 return False 119 if not self.slice_del(): 120 return False 121 122 return True 123 124 def __r_consonant_pair(self): 125 if self.cursor < self.I_p1: 126 return False 127 v_2 = self.limit_backward 128 self.limit_backward = self.I_p1 129 v_3 = self.limit - self.cursor 130 if self.find_among_b(SwedishStemmer.a_1) == 0: 131 self.limit_backward = v_2 132 return False 133 self.cursor = self.limit - v_3 134 self.ket = self.cursor 135 if self.cursor <= self.limit_backward: 136 self.limit_backward = v_2 137 return False 138 self.cursor -= 1 139 self.bra = self.cursor 140 if not self.slice_del(): 141 return False 142 143 self.limit_backward = v_2 144 return True 145 146 def __r_other_suffix(self): 147 if self.cursor < self.I_p1: 148 return False 149 v_2 = self.limit_backward 150 self.limit_backward = self.I_p1 151 self.ket = self.cursor 152 among_var = self.find_among_b(SwedishStemmer.a_2) 153 if among_var == 0: 154 self.limit_backward = v_2 155 return False 156 self.bra = self.cursor 157 if among_var == 1: 158 if not self.slice_del(): 159 return False 160 161 elif among_var == 2: 162 if not self.slice_from(u"l\u00F6s"): 163 return False 164 else: 165 if not self.slice_from(u"full"): 166 return False 167 self.limit_backward = v_2 168 return True 169 170 def _stem(self): 171 v_1 = self.cursor 172 self.__r_mark_regions() 173 self.cursor = v_1 174 self.limit_backward = self.cursor 175 self.cursor = self.limit 176 v_2 = self.limit - self.cursor 177 self.__r_main_suffix() 178 self.cursor = self.limit - v_2 179 v_3 = self.limit - self.cursor 180 self.__r_consonant_pair() 181 self.cursor = self.limit - v_3 182 v_4 = self.limit - self.cursor 183 self.__r_other_suffix() 184 self.cursor = self.limit - v_4 185 self.cursor = self.limit_backward 186 return True 187 188 189class lab0(BaseException): pass 190