1# Generated by Snowball 2.2.0 - https://snowballstem.org/ 2 3from .basestemmer import BaseStemmer 4from .among import Among 5 6 7class DanishStemmer(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"hed", -1, 1), 15 Among(u"ethed", 0, 1), 16 Among(u"ered", -1, 1), 17 Among(u"e", -1, 1), 18 Among(u"erede", 3, 1), 19 Among(u"ende", 3, 1), 20 Among(u"erende", 5, 1), 21 Among(u"ene", 3, 1), 22 Among(u"erne", 3, 1), 23 Among(u"ere", 3, 1), 24 Among(u"en", -1, 1), 25 Among(u"heden", 10, 1), 26 Among(u"eren", 10, 1), 27 Among(u"er", -1, 1), 28 Among(u"heder", 13, 1), 29 Among(u"erer", 13, 1), 30 Among(u"s", -1, 2), 31 Among(u"heds", 16, 1), 32 Among(u"es", 16, 1), 33 Among(u"endes", 18, 1), 34 Among(u"erendes", 19, 1), 35 Among(u"enes", 18, 1), 36 Among(u"ernes", 18, 1), 37 Among(u"eres", 18, 1), 38 Among(u"ens", 16, 1), 39 Among(u"hedens", 24, 1), 40 Among(u"erens", 24, 1), 41 Among(u"ers", 16, 1), 42 Among(u"ets", 16, 1), 43 Among(u"erets", 28, 1), 44 Among(u"et", -1, 1), 45 Among(u"eret", 30, 1) 46 ] 47 48 a_1 = [ 49 Among(u"gd", -1, -1), 50 Among(u"dt", -1, -1), 51 Among(u"gt", -1, -1), 52 Among(u"kt", -1, -1) 53 ] 54 55 a_2 = [ 56 Among(u"ig", -1, 1), 57 Among(u"lig", 0, 1), 58 Among(u"elig", 1, 1), 59 Among(u"els", -1, 1), 60 Among(u"l\u00F8st", -1, 2) 61 ] 62 63 g_c = [119, 223, 119, 1] 64 65 g_v = [17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128] 66 67 g_s_ending = [239, 254, 42, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16] 68 69 I_x = 0 70 I_p1 = 0 71 S_ch = "" 72 73 def __r_mark_regions(self): 74 self.I_p1 = self.limit 75 v_1 = self.cursor 76 c = self.cursor + 3 77 if c > self.limit: 78 return False 79 self.cursor = c 80 self.I_x = self.cursor 81 self.cursor = v_1 82 if not self.go_out_grouping(DanishStemmer.g_v, 97, 248): 83 return False 84 if not self.go_in_grouping(DanishStemmer.g_v, 97, 248): 85 return False 86 self.cursor += 1 87 self.I_p1 = self.cursor 88 try: 89 if not self.I_p1 < self.I_x: 90 raise lab0() 91 self.I_p1 = self.I_x 92 except lab0: pass 93 return True 94 95 def __r_main_suffix(self): 96 if self.cursor < self.I_p1: 97 return False 98 v_2 = self.limit_backward 99 self.limit_backward = self.I_p1 100 self.ket = self.cursor 101 among_var = self.find_among_b(DanishStemmer.a_0) 102 if among_var == 0: 103 self.limit_backward = v_2 104 return False 105 self.bra = self.cursor 106 self.limit_backward = v_2 107 if among_var == 1: 108 if not self.slice_del(): 109 return False 110 111 else: 112 if not self.in_grouping_b(DanishStemmer.g_s_ending, 97, 229): 113 return False 114 if not self.slice_del(): 115 return False 116 117 return True 118 119 def __r_consonant_pair(self): 120 v_1 = self.limit - self.cursor 121 if self.cursor < self.I_p1: 122 return False 123 v_3 = self.limit_backward 124 self.limit_backward = self.I_p1 125 self.ket = self.cursor 126 if self.find_among_b(DanishStemmer.a_1) == 0: 127 self.limit_backward = v_3 128 return False 129 self.bra = self.cursor 130 self.limit_backward = v_3 131 self.cursor = self.limit - v_1 132 if self.cursor <= self.limit_backward: 133 return False 134 self.cursor -= 1 135 self.bra = self.cursor 136 if not self.slice_del(): 137 return False 138 139 return True 140 141 def __r_other_suffix(self): 142 v_1 = self.limit - self.cursor 143 try: 144 self.ket = self.cursor 145 if not self.eq_s_b(u"st"): 146 raise lab0() 147 self.bra = self.cursor 148 if not self.eq_s_b(u"ig"): 149 raise lab0() 150 if not self.slice_del(): 151 return False 152 153 except lab0: pass 154 self.cursor = self.limit - v_1 155 if self.cursor < self.I_p1: 156 return False 157 v_3 = self.limit_backward 158 self.limit_backward = self.I_p1 159 self.ket = self.cursor 160 among_var = self.find_among_b(DanishStemmer.a_2) 161 if among_var == 0: 162 self.limit_backward = v_3 163 return False 164 self.bra = self.cursor 165 self.limit_backward = v_3 166 if among_var == 1: 167 if not self.slice_del(): 168 return False 169 170 v_4 = self.limit - self.cursor 171 self.__r_consonant_pair() 172 self.cursor = self.limit - v_4 173 else: 174 if not self.slice_from(u"l\u00F8s"): 175 return False 176 return True 177 178 def __r_undouble(self): 179 if self.cursor < self.I_p1: 180 return False 181 v_2 = self.limit_backward 182 self.limit_backward = self.I_p1 183 self.ket = self.cursor 184 if not self.in_grouping_b(DanishStemmer.g_c, 98, 122): 185 self.limit_backward = v_2 186 return False 187 self.bra = self.cursor 188 self.S_ch = self.slice_to() 189 if self.S_ch == '': 190 return False 191 self.limit_backward = v_2 192 if not self.eq_s_b(self.S_ch): 193 return False 194 if not self.slice_del(): 195 return False 196 197 return True 198 199 def _stem(self): 200 v_1 = self.cursor 201 self.__r_mark_regions() 202 self.cursor = v_1 203 self.limit_backward = self.cursor 204 self.cursor = self.limit 205 v_2 = self.limit - self.cursor 206 self.__r_main_suffix() 207 self.cursor = self.limit - v_2 208 v_3 = self.limit - self.cursor 209 self.__r_consonant_pair() 210 self.cursor = self.limit - v_3 211 v_4 = self.limit - self.cursor 212 self.__r_other_suffix() 213 self.cursor = self.limit - v_4 214 v_5 = self.limit - self.cursor 215 self.__r_undouble() 216 self.cursor = self.limit - v_5 217 self.cursor = self.limit_backward 218 return True 219 220 221class lab0(BaseException): pass 222