# Generated by Snowball 2.2.0 - https://snowballstem.org/
from .basestemmer import BaseStemmer
from .among import Among
class DutchStemmer(BaseStemmer):
'''
This class implements the stemming algorithm defined by a snowball script.
Generated by Snowball 2.2.0 - https://snowballstem.org/
'''
a_0 = [
Among(u"", -1, 6),
Among(u"\u00E1", 0, 1),
Among(u"\u00E4", 0, 1),
Among(u"\u00E9", 0, 2),
Among(u"\u00EB", 0, 2),
Among(u"\u00ED", 0, 3),
Among(u"\u00EF", 0, 3),
Among(u"\u00F3", 0, 4),
Among(u"\u00F6", 0, 4),
Among(u"\u00FA", 0, 5),
Among(u"\u00FC", 0, 5)
]
a_1 = [
Among(u"", -1, 3),
Among(u"I", 0, 2),
Among(u"Y", 0, 1)
]
a_2 = [
Among(u"dd", -1, -1),
Among(u"kk", -1, -1),
Among(u"tt", -1, -1)
]
a_3 = [
Among(u"ene", -1, 2),
Among(u"se", -1, 3),
Among(u"en", -1, 2),
Among(u"heden", 2, 1),
Among(u"s", -1, 3)
]
a_4 = [
Among(u"end", -1, 1),
Among(u"ig", -1, 2),
Among(u"ing", -1, 1),
Among(u"lijk", -1, 3),
Among(u"baar", -1, 4),
Among(u"bar", -1, 5)
]
a_5 = [
Among(u"aa", -1, -1),
Among(u"ee", -1, -1),
Among(u"oo", -1, -1),
Among(u"uu", -1, -1)
]
g_v = [17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128]
g_v_I = [1, 0, 0, 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128]
g_v_j = [17, 67, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128]
I_p2 = 0
I_p1 = 0
B_e_found = False
def __r_prelude(self):
v_1 = self.cursor
while True:
v_2 = self.cursor
try:
self.bra = self.cursor
among_var = self.find_among(DutchStemmer.a_0)
if among_var == 0:
raise lab0()
self.ket = self.cursor
if among_var == 1:
if not self.slice_from(u"a"):
return False
elif among_var == 2:
if not self.slice_from(u"e"):
return False
elif among_var == 3:
if not self.slice_from(u"i"):
return False
elif among_var == 4:
if not self.slice_from(u"o"):
return False
elif among_var == 5:
if not self.slice_from(u"u"):
return False
else:
if self.cursor >= self.limit:
raise lab0()
self.cursor += 1
continue
except lab0: pass
self.cursor = v_2
break
self.cursor = v_1
v_3 = self.cursor
try:
self.bra = self.cursor
if not self.eq_s(u"y"):
self.cursor = v_3
raise lab1()
self.ket = self.cursor
if not self.slice_from(u"Y"):
return False
except lab1: pass
while True:
v_4 = self.cursor
try:
try:
while True:
v_5 = self.cursor
try:
if not self.in_grouping(DutchStemmer.g_v, 97, 232):
raise lab4()
self.bra = self.cursor
try:
v_6 = self.cursor
try:
if not self.eq_s(u"i"):
raise lab6()
self.ket = self.cursor
if not self.in_grouping(DutchStemmer.g_v, 97, 232):
raise lab6()
if not self.slice_from(u"I"):
return False
raise lab5()
except lab6: pass
self.cursor = v_6
if not self.eq_s(u"y"):
raise lab4()
self.ket = self.cursor
if not self.slice_from(u"Y"):
return False
except lab5: pass
self.cursor = v_5
raise lab3()
except lab4: pass
self.cursor = v_5
if self.cursor >= self.limit:
raise lab2()
self.cursor += 1
except lab3: pass
continue
except lab2: pass
self.cursor = v_4
break
return True
def __r_mark_regions(self):
self.I_p1 = self.limit
self.I_p2 = self.limit
if not self.go_out_grouping(DutchStemmer.g_v, 97, 232):
return False
self.cursor += 1
if not self.go_in_grouping(DutchStemmer.g_v, 97, 232):
return False
self.cursor += 1
self.I_p1 = self.cursor
try:
if not self.I_p1 < 3:
raise lab0()
self.I_p1 = 3
except lab0: pass
if not self.go_out_grouping(DutchStemmer.g_v, 97, 232):
return False
self.cursor += 1
if not self.go_in_grouping(DutchStemmer.g_v, 97, 232):
return False
self.cursor += 1
self.I_p2 = self.cursor
return True
def __r_postlude(self):
while True:
v_1 = self.cursor
try:
self.bra = self.cursor
among_var = self.find_among(DutchStemmer.a_1)
if among_var == 0:
raise lab0()
self.ket = self.cursor
if among_var == 1:
if not self.slice_from(u"y"):
return False
elif among_var == 2:
if not self.slice_from(u"i"):
return False
else:
if self.cursor >= self.limit:
raise lab0()
self.cursor += 1
continue
except lab0: pass
self.cursor = v_1
break
return True
def __r_R1(self):
if not self.I_p1 <= self.cursor:
return False
return True
def __r_R2(self):
if not self.I_p2 <= self.cursor:
return False
return True
def __r_undouble(self):
v_1 = self.limit - self.cursor
if self.find_among_b(DutchStemmer.a_2) == 0:
return False
self.cursor = self.limit - v_1
self.ket = self.cursor
if self.cursor <= self.limit_backward:
return False
self.cursor -= 1
self.bra = self.cursor
if not self.slice_del():
return False
return True
def __r_e_ending(self):
self.B_e_found = False
self.ket = self.cursor
if not self.eq_s_b(u"e"):
return False
self.bra = self.cursor
if not self.__r_R1():
return False
v_1 = self.limit - self.cursor
if not self.out_grouping_b(DutchStemmer.g_v, 97, 232):
return False
self.cursor = self.limit - v_1
if not self.slice_del():
return False
self.B_e_found = True
if not self.__r_undouble():
return False
return True
def __r_en_ending(self):
if not self.__r_R1():
return False
v_1 = self.limit - self.cursor
if not self.out_grouping_b(DutchStemmer.g_v, 97, 232):
return False
self.cursor = self.limit - v_1
v_2 = self.limit - self.cursor
try:
if not self.eq_s_b(u"gem"):
raise lab0()
return False
except lab0: pass
self.cursor = self.limit - v_2
if not self.slice_del():
return False
if not self.__r_undouble():
return False
return True
def __r_standard_suffix(self):
v_1 = self.limit - self.cursor
try:
self.ket = self.cursor
among_var = self.find_among_b(DutchStemmer.a_3)
if among_var == 0:
raise lab0()
self.bra = self.cursor
if among_var == 1:
if not self.__r_R1():
raise lab0()
if not self.slice_from(u"heid"):
return False
elif among_var == 2:
if not self.__r_en_ending():
raise lab0()
else:
if not self.__r_R1():
raise lab0()
if not self.out_grouping_b(DutchStemmer.g_v_j, 97, 232):
raise lab0()
if not self.slice_del():
return False
except lab0: pass
self.cursor = self.limit - v_1
v_2 = self.limit - self.cursor
self.__r_e_ending()
self.cursor = self.limit - v_2
v_3 = self.limit - self.cursor
try:
self.ket = self.cursor
if not self.eq_s_b(u"heid"):
raise lab1()
self.bra = self.cursor
if not self.__r_R2():
raise lab1()
v_4 = self.limit - self.cursor
try:
if not self.eq_s_b(u"c"):
raise lab2()
raise lab1()
except lab2: pass
self.cursor = self.limit - v_4
if not self.slice_del():
return False
self.ket = self.cursor
if not self.eq_s_b(u"en"):
raise lab1()
self.bra = self.cursor
if not self.__r_en_ending():
raise lab1()
except lab1: pass
self.cursor = self.limit - v_3
v_5 = self.limit - self.cursor
try:
self.ket = self.cursor
among_var = self.find_among_b(DutchStemmer.a_4)
if among_var == 0:
raise lab3()
self.bra = self.cursor
if among_var == 1:
if not self.__r_R2():
raise lab3()
if not self.slice_del():
return False
try:
v_6 = self.limit - self.cursor
try:
self.ket = self.cursor
if not self.eq_s_b(u"ig"):
raise lab5()
self.bra = self.cursor
if not self.__r_R2():
raise lab5()
v_7 = self.limit - self.cursor
try:
if not self.eq_s_b(u"e"):
raise lab6()
raise lab5()
except lab6: pass
self.cursor = self.limit - v_7
if not self.slice_del():
return False
raise lab4()
except lab5: pass
self.cursor = self.limit - v_6
if not self.__r_undouble():
raise lab3()
except lab4: pass
elif among_var == 2:
if not self.__r_R2():
raise lab3()
v_8 = self.limit - self.cursor
try:
if not self.eq_s_b(u"e"):
raise lab7()
raise lab3()
except lab7: pass
self.cursor = self.limit - v_8
if not self.slice_del():
return False
elif among_var == 3:
if not self.__r_R2():
raise lab3()
if not self.slice_del():
return False
if not self.__r_e_ending():
raise lab3()
elif among_var == 4:
if not self.__r_R2():
raise lab3()
if not self.slice_del():
return False
else:
if not self.__r_R2():
raise lab3()
if not self.B_e_found:
raise lab3()
if not self.slice_del():
return False
except lab3: pass
self.cursor = self.limit - v_5
v_9 = self.limit - self.cursor
try:
if not self.out_grouping_b(DutchStemmer.g_v_I, 73, 232):
raise lab8()
v_10 = self.limit - self.cursor
if self.find_among_b(DutchStemmer.a_5) == 0:
raise lab8()
if not self.out_grouping_b(DutchStemmer.g_v, 97, 232):
raise lab8()
self.cursor = self.limit - v_10
self.ket = self.cursor
if self.cursor <= self.limit_backward:
raise lab8()
self.cursor -= 1
self.bra = self.cursor
if not self.slice_del():
return False
except lab8: pass
self.cursor = self.limit - v_9
return True
def _stem(self):
v_1 = self.cursor
self.__r_prelude()
self.cursor = v_1
v_2 = self.cursor
self.__r_mark_regions()
self.cursor = v_2
self.limit_backward = self.cursor
self.cursor = self.limit
self.__r_standard_suffix()
self.cursor = self.limit_backward
v_4 = self.cursor
self.__r_postlude()
self.cursor = v_4
return True
class lab0(BaseException): pass
class lab1(BaseException): pass
class lab2(BaseException): pass
class lab3(BaseException): pass
class lab4(BaseException): pass
class lab5(BaseException): pass
class lab6(BaseException): pass
class lab7(BaseException): pass
class lab8(BaseException): pass