tamil_stemmer.py 62 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788
  1. # Generated by Snowball 2.2.0 - https://snowballstem.org/
  2. from .basestemmer import BaseStemmer
  3. from .among import Among
  4. class TamilStemmer(BaseStemmer):
  5. '''
  6. This class implements the stemming algorithm defined by a snowball script.
  7. Generated by Snowball 2.2.0 - https://snowballstem.org/
  8. '''
  9. a_0 = [
  10. Among(u"\u0B95", -1, -1),
  11. Among(u"\u0B99", -1, -1),
  12. Among(u"\u0B9A", -1, -1),
  13. Among(u"\u0B9E", -1, -1),
  14. Among(u"\u0BA4", -1, -1),
  15. Among(u"\u0BA8", -1, -1),
  16. Among(u"\u0BAA", -1, -1),
  17. Among(u"\u0BAE", -1, -1),
  18. Among(u"\u0BAF", -1, -1),
  19. Among(u"\u0BB5", -1, -1)
  20. ]
  21. a_1 = [
  22. Among(u"\u0BA8\u0BCD\u0BA4", -1, -1),
  23. Among(u"\u0BA8\u0BCD\u0BA4\u0BCD", -1, -1),
  24. Among(u"\u0BA8\u0BCD", -1, -1)
  25. ]
  26. a_2 = [
  27. Among(u"\u0BBF", -1, -1),
  28. Among(u"\u0BC0", -1, -1),
  29. Among(u"\u0BC8", -1, -1)
  30. ]
  31. a_3 = [
  32. Among(u"\u0B95", -1, -1),
  33. Among(u"\u0B9A", -1, -1),
  34. Among(u"\u0B9F", -1, -1),
  35. Among(u"\u0BA4", -1, -1),
  36. Among(u"\u0BAA", -1, -1),
  37. Among(u"\u0BB1", -1, -1)
  38. ]
  39. a_4 = [
  40. Among(u"\u0B95", -1, -1),
  41. Among(u"\u0B9A", -1, -1),
  42. Among(u"\u0B9F", -1, -1),
  43. Among(u"\u0BA4", -1, -1),
  44. Among(u"\u0BAA", -1, -1),
  45. Among(u"\u0BB1", -1, -1)
  46. ]
  47. a_5 = [
  48. Among(u"\u0B95", -1, -1),
  49. Among(u"\u0B9A", -1, -1),
  50. Among(u"\u0B9F", -1, -1),
  51. Among(u"\u0BA4", -1, -1),
  52. Among(u"\u0BAA", -1, -1),
  53. Among(u"\u0BB1", -1, -1)
  54. ]
  55. a_6 = [
  56. Among(u"\u0BAF", -1, -1),
  57. Among(u"\u0BB0", -1, -1),
  58. Among(u"\u0BB2", -1, -1),
  59. Among(u"\u0BB3", -1, -1),
  60. Among(u"\u0BB4", -1, -1),
  61. Among(u"\u0BB5", -1, -1)
  62. ]
  63. a_7 = [
  64. Among(u"\u0B99", -1, -1),
  65. Among(u"\u0B9E", -1, -1),
  66. Among(u"\u0BA3", -1, -1),
  67. Among(u"\u0BA8", -1, -1),
  68. Among(u"\u0BA9", -1, -1),
  69. Among(u"\u0BAE", -1, -1)
  70. ]
  71. a_8 = [
  72. Among(u"\u0BAF", -1, -1),
  73. Among(u"\u0BB5", -1, -1),
  74. Among(u"\u0BB5\u0BCD", -1, -1)
  75. ]
  76. a_9 = [
  77. Among(u"\u0BBE", -1, -1),
  78. Among(u"\u0BBF", -1, -1),
  79. Among(u"\u0BC0", -1, -1),
  80. Among(u"\u0BC1", -1, -1),
  81. Among(u"\u0BC2", -1, -1),
  82. Among(u"\u0BC6", -1, -1),
  83. Among(u"\u0BC7", -1, -1),
  84. Among(u"\u0BC8", -1, -1)
  85. ]
  86. a_10 = [
  87. Among(u"\u0BBE", -1, -1),
  88. Among(u"\u0BBF", -1, -1),
  89. Among(u"\u0BC0", -1, -1),
  90. Among(u"\u0BC1", -1, -1),
  91. Among(u"\u0BC2", -1, -1),
  92. Among(u"\u0BC6", -1, -1),
  93. Among(u"\u0BC7", -1, -1),
  94. Among(u"\u0BC8", -1, -1)
  95. ]
  96. a_11 = [
  97. Among(u"\u0B85", -1, -1),
  98. Among(u"\u0B87", -1, -1),
  99. Among(u"\u0B89", -1, -1)
  100. ]
  101. a_12 = [
  102. Among(u"\u0B95", -1, -1),
  103. Among(u"\u0B99", -1, -1),
  104. Among(u"\u0B9A", -1, -1),
  105. Among(u"\u0B9E", -1, -1),
  106. Among(u"\u0BA4", -1, -1),
  107. Among(u"\u0BA8", -1, -1),
  108. Among(u"\u0BAA", -1, -1),
  109. Among(u"\u0BAE", -1, -1),
  110. Among(u"\u0BAF", -1, -1),
  111. Among(u"\u0BB5", -1, -1)
  112. ]
  113. a_13 = [
  114. Among(u"\u0B95", -1, -1),
  115. Among(u"\u0B9A", -1, -1),
  116. Among(u"\u0B9F", -1, -1),
  117. Among(u"\u0BA4", -1, -1),
  118. Among(u"\u0BAA", -1, -1),
  119. Among(u"\u0BB1", -1, -1)
  120. ]
  121. a_14 = [
  122. Among(u"\u0BBE", -1, -1),
  123. Among(u"\u0BC7", -1, -1),
  124. Among(u"\u0BCB", -1, -1)
  125. ]
  126. a_15 = [
  127. Among(u"\u0BAA\u0BBF", -1, -1),
  128. Among(u"\u0BB5\u0BBF", -1, -1)
  129. ]
  130. a_16 = [
  131. Among(u"\u0BBE", -1, -1),
  132. Among(u"\u0BBF", -1, -1),
  133. Among(u"\u0BC0", -1, -1),
  134. Among(u"\u0BC1", -1, -1),
  135. Among(u"\u0BC2", -1, -1),
  136. Among(u"\u0BC6", -1, -1),
  137. Among(u"\u0BC7", -1, -1),
  138. Among(u"\u0BC8", -1, -1)
  139. ]
  140. a_17 = [
  141. Among(u"\u0BAA\u0B9F\u0BCD\u0B9F", -1, -1),
  142. Among(u"\u0BAA\u0B9F\u0BCD\u0B9F\u0BA3", -1, -1),
  143. Among(u"\u0BA4\u0BBE\u0BA9", -1, -1),
  144. Among(u"\u0BAA\u0B9F\u0BBF\u0BA4\u0BBE\u0BA9", 2, -1),
  145. Among(u"\u0B95\u0BC1\u0BB0\u0BBF\u0BAF", -1, -1),
  146. Among(u"\u0BAA\u0B9F\u0BBF", -1, -1),
  147. Among(u"\u0BAA\u0BB1\u0BCD\u0BB1\u0BBF", -1, -1),
  148. Among(u"\u0BAA\u0B9F\u0BC1", -1, -1),
  149. Among(u"\u0BB5\u0BBF\u0B9F\u0BC1", -1, -1),
  150. Among(u"\u0BAA\u0B9F\u0BCD\u0B9F\u0BC1", -1, -1),
  151. Among(u"\u0BB5\u0BBF\u0B9F\u0BCD\u0B9F\u0BC1", -1, -1),
  152. Among(u"\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1", -1, -1),
  153. Among(u"\u0BC6\u0BB2\u0BCD\u0BB2\u0BBE\u0BAE\u0BCD", -1, -1)
  154. ]
  155. a_18 = [
  156. Among(u"\u0B95", -1, -1),
  157. Among(u"\u0B9A", -1, -1),
  158. Among(u"\u0B9F", -1, -1),
  159. Among(u"\u0BA4", -1, -1),
  160. Among(u"\u0BAA", -1, -1),
  161. Among(u"\u0BB1", -1, -1)
  162. ]
  163. a_19 = [
  164. Among(u"\u0B95", -1, -1),
  165. Among(u"\u0B9A", -1, -1),
  166. Among(u"\u0B9F", -1, -1),
  167. Among(u"\u0BA4", -1, -1),
  168. Among(u"\u0BAA", -1, -1),
  169. Among(u"\u0BB1", -1, -1)
  170. ]
  171. a_20 = [
  172. Among(u"\u0BBE", -1, -1),
  173. Among(u"\u0BBF", -1, -1),
  174. Among(u"\u0BC0", -1, -1),
  175. Among(u"\u0BC1", -1, -1),
  176. Among(u"\u0BC2", -1, -1),
  177. Among(u"\u0BC6", -1, -1),
  178. Among(u"\u0BC7", -1, -1),
  179. Among(u"\u0BC8", -1, -1)
  180. ]
  181. a_21 = [
  182. Among(u"\u0BBE", -1, -1),
  183. Among(u"\u0BBF", -1, -1),
  184. Among(u"\u0BC0", -1, -1),
  185. Among(u"\u0BC1", -1, -1),
  186. Among(u"\u0BC2", -1, -1),
  187. Among(u"\u0BC6", -1, -1),
  188. Among(u"\u0BC7", -1, -1),
  189. Among(u"\u0BC8", -1, -1)
  190. ]
  191. a_22 = [
  192. Among(u"\u0BAA\u0B9F\u0BC1", -1, -1),
  193. Among(u"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BCD", -1, -1)
  194. ]
  195. a_23 = [
  196. Among(u"\u0B85", -1, -1),
  197. Among(u"\u0B86", -1, -1),
  198. Among(u"\u0B87", -1, -1),
  199. Among(u"\u0B88", -1, -1),
  200. Among(u"\u0B89", -1, -1),
  201. Among(u"\u0B8A", -1, -1),
  202. Among(u"\u0B8E", -1, -1),
  203. Among(u"\u0B8F", -1, -1),
  204. Among(u"\u0B90", -1, -1),
  205. Among(u"\u0B92", -1, -1),
  206. Among(u"\u0B93", -1, -1),
  207. Among(u"\u0B94", -1, -1)
  208. ]
  209. a_24 = [
  210. Among(u"\u0BBE", -1, -1),
  211. Among(u"\u0BBF", -1, -1),
  212. Among(u"\u0BC0", -1, -1),
  213. Among(u"\u0BC1", -1, -1),
  214. Among(u"\u0BC2", -1, -1),
  215. Among(u"\u0BC6", -1, -1),
  216. Among(u"\u0BC7", -1, -1),
  217. Among(u"\u0BC8", -1, -1)
  218. ]
  219. a_25 = [
  220. Among(u"\u0B95\u0BBF\u0BB1", -1, -1),
  221. Among(u"\u0B95\u0BBF\u0BA9\u0BCD\u0BB1", -1, -1),
  222. Among(u"\u0BBE\u0BA8\u0BBF\u0BA9\u0BCD\u0BB1", -1, -1),
  223. Among(u"\u0B95\u0BBF\u0BB1\u0BCD", -1, -1),
  224. Among(u"\u0B95\u0BBF\u0BA9\u0BCD\u0BB1\u0BCD", -1, -1),
  225. Among(u"\u0BBE\u0BA8\u0BBF\u0BA9\u0BCD\u0BB1\u0BCD", -1, -1)
  226. ]
  227. B_found_vetrumai_urupu = False
  228. B_found_a_match = False
  229. def __r_has_min_length(self):
  230. if not len(self.current) > 4:
  231. return False
  232. return True
  233. def __r_fix_va_start(self):
  234. try:
  235. v_1 = self.cursor
  236. try:
  237. v_2 = self.cursor
  238. v_3 = self.cursor
  239. try:
  240. if not self.eq_s(u"\u0BB5\u0BCB"):
  241. self.cursor = v_3
  242. raise lab2()
  243. except lab2: pass
  244. self.cursor = v_2
  245. self.bra = self.cursor
  246. if not self.eq_s(u"\u0BB5\u0BCB"):
  247. raise lab1()
  248. self.ket = self.cursor
  249. if not self.slice_from(u"\u0B93"):
  250. return False
  251. raise lab0()
  252. except lab1: pass
  253. self.cursor = v_1
  254. try:
  255. v_4 = self.cursor
  256. v_5 = self.cursor
  257. try:
  258. if not self.eq_s(u"\u0BB5\u0BCA"):
  259. self.cursor = v_5
  260. raise lab4()
  261. except lab4: pass
  262. self.cursor = v_4
  263. self.bra = self.cursor
  264. if not self.eq_s(u"\u0BB5\u0BCA"):
  265. raise lab3()
  266. self.ket = self.cursor
  267. if not self.slice_from(u"\u0B92"):
  268. return False
  269. raise lab0()
  270. except lab3: pass
  271. self.cursor = v_1
  272. try:
  273. v_6 = self.cursor
  274. v_7 = self.cursor
  275. try:
  276. if not self.eq_s(u"\u0BB5\u0BC1"):
  277. self.cursor = v_7
  278. raise lab6()
  279. except lab6: pass
  280. self.cursor = v_6
  281. self.bra = self.cursor
  282. if not self.eq_s(u"\u0BB5\u0BC1"):
  283. raise lab5()
  284. self.ket = self.cursor
  285. if not self.slice_from(u"\u0B89"):
  286. return False
  287. raise lab0()
  288. except lab5: pass
  289. self.cursor = v_1
  290. v_8 = self.cursor
  291. v_9 = self.cursor
  292. try:
  293. if not self.eq_s(u"\u0BB5\u0BC2"):
  294. self.cursor = v_9
  295. raise lab7()
  296. except lab7: pass
  297. self.cursor = v_8
  298. self.bra = self.cursor
  299. if not self.eq_s(u"\u0BB5\u0BC2"):
  300. return False
  301. self.ket = self.cursor
  302. if not self.slice_from(u"\u0B8A"):
  303. return False
  304. except lab0: pass
  305. return True
  306. def __r_fix_endings(self):
  307. v_1 = self.cursor
  308. try:
  309. while True:
  310. v_2 = self.cursor
  311. try:
  312. if not self.__r_fix_ending():
  313. raise lab1()
  314. continue
  315. except lab1: pass
  316. self.cursor = v_2
  317. break
  318. except lab0: pass
  319. self.cursor = v_1
  320. return True
  321. def __r_remove_question_prefixes(self):
  322. self.bra = self.cursor
  323. if not self.eq_s(u"\u0B8E"):
  324. return False
  325. if self.find_among(TamilStemmer.a_0) == 0:
  326. return False
  327. if not self.eq_s(u"\u0BCD"):
  328. return False
  329. self.ket = self.cursor
  330. if not self.slice_del():
  331. return False
  332. v_1 = self.cursor
  333. self.__r_fix_va_start()
  334. self.cursor = v_1
  335. return True
  336. def __r_fix_ending(self):
  337. if not len(self.current) > 3:
  338. return False
  339. self.limit_backward = self.cursor
  340. self.cursor = self.limit
  341. try:
  342. v_1 = self.limit - self.cursor
  343. try:
  344. self.ket = self.cursor
  345. if self.find_among_b(TamilStemmer.a_1) == 0:
  346. raise lab1()
  347. self.bra = self.cursor
  348. if not self.slice_del():
  349. return False
  350. raise lab0()
  351. except lab1: pass
  352. self.cursor = self.limit - v_1
  353. try:
  354. self.ket = self.cursor
  355. if not self.eq_s_b(u"\u0BAF\u0BCD"):
  356. raise lab2()
  357. v_2 = self.limit - self.cursor
  358. if self.find_among_b(TamilStemmer.a_2) == 0:
  359. raise lab2()
  360. self.cursor = self.limit - v_2
  361. self.bra = self.cursor
  362. if not self.slice_del():
  363. return False
  364. raise lab0()
  365. except lab2: pass
  366. self.cursor = self.limit - v_1
  367. try:
  368. self.ket = self.cursor
  369. try:
  370. v_3 = self.limit - self.cursor
  371. try:
  372. if not self.eq_s_b(u"\u0B9F\u0BCD\u0BAA\u0BCD"):
  373. raise lab5()
  374. raise lab4()
  375. except lab5: pass
  376. self.cursor = self.limit - v_3
  377. if not self.eq_s_b(u"\u0B9F\u0BCD\u0B95\u0BCD"):
  378. raise lab3()
  379. except lab4: pass
  380. self.bra = self.cursor
  381. if not self.slice_from(u"\u0BB3\u0BCD"):
  382. return False
  383. raise lab0()
  384. except lab3: pass
  385. self.cursor = self.limit - v_1
  386. try:
  387. self.ket = self.cursor
  388. if not self.eq_s_b(u"\u0BA9\u0BCD\u0BB1\u0BCD"):
  389. raise lab6()
  390. self.bra = self.cursor
  391. if not self.slice_from(u"\u0BB2\u0BCD"):
  392. return False
  393. raise lab0()
  394. except lab6: pass
  395. self.cursor = self.limit - v_1
  396. try:
  397. self.ket = self.cursor
  398. if not self.eq_s_b(u"\u0BB1\u0BCD\u0B95\u0BCD"):
  399. raise lab7()
  400. self.bra = self.cursor
  401. if not self.slice_from(u"\u0BB2\u0BCD"):
  402. return False
  403. raise lab0()
  404. except lab7: pass
  405. self.cursor = self.limit - v_1
  406. try:
  407. self.ket = self.cursor
  408. if not self.eq_s_b(u"\u0B9F\u0BCD\u0B9F\u0BCD"):
  409. raise lab8()
  410. self.bra = self.cursor
  411. if not self.slice_from(u"\u0B9F\u0BC1"):
  412. return False
  413. raise lab0()
  414. except lab8: pass
  415. self.cursor = self.limit - v_1
  416. try:
  417. if not self.B_found_vetrumai_urupu:
  418. raise lab9()
  419. self.ket = self.cursor
  420. if not self.eq_s_b(u"\u0BA4\u0BCD\u0BA4\u0BCD"):
  421. raise lab9()
  422. v_4 = self.limit - self.cursor
  423. v_5 = self.limit - self.cursor
  424. try:
  425. if not self.eq_s_b(u"\u0BC8"):
  426. raise lab10()
  427. raise lab9()
  428. except lab10: pass
  429. self.cursor = self.limit - v_5
  430. self.cursor = self.limit - v_4
  431. self.bra = self.cursor
  432. if not self.slice_from(u"\u0BAE\u0BCD"):
  433. return False
  434. self.bra = self.cursor
  435. raise lab0()
  436. except lab9: pass
  437. self.cursor = self.limit - v_1
  438. try:
  439. self.ket = self.cursor
  440. try:
  441. v_6 = self.limit - self.cursor
  442. try:
  443. if not self.eq_s_b(u"\u0BC1\u0B95\u0BCD"):
  444. raise lab13()
  445. raise lab12()
  446. except lab13: pass
  447. self.cursor = self.limit - v_6
  448. if not self.eq_s_b(u"\u0BC1\u0B95\u0BCD\u0B95\u0BCD"):
  449. raise lab11()
  450. except lab12: pass
  451. self.bra = self.cursor
  452. if not self.slice_from(u"\u0BCD"):
  453. return False
  454. raise lab0()
  455. except lab11: pass
  456. self.cursor = self.limit - v_1
  457. try:
  458. self.ket = self.cursor
  459. if not self.eq_s_b(u"\u0BCD"):
  460. raise lab14()
  461. if self.find_among_b(TamilStemmer.a_3) == 0:
  462. raise lab14()
  463. if not self.eq_s_b(u"\u0BCD"):
  464. raise lab14()
  465. if self.find_among_b(TamilStemmer.a_4) == 0:
  466. raise lab14()
  467. self.bra = self.cursor
  468. if not self.slice_del():
  469. return False
  470. raise lab0()
  471. except lab14: pass
  472. self.cursor = self.limit - v_1
  473. try:
  474. self.ket = self.cursor
  475. if not self.eq_s_b(u"\u0BC1\u0B95\u0BCD"):
  476. raise lab15()
  477. self.bra = self.cursor
  478. if not self.slice_from(u"\u0BCD"):
  479. return False
  480. raise lab0()
  481. except lab15: pass
  482. self.cursor = self.limit - v_1
  483. try:
  484. self.ket = self.cursor
  485. if not self.eq_s_b(u"\u0BCD"):
  486. raise lab16()
  487. if self.find_among_b(TamilStemmer.a_5) == 0:
  488. raise lab16()
  489. self.bra = self.cursor
  490. if not self.slice_del():
  491. return False
  492. raise lab0()
  493. except lab16: pass
  494. self.cursor = self.limit - v_1
  495. try:
  496. self.ket = self.cursor
  497. if not self.eq_s_b(u"\u0BCD"):
  498. raise lab17()
  499. try:
  500. v_7 = self.limit - self.cursor
  501. try:
  502. if self.find_among_b(TamilStemmer.a_6) == 0:
  503. raise lab19()
  504. raise lab18()
  505. except lab19: pass
  506. self.cursor = self.limit - v_7
  507. if self.find_among_b(TamilStemmer.a_7) == 0:
  508. raise lab17()
  509. except lab18: pass
  510. if not self.eq_s_b(u"\u0BCD"):
  511. raise lab17()
  512. self.bra = self.cursor
  513. if not self.slice_from(u"\u0BCD"):
  514. return False
  515. raise lab0()
  516. except lab17: pass
  517. self.cursor = self.limit - v_1
  518. try:
  519. self.ket = self.cursor
  520. if self.find_among_b(TamilStemmer.a_8) == 0:
  521. raise lab20()
  522. self.bra = self.cursor
  523. if not self.slice_del():
  524. return False
  525. raise lab0()
  526. except lab20: pass
  527. self.cursor = self.limit - v_1
  528. try:
  529. self.ket = self.cursor
  530. if not self.eq_s_b(u"\u0BA9\u0BC1"):
  531. raise lab21()
  532. v_8 = self.limit - self.cursor
  533. v_9 = self.limit - self.cursor
  534. try:
  535. if self.find_among_b(TamilStemmer.a_9) == 0:
  536. raise lab22()
  537. raise lab21()
  538. except lab22: pass
  539. self.cursor = self.limit - v_9
  540. self.cursor = self.limit - v_8
  541. self.bra = self.cursor
  542. if not self.slice_del():
  543. return False
  544. raise lab0()
  545. except lab21: pass
  546. self.cursor = self.limit - v_1
  547. try:
  548. self.ket = self.cursor
  549. if not self.eq_s_b(u"\u0B99\u0BCD"):
  550. raise lab23()
  551. v_10 = self.limit - self.cursor
  552. v_11 = self.limit - self.cursor
  553. try:
  554. if not self.eq_s_b(u"\u0BC8"):
  555. raise lab24()
  556. raise lab23()
  557. except lab24: pass
  558. self.cursor = self.limit - v_11
  559. self.cursor = self.limit - v_10
  560. self.bra = self.cursor
  561. if not self.slice_from(u"\u0BAE\u0BCD"):
  562. return False
  563. raise lab0()
  564. except lab23: pass
  565. self.cursor = self.limit - v_1
  566. try:
  567. self.ket = self.cursor
  568. if not self.eq_s_b(u"\u0B99\u0BCD"):
  569. raise lab25()
  570. self.bra = self.cursor
  571. if not self.slice_del():
  572. return False
  573. raise lab0()
  574. except lab25: pass
  575. self.cursor = self.limit - v_1
  576. self.ket = self.cursor
  577. if not self.eq_s_b(u"\u0BCD"):
  578. return False
  579. v_12 = self.limit - self.cursor
  580. try:
  581. v_13 = self.limit - self.cursor
  582. try:
  583. if self.find_among_b(TamilStemmer.a_10) == 0:
  584. raise lab27()
  585. raise lab26()
  586. except lab27: pass
  587. self.cursor = self.limit - v_13
  588. if not self.eq_s_b(u"\u0BCD"):
  589. return False
  590. except lab26: pass
  591. self.cursor = self.limit - v_12
  592. self.bra = self.cursor
  593. if not self.slice_del():
  594. return False
  595. except lab0: pass
  596. self.cursor = self.limit_backward
  597. return True
  598. def __r_remove_pronoun_prefixes(self):
  599. self.B_found_a_match = False
  600. self.bra = self.cursor
  601. if self.find_among(TamilStemmer.a_11) == 0:
  602. return False
  603. if self.find_among(TamilStemmer.a_12) == 0:
  604. return False
  605. if not self.eq_s(u"\u0BCD"):
  606. return False
  607. self.ket = self.cursor
  608. if not self.slice_del():
  609. return False
  610. self.B_found_a_match = True
  611. v_1 = self.cursor
  612. self.__r_fix_va_start()
  613. self.cursor = v_1
  614. return True
  615. def __r_remove_plural_suffix(self):
  616. self.B_found_a_match = False
  617. self.limit_backward = self.cursor
  618. self.cursor = self.limit
  619. try:
  620. v_1 = self.limit - self.cursor
  621. try:
  622. self.ket = self.cursor
  623. if not self.eq_s_b(u"\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD"):
  624. raise lab1()
  625. v_2 = self.limit - self.cursor
  626. v_3 = self.limit - self.cursor
  627. try:
  628. if self.find_among_b(TamilStemmer.a_13) == 0:
  629. raise lab2()
  630. raise lab1()
  631. except lab2: pass
  632. self.cursor = self.limit - v_3
  633. self.cursor = self.limit - v_2
  634. self.bra = self.cursor
  635. if not self.slice_from(u"\u0BCD"):
  636. return False
  637. raise lab0()
  638. except lab1: pass
  639. self.cursor = self.limit - v_1
  640. try:
  641. self.ket = self.cursor
  642. if not self.eq_s_b(u"\u0BB1\u0BCD\u0B95\u0BB3\u0BCD"):
  643. raise lab3()
  644. self.bra = self.cursor
  645. if not self.slice_from(u"\u0BB2\u0BCD"):
  646. return False
  647. raise lab0()
  648. except lab3: pass
  649. self.cursor = self.limit - v_1
  650. try:
  651. self.ket = self.cursor
  652. if not self.eq_s_b(u"\u0B9F\u0BCD\u0B95\u0BB3\u0BCD"):
  653. raise lab4()
  654. self.bra = self.cursor
  655. if not self.slice_from(u"\u0BB3\u0BCD"):
  656. return False
  657. raise lab0()
  658. except lab4: pass
  659. self.cursor = self.limit - v_1
  660. self.ket = self.cursor
  661. if not self.eq_s_b(u"\u0B95\u0BB3\u0BCD"):
  662. return False
  663. self.bra = self.cursor
  664. if not self.slice_del():
  665. return False
  666. except lab0: pass
  667. self.B_found_a_match = True
  668. self.cursor = self.limit_backward
  669. return True
  670. def __r_remove_question_suffixes(self):
  671. if not self.__r_has_min_length():
  672. return False
  673. self.B_found_a_match = False
  674. self.limit_backward = self.cursor
  675. self.cursor = self.limit
  676. v_1 = self.limit - self.cursor
  677. try:
  678. self.ket = self.cursor
  679. if self.find_among_b(TamilStemmer.a_14) == 0:
  680. raise lab0()
  681. self.bra = self.cursor
  682. if not self.slice_from(u"\u0BCD"):
  683. return False
  684. self.B_found_a_match = True
  685. except lab0: pass
  686. self.cursor = self.limit - v_1
  687. self.cursor = self.limit_backward
  688. self.__r_fix_endings()
  689. return True
  690. def __r_remove_command_suffixes(self):
  691. if not self.__r_has_min_length():
  692. return False
  693. self.B_found_a_match = False
  694. self.limit_backward = self.cursor
  695. self.cursor = self.limit
  696. self.ket = self.cursor
  697. if self.find_among_b(TamilStemmer.a_15) == 0:
  698. return False
  699. self.bra = self.cursor
  700. if not self.slice_del():
  701. return False
  702. self.B_found_a_match = True
  703. self.cursor = self.limit_backward
  704. return True
  705. def __r_remove_um(self):
  706. self.B_found_a_match = False
  707. if not self.__r_has_min_length():
  708. return False
  709. self.limit_backward = self.cursor
  710. self.cursor = self.limit
  711. self.ket = self.cursor
  712. if not self.eq_s_b(u"\u0BC1\u0BAE\u0BCD"):
  713. return False
  714. self.bra = self.cursor
  715. if not self.slice_from(u"\u0BCD"):
  716. return False
  717. self.B_found_a_match = True
  718. self.cursor = self.limit_backward
  719. v_1 = self.cursor
  720. self.__r_fix_ending()
  721. self.cursor = v_1
  722. return True
  723. def __r_remove_common_word_endings(self):
  724. self.B_found_a_match = False
  725. if not self.__r_has_min_length():
  726. return False
  727. self.limit_backward = self.cursor
  728. self.cursor = self.limit
  729. try:
  730. v_1 = self.limit - self.cursor
  731. try:
  732. v_2 = self.limit - self.cursor
  733. self.ket = self.cursor
  734. try:
  735. v_3 = self.limit - self.cursor
  736. try:
  737. if not self.eq_s_b(u"\u0BC1\u0B9F\u0BA9\u0BCD"):
  738. raise lab3()
  739. raise lab2()
  740. except lab3: pass
  741. self.cursor = self.limit - v_3
  742. try:
  743. if not self.eq_s_b(u"\u0BBF\u0BB2\u0BCD\u0BB2\u0BC8"):
  744. raise lab4()
  745. raise lab2()
  746. except lab4: pass
  747. self.cursor = self.limit - v_3
  748. try:
  749. if not self.eq_s_b(u"\u0BBF\u0B9F\u0BAE\u0BCD"):
  750. raise lab5()
  751. raise lab2()
  752. except lab5: pass
  753. self.cursor = self.limit - v_3
  754. try:
  755. if not self.eq_s_b(u"\u0BBF\u0BA9\u0BCD\u0BB1\u0BBF"):
  756. raise lab6()
  757. raise lab2()
  758. except lab6: pass
  759. self.cursor = self.limit - v_3
  760. try:
  761. if not self.eq_s_b(u"\u0BBE\u0B95\u0BBF"):
  762. raise lab7()
  763. raise lab2()
  764. except lab7: pass
  765. self.cursor = self.limit - v_3
  766. try:
  767. if not self.eq_s_b(u"\u0BBE\u0B95\u0BBF\u0BAF"):
  768. raise lab8()
  769. raise lab2()
  770. except lab8: pass
  771. self.cursor = self.limit - v_3
  772. try:
  773. if not self.eq_s_b(u"\u0BC6\u0BA9\u0BCD\u0BB1\u0BC1"):
  774. raise lab9()
  775. raise lab2()
  776. except lab9: pass
  777. self.cursor = self.limit - v_3
  778. try:
  779. if not self.eq_s_b(u"\u0BC1\u0BB3\u0BCD\u0BB3"):
  780. raise lab10()
  781. raise lab2()
  782. except lab10: pass
  783. self.cursor = self.limit - v_3
  784. try:
  785. if not self.eq_s_b(u"\u0BC1\u0B9F\u0BC8\u0BAF"):
  786. raise lab11()
  787. raise lab2()
  788. except lab11: pass
  789. self.cursor = self.limit - v_3
  790. try:
  791. if not self.eq_s_b(u"\u0BC1\u0B9F\u0BC8"):
  792. raise lab12()
  793. raise lab2()
  794. except lab12: pass
  795. self.cursor = self.limit - v_3
  796. try:
  797. if not self.eq_s_b(u"\u0BC6\u0BA9\u0BC1\u0BAE\u0BCD"):
  798. raise lab13()
  799. raise lab2()
  800. except lab13: pass
  801. self.cursor = self.limit - v_3
  802. try:
  803. if not self.eq_s_b(u"\u0BB2\u0BCD\u0BB2"):
  804. raise lab14()
  805. v_4 = self.limit - self.cursor
  806. v_5 = self.limit - self.cursor
  807. try:
  808. if self.find_among_b(TamilStemmer.a_16) == 0:
  809. raise lab15()
  810. raise lab14()
  811. except lab15: pass
  812. self.cursor = self.limit - v_5
  813. self.cursor = self.limit - v_4
  814. raise lab2()
  815. except lab14: pass
  816. self.cursor = self.limit - v_3
  817. try:
  818. if not self.eq_s_b(u"\u0BC6\u0BA9"):
  819. raise lab16()
  820. raise lab2()
  821. except lab16: pass
  822. self.cursor = self.limit - v_3
  823. if not self.eq_s_b(u"\u0BBE\u0B95\u0BBF"):
  824. raise lab1()
  825. except lab2: pass
  826. self.bra = self.cursor
  827. if not self.slice_from(u"\u0BCD"):
  828. return False
  829. self.B_found_a_match = True
  830. self.cursor = self.limit - v_2
  831. raise lab0()
  832. except lab1: pass
  833. self.cursor = self.limit - v_1
  834. v_6 = self.limit - self.cursor
  835. self.ket = self.cursor
  836. if self.find_among_b(TamilStemmer.a_17) == 0:
  837. return False
  838. self.bra = self.cursor
  839. if not self.slice_del():
  840. return False
  841. self.B_found_a_match = True
  842. self.cursor = self.limit - v_6
  843. except lab0: pass
  844. self.cursor = self.limit_backward
  845. self.__r_fix_endings()
  846. return True
  847. def __r_remove_vetrumai_urupukal(self):
  848. self.B_found_a_match = False
  849. self.B_found_vetrumai_urupu = False
  850. if not self.__r_has_min_length():
  851. return False
  852. self.limit_backward = self.cursor
  853. self.cursor = self.limit
  854. try:
  855. v_1 = self.limit - self.cursor
  856. try:
  857. v_2 = self.limit - self.cursor
  858. self.ket = self.cursor
  859. if not self.eq_s_b(u"\u0BA9\u0BC8"):
  860. raise lab1()
  861. self.bra = self.cursor
  862. if not self.slice_del():
  863. return False
  864. self.cursor = self.limit - v_2
  865. raise lab0()
  866. except lab1: pass
  867. self.cursor = self.limit - v_1
  868. try:
  869. v_3 = self.limit - self.cursor
  870. self.ket = self.cursor
  871. try:
  872. v_4 = self.limit - self.cursor
  873. try:
  874. try:
  875. v_5 = self.limit - self.cursor
  876. try:
  877. if not self.eq_s_b(u"\u0BBF\u0BA9\u0BC8"):
  878. raise lab6()
  879. raise lab5()
  880. except lab6: pass
  881. self.cursor = self.limit - v_5
  882. if not self.eq_s_b(u"\u0BC8"):
  883. raise lab4()
  884. except lab5: pass
  885. v_6 = self.limit - self.cursor
  886. v_7 = self.limit - self.cursor
  887. try:
  888. if self.find_among_b(TamilStemmer.a_18) == 0:
  889. raise lab7()
  890. raise lab4()
  891. except lab7: pass
  892. self.cursor = self.limit - v_7
  893. self.cursor = self.limit - v_6
  894. raise lab3()
  895. except lab4: pass
  896. self.cursor = self.limit - v_4
  897. if not self.eq_s_b(u"\u0BC8"):
  898. raise lab2()
  899. v_8 = self.limit - self.cursor
  900. if self.find_among_b(TamilStemmer.a_19) == 0:
  901. raise lab2()
  902. if not self.eq_s_b(u"\u0BCD"):
  903. raise lab2()
  904. self.cursor = self.limit - v_8
  905. except lab3: pass
  906. self.bra = self.cursor
  907. if not self.slice_from(u"\u0BCD"):
  908. return False
  909. self.cursor = self.limit - v_3
  910. raise lab0()
  911. except lab2: pass
  912. self.cursor = self.limit - v_1
  913. try:
  914. v_9 = self.limit - self.cursor
  915. self.ket = self.cursor
  916. try:
  917. v_10 = self.limit - self.cursor
  918. try:
  919. if not self.eq_s_b(u"\u0BCA\u0B9F\u0BC1"):
  920. raise lab10()
  921. raise lab9()
  922. except lab10: pass
  923. self.cursor = self.limit - v_10
  924. try:
  925. if not self.eq_s_b(u"\u0BCB\u0B9F\u0BC1"):
  926. raise lab11()
  927. raise lab9()
  928. except lab11: pass
  929. self.cursor = self.limit - v_10
  930. try:
  931. if not self.eq_s_b(u"\u0BBF\u0BB2\u0BCD"):
  932. raise lab12()
  933. raise lab9()
  934. except lab12: pass
  935. self.cursor = self.limit - v_10
  936. try:
  937. if not self.eq_s_b(u"\u0BBF\u0BB1\u0BCD"):
  938. raise lab13()
  939. raise lab9()
  940. except lab13: pass
  941. self.cursor = self.limit - v_10
  942. try:
  943. if not self.eq_s_b(u"\u0BBF\u0BA9\u0BCD"):
  944. raise lab14()
  945. v_11 = self.limit - self.cursor
  946. v_12 = self.limit - self.cursor
  947. try:
  948. if not self.eq_s_b(u"\u0BAE"):
  949. raise lab15()
  950. raise lab14()
  951. except lab15: pass
  952. self.cursor = self.limit - v_12
  953. self.cursor = self.limit - v_11
  954. raise lab9()
  955. except lab14: pass
  956. self.cursor = self.limit - v_10
  957. try:
  958. if not self.eq_s_b(u"\u0BBF\u0BA9\u0BCD\u0BB1\u0BC1"):
  959. raise lab16()
  960. raise lab9()
  961. except lab16: pass
  962. self.cursor = self.limit - v_10
  963. try:
  964. if not self.eq_s_b(u"\u0BBF\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4\u0BC1"):
  965. raise lab17()
  966. raise lab9()
  967. except lab17: pass
  968. self.cursor = self.limit - v_10
  969. try:
  970. if not self.eq_s_b(u"\u0BB5\u0BBF\u0B9F"):
  971. raise lab18()
  972. raise lab9()
  973. except lab18: pass
  974. self.cursor = self.limit - v_10
  975. try:
  976. if not len(self.current) >= 7:
  977. raise lab19()
  978. if not self.eq_s_b(u"\u0BBF\u0B9F\u0BAE\u0BCD"):
  979. raise lab19()
  980. raise lab9()
  981. except lab19: pass
  982. self.cursor = self.limit - v_10
  983. try:
  984. if not self.eq_s_b(u"\u0BBE\u0BB2\u0BCD"):
  985. raise lab20()
  986. raise lab9()
  987. except lab20: pass
  988. self.cursor = self.limit - v_10
  989. try:
  990. if not self.eq_s_b(u"\u0BC1\u0B9F\u0BC8"):
  991. raise lab21()
  992. raise lab9()
  993. except lab21: pass
  994. self.cursor = self.limit - v_10
  995. try:
  996. if not self.eq_s_b(u"\u0BBE\u0BAE\u0BB2\u0BCD"):
  997. raise lab22()
  998. raise lab9()
  999. except lab22: pass
  1000. self.cursor = self.limit - v_10
  1001. try:
  1002. if not self.eq_s_b(u"\u0BB2\u0BCD"):
  1003. raise lab23()
  1004. v_13 = self.limit - self.cursor
  1005. v_14 = self.limit - self.cursor
  1006. try:
  1007. if self.find_among_b(TamilStemmer.a_20) == 0:
  1008. raise lab24()
  1009. raise lab23()
  1010. except lab24: pass
  1011. self.cursor = self.limit - v_14
  1012. self.cursor = self.limit - v_13
  1013. raise lab9()
  1014. except lab23: pass
  1015. self.cursor = self.limit - v_10
  1016. if not self.eq_s_b(u"\u0BC1\u0BB3\u0BCD"):
  1017. raise lab8()
  1018. except lab9: pass
  1019. self.bra = self.cursor
  1020. if not self.slice_from(u"\u0BCD"):
  1021. return False
  1022. self.cursor = self.limit - v_9
  1023. raise lab0()
  1024. except lab8: pass
  1025. self.cursor = self.limit - v_1
  1026. try:
  1027. v_15 = self.limit - self.cursor
  1028. self.ket = self.cursor
  1029. try:
  1030. v_16 = self.limit - self.cursor
  1031. try:
  1032. if not self.eq_s_b(u"\u0B95\u0BA3\u0BCD"):
  1033. raise lab27()
  1034. raise lab26()
  1035. except lab27: pass
  1036. self.cursor = self.limit - v_16
  1037. try:
  1038. if not self.eq_s_b(u"\u0BAE\u0BC1\u0BA9\u0BCD"):
  1039. raise lab28()
  1040. raise lab26()
  1041. except lab28: pass
  1042. self.cursor = self.limit - v_16
  1043. try:
  1044. if not self.eq_s_b(u"\u0BAE\u0BC7\u0BB2\u0BCD"):
  1045. raise lab29()
  1046. raise lab26()
  1047. except lab29: pass
  1048. self.cursor = self.limit - v_16
  1049. try:
  1050. if not self.eq_s_b(u"\u0BAE\u0BC7\u0BB1\u0BCD"):
  1051. raise lab30()
  1052. raise lab26()
  1053. except lab30: pass
  1054. self.cursor = self.limit - v_16
  1055. try:
  1056. if not self.eq_s_b(u"\u0B95\u0BC0\u0BB4\u0BCD"):
  1057. raise lab31()
  1058. raise lab26()
  1059. except lab31: pass
  1060. self.cursor = self.limit - v_16
  1061. try:
  1062. if not self.eq_s_b(u"\u0BAA\u0BBF\u0BA9\u0BCD"):
  1063. raise lab32()
  1064. raise lab26()
  1065. except lab32: pass
  1066. self.cursor = self.limit - v_16
  1067. if not self.eq_s_b(u"\u0BA4\u0BC1"):
  1068. raise lab25()
  1069. v_17 = self.limit - self.cursor
  1070. v_18 = self.limit - self.cursor
  1071. try:
  1072. if self.find_among_b(TamilStemmer.a_21) == 0:
  1073. raise lab33()
  1074. raise lab25()
  1075. except lab33: pass
  1076. self.cursor = self.limit - v_18
  1077. self.cursor = self.limit - v_17
  1078. except lab26: pass
  1079. self.bra = self.cursor
  1080. if not self.slice_del():
  1081. return False
  1082. self.cursor = self.limit - v_15
  1083. raise lab0()
  1084. except lab25: pass
  1085. self.cursor = self.limit - v_1
  1086. v_19 = self.limit - self.cursor
  1087. self.ket = self.cursor
  1088. if not self.eq_s_b(u"\u0BC0"):
  1089. return False
  1090. self.bra = self.cursor
  1091. if not self.slice_from(u"\u0BBF"):
  1092. return False
  1093. self.cursor = self.limit - v_19
  1094. except lab0: pass
  1095. self.B_found_a_match = True
  1096. self.B_found_vetrumai_urupu = True
  1097. v_20 = self.limit - self.cursor
  1098. try:
  1099. self.ket = self.cursor
  1100. if not self.eq_s_b(u"\u0BBF\u0BA9\u0BCD"):
  1101. raise lab34()
  1102. self.bra = self.cursor
  1103. if not self.slice_from(u"\u0BCD"):
  1104. return False
  1105. except lab34: pass
  1106. self.cursor = self.limit - v_20
  1107. self.cursor = self.limit_backward
  1108. self.__r_fix_endings()
  1109. return True
  1110. def __r_remove_tense_suffixes(self):
  1111. self.B_found_a_match = True
  1112. while True:
  1113. v_1 = self.cursor
  1114. try:
  1115. if not self.B_found_a_match:
  1116. raise lab0()
  1117. v_2 = self.cursor
  1118. self.__r_remove_tense_suffix()
  1119. self.cursor = v_2
  1120. continue
  1121. except lab0: pass
  1122. self.cursor = v_1
  1123. break
  1124. return True
  1125. def __r_remove_tense_suffix(self):
  1126. self.B_found_a_match = False
  1127. if not self.__r_has_min_length():
  1128. return False
  1129. self.limit_backward = self.cursor
  1130. self.cursor = self.limit
  1131. v_1 = self.limit - self.cursor
  1132. try:
  1133. try:
  1134. v_2 = self.limit - self.cursor
  1135. try:
  1136. v_3 = self.limit - self.cursor
  1137. self.ket = self.cursor
  1138. if self.find_among_b(TamilStemmer.a_22) == 0:
  1139. raise lab2()
  1140. self.bra = self.cursor
  1141. if not self.slice_del():
  1142. return False
  1143. self.B_found_a_match = True
  1144. self.cursor = self.limit - v_3
  1145. raise lab1()
  1146. except lab2: pass
  1147. self.cursor = self.limit - v_2
  1148. try:
  1149. v_4 = self.limit - self.cursor
  1150. self.ket = self.cursor
  1151. try:
  1152. v_5 = self.limit - self.cursor
  1153. try:
  1154. if not self.eq_s_b(u"\u0BAE\u0BBE\u0BB0\u0BCD"):
  1155. raise lab5()
  1156. raise lab4()
  1157. except lab5: pass
  1158. self.cursor = self.limit - v_5
  1159. try:
  1160. if not self.eq_s_b(u"\u0BAE\u0BBF\u0BA9\u0BCD"):
  1161. raise lab6()
  1162. raise lab4()
  1163. except lab6: pass
  1164. self.cursor = self.limit - v_5
  1165. try:
  1166. if not self.eq_s_b(u"\u0BA9\u0BA9\u0BCD"):
  1167. raise lab7()
  1168. raise lab4()
  1169. except lab7: pass
  1170. self.cursor = self.limit - v_5
  1171. try:
  1172. if not self.eq_s_b(u"\u0BA9\u0BBE\u0BA9\u0BCD"):
  1173. raise lab8()
  1174. raise lab4()
  1175. except lab8: pass
  1176. self.cursor = self.limit - v_5
  1177. try:
  1178. if not self.eq_s_b(u"\u0BA9\u0BBE\u0BB3\u0BCD"):
  1179. raise lab9()
  1180. raise lab4()
  1181. except lab9: pass
  1182. self.cursor = self.limit - v_5
  1183. try:
  1184. if not self.eq_s_b(u"\u0BA9\u0BBE\u0BB0\u0BCD"):
  1185. raise lab10()
  1186. raise lab4()
  1187. except lab10: pass
  1188. self.cursor = self.limit - v_5
  1189. try:
  1190. if not self.eq_s_b(u"\u0BB5\u0BA9\u0BCD"):
  1191. raise lab11()
  1192. v_6 = self.limit - self.cursor
  1193. v_7 = self.limit - self.cursor
  1194. try:
  1195. if self.find_among_b(TamilStemmer.a_23) == 0:
  1196. raise lab12()
  1197. raise lab11()
  1198. except lab12: pass
  1199. self.cursor = self.limit - v_7
  1200. self.cursor = self.limit - v_6
  1201. raise lab4()
  1202. except lab11: pass
  1203. self.cursor = self.limit - v_5
  1204. try:
  1205. if not self.eq_s_b(u"\u0BA9\u0BB3\u0BCD"):
  1206. raise lab13()
  1207. raise lab4()
  1208. except lab13: pass
  1209. self.cursor = self.limit - v_5
  1210. try:
  1211. if not self.eq_s_b(u"\u0BB5\u0BB3\u0BCD"):
  1212. raise lab14()
  1213. raise lab4()
  1214. except lab14: pass
  1215. self.cursor = self.limit - v_5
  1216. try:
  1217. if not self.eq_s_b(u"\u0BA9\u0BB0\u0BCD"):
  1218. raise lab15()
  1219. raise lab4()
  1220. except lab15: pass
  1221. self.cursor = self.limit - v_5
  1222. try:
  1223. if not self.eq_s_b(u"\u0BB5\u0BB0\u0BCD"):
  1224. raise lab16()
  1225. raise lab4()
  1226. except lab16: pass
  1227. self.cursor = self.limit - v_5
  1228. try:
  1229. if not self.eq_s_b(u"\u0BA9"):
  1230. raise lab17()
  1231. raise lab4()
  1232. except lab17: pass
  1233. self.cursor = self.limit - v_5
  1234. try:
  1235. if not self.eq_s_b(u"\u0BAA"):
  1236. raise lab18()
  1237. raise lab4()
  1238. except lab18: pass
  1239. self.cursor = self.limit - v_5
  1240. try:
  1241. if not self.eq_s_b(u"\u0B95"):
  1242. raise lab19()
  1243. raise lab4()
  1244. except lab19: pass
  1245. self.cursor = self.limit - v_5
  1246. try:
  1247. if not self.eq_s_b(u"\u0BA4"):
  1248. raise lab20()
  1249. raise lab4()
  1250. except lab20: pass
  1251. self.cursor = self.limit - v_5
  1252. try:
  1253. if not self.eq_s_b(u"\u0BAF"):
  1254. raise lab21()
  1255. raise lab4()
  1256. except lab21: pass
  1257. self.cursor = self.limit - v_5
  1258. try:
  1259. if not self.eq_s_b(u"\u0BAA\u0BA9\u0BCD"):
  1260. raise lab22()
  1261. raise lab4()
  1262. except lab22: pass
  1263. self.cursor = self.limit - v_5
  1264. try:
  1265. if not self.eq_s_b(u"\u0BAA\u0BB3\u0BCD"):
  1266. raise lab23()
  1267. raise lab4()
  1268. except lab23: pass
  1269. self.cursor = self.limit - v_5
  1270. try:
  1271. if not self.eq_s_b(u"\u0BAA\u0BB0\u0BCD"):
  1272. raise lab24()
  1273. raise lab4()
  1274. except lab24: pass
  1275. self.cursor = self.limit - v_5
  1276. try:
  1277. if not self.eq_s_b(u"\u0BA4\u0BC1"):
  1278. raise lab25()
  1279. v_8 = self.limit - self.cursor
  1280. v_9 = self.limit - self.cursor
  1281. try:
  1282. if self.find_among_b(TamilStemmer.a_24) == 0:
  1283. raise lab26()
  1284. raise lab25()
  1285. except lab26: pass
  1286. self.cursor = self.limit - v_9
  1287. self.cursor = self.limit - v_8
  1288. raise lab4()
  1289. except lab25: pass
  1290. self.cursor = self.limit - v_5
  1291. try:
  1292. if not self.eq_s_b(u"\u0BBF\u0BB1\u0BCD\u0BB1\u0BC1"):
  1293. raise lab27()
  1294. raise lab4()
  1295. except lab27: pass
  1296. self.cursor = self.limit - v_5
  1297. try:
  1298. if not self.eq_s_b(u"\u0BAA\u0BAE\u0BCD"):
  1299. raise lab28()
  1300. raise lab4()
  1301. except lab28: pass
  1302. self.cursor = self.limit - v_5
  1303. try:
  1304. if not self.eq_s_b(u"\u0BA9\u0BAE\u0BCD"):
  1305. raise lab29()
  1306. raise lab4()
  1307. except lab29: pass
  1308. self.cursor = self.limit - v_5
  1309. try:
  1310. if not self.eq_s_b(u"\u0BA4\u0BC1\u0BAE\u0BCD"):
  1311. raise lab30()
  1312. raise lab4()
  1313. except lab30: pass
  1314. self.cursor = self.limit - v_5
  1315. try:
  1316. if not self.eq_s_b(u"\u0BB1\u0BC1\u0BAE\u0BCD"):
  1317. raise lab31()
  1318. raise lab4()
  1319. except lab31: pass
  1320. self.cursor = self.limit - v_5
  1321. try:
  1322. if not self.eq_s_b(u"\u0B95\u0BC1\u0BAE\u0BCD"):
  1323. raise lab32()
  1324. raise lab4()
  1325. except lab32: pass
  1326. self.cursor = self.limit - v_5
  1327. try:
  1328. if not self.eq_s_b(u"\u0BA9\u0BC6\u0BA9\u0BCD"):
  1329. raise lab33()
  1330. raise lab4()
  1331. except lab33: pass
  1332. self.cursor = self.limit - v_5
  1333. try:
  1334. if not self.eq_s_b(u"\u0BA9\u0BC8"):
  1335. raise lab34()
  1336. raise lab4()
  1337. except lab34: pass
  1338. self.cursor = self.limit - v_5
  1339. if not self.eq_s_b(u"\u0BB5\u0BC8"):
  1340. raise lab3()
  1341. except lab4: pass
  1342. self.bra = self.cursor
  1343. if not self.slice_del():
  1344. return False
  1345. self.B_found_a_match = True
  1346. self.cursor = self.limit - v_4
  1347. raise lab1()
  1348. except lab3: pass
  1349. self.cursor = self.limit - v_2
  1350. try:
  1351. v_10 = self.limit - self.cursor
  1352. self.ket = self.cursor
  1353. try:
  1354. v_11 = self.limit - self.cursor
  1355. try:
  1356. if not self.eq_s_b(u"\u0BBE\u0BA9\u0BCD"):
  1357. raise lab37()
  1358. v_12 = self.limit - self.cursor
  1359. v_13 = self.limit - self.cursor
  1360. try:
  1361. if not self.eq_s_b(u"\u0B9A"):
  1362. raise lab38()
  1363. raise lab37()
  1364. except lab38: pass
  1365. self.cursor = self.limit - v_13
  1366. self.cursor = self.limit - v_12
  1367. raise lab36()
  1368. except lab37: pass
  1369. self.cursor = self.limit - v_11
  1370. try:
  1371. if not self.eq_s_b(u"\u0BBE\u0BB3\u0BCD"):
  1372. raise lab39()
  1373. raise lab36()
  1374. except lab39: pass
  1375. self.cursor = self.limit - v_11
  1376. try:
  1377. if not self.eq_s_b(u"\u0BBE\u0BB0\u0BCD"):
  1378. raise lab40()
  1379. raise lab36()
  1380. except lab40: pass
  1381. self.cursor = self.limit - v_11
  1382. try:
  1383. if not self.eq_s_b(u"\u0BC7\u0BA9\u0BCD"):
  1384. raise lab41()
  1385. raise lab36()
  1386. except lab41: pass
  1387. self.cursor = self.limit - v_11
  1388. try:
  1389. if not self.eq_s_b(u"\u0BBE"):
  1390. raise lab42()
  1391. raise lab36()
  1392. except lab42: pass
  1393. self.cursor = self.limit - v_11
  1394. try:
  1395. if not self.eq_s_b(u"\u0BBE\u0BAE\u0BCD"):
  1396. raise lab43()
  1397. raise lab36()
  1398. except lab43: pass
  1399. self.cursor = self.limit - v_11
  1400. try:
  1401. if not self.eq_s_b(u"\u0BC6\u0BAE\u0BCD"):
  1402. raise lab44()
  1403. raise lab36()
  1404. except lab44: pass
  1405. self.cursor = self.limit - v_11
  1406. try:
  1407. if not self.eq_s_b(u"\u0BC7\u0BAE\u0BCD"):
  1408. raise lab45()
  1409. raise lab36()
  1410. except lab45: pass
  1411. self.cursor = self.limit - v_11
  1412. try:
  1413. if not self.eq_s_b(u"\u0BCB\u0BAE\u0BCD"):
  1414. raise lab46()
  1415. raise lab36()
  1416. except lab46: pass
  1417. self.cursor = self.limit - v_11
  1418. try:
  1419. if not self.eq_s_b(u"\u0B95\u0BC1\u0BAE\u0BCD"):
  1420. raise lab47()
  1421. raise lab36()
  1422. except lab47: pass
  1423. self.cursor = self.limit - v_11
  1424. try:
  1425. if not self.eq_s_b(u"\u0BA4\u0BC1\u0BAE\u0BCD"):
  1426. raise lab48()
  1427. raise lab36()
  1428. except lab48: pass
  1429. self.cursor = self.limit - v_11
  1430. try:
  1431. if not self.eq_s_b(u"\u0B9F\u0BC1\u0BAE\u0BCD"):
  1432. raise lab49()
  1433. raise lab36()
  1434. except lab49: pass
  1435. self.cursor = self.limit - v_11
  1436. try:
  1437. if not self.eq_s_b(u"\u0BB1\u0BC1\u0BAE\u0BCD"):
  1438. raise lab50()
  1439. raise lab36()
  1440. except lab50: pass
  1441. self.cursor = self.limit - v_11
  1442. try:
  1443. if not self.eq_s_b(u"\u0BBE\u0BAF\u0BCD"):
  1444. raise lab51()
  1445. raise lab36()
  1446. except lab51: pass
  1447. self.cursor = self.limit - v_11
  1448. try:
  1449. if not self.eq_s_b(u"\u0BA9\u0BC6\u0BA9\u0BCD"):
  1450. raise lab52()
  1451. raise lab36()
  1452. except lab52: pass
  1453. self.cursor = self.limit - v_11
  1454. try:
  1455. if not self.eq_s_b(u"\u0BA9\u0BBF\u0BB0\u0BCD"):
  1456. raise lab53()
  1457. raise lab36()
  1458. except lab53: pass
  1459. self.cursor = self.limit - v_11
  1460. try:
  1461. if not self.eq_s_b(u"\u0BC0\u0BB0\u0BCD"):
  1462. raise lab54()
  1463. raise lab36()
  1464. except lab54: pass
  1465. self.cursor = self.limit - v_11
  1466. if not self.eq_s_b(u"\u0BC0\u0BAF\u0BB0\u0BCD"):
  1467. raise lab35()
  1468. except lab36: pass
  1469. self.bra = self.cursor
  1470. if not self.slice_from(u"\u0BCD"):
  1471. return False
  1472. self.B_found_a_match = True
  1473. self.cursor = self.limit - v_10
  1474. raise lab1()
  1475. except lab35: pass
  1476. self.cursor = self.limit - v_2
  1477. v_14 = self.limit - self.cursor
  1478. self.ket = self.cursor
  1479. try:
  1480. v_15 = self.limit - self.cursor
  1481. try:
  1482. if not self.eq_s_b(u"\u0B95\u0BC1"):
  1483. raise lab56()
  1484. raise lab55()
  1485. except lab56: pass
  1486. self.cursor = self.limit - v_15
  1487. if not self.eq_s_b(u"\u0BA4\u0BC1"):
  1488. raise lab0()
  1489. except lab55: pass
  1490. v_16 = self.limit - self.cursor
  1491. if not self.eq_s_b(u"\u0BCD"):
  1492. raise lab0()
  1493. self.cursor = self.limit - v_16
  1494. self.bra = self.cursor
  1495. if not self.slice_del():
  1496. return False
  1497. self.B_found_a_match = True
  1498. self.cursor = self.limit - v_14
  1499. except lab1: pass
  1500. except lab0: pass
  1501. self.cursor = self.limit - v_1
  1502. v_17 = self.limit - self.cursor
  1503. try:
  1504. self.ket = self.cursor
  1505. if self.find_among_b(TamilStemmer.a_25) == 0:
  1506. raise lab57()
  1507. self.bra = self.cursor
  1508. if not self.slice_del():
  1509. return False
  1510. self.B_found_a_match = True
  1511. except lab57: pass
  1512. self.cursor = self.limit - v_17
  1513. self.cursor = self.limit_backward
  1514. self.__r_fix_endings()
  1515. return True
  1516. def _stem(self):
  1517. self.B_found_vetrumai_urupu = False
  1518. v_1 = self.cursor
  1519. self.__r_fix_ending()
  1520. self.cursor = v_1
  1521. if not self.__r_has_min_length():
  1522. return False
  1523. v_2 = self.cursor
  1524. self.__r_remove_question_prefixes()
  1525. self.cursor = v_2
  1526. v_3 = self.cursor
  1527. self.__r_remove_pronoun_prefixes()
  1528. self.cursor = v_3
  1529. v_4 = self.cursor
  1530. self.__r_remove_question_suffixes()
  1531. self.cursor = v_4
  1532. v_5 = self.cursor
  1533. self.__r_remove_um()
  1534. self.cursor = v_5
  1535. v_6 = self.cursor
  1536. self.__r_remove_common_word_endings()
  1537. self.cursor = v_6
  1538. v_7 = self.cursor
  1539. self.__r_remove_vetrumai_urupukal()
  1540. self.cursor = v_7
  1541. v_8 = self.cursor
  1542. self.__r_remove_plural_suffix()
  1543. self.cursor = v_8
  1544. v_9 = self.cursor
  1545. self.__r_remove_command_suffixes()
  1546. self.cursor = v_9
  1547. v_10 = self.cursor
  1548. self.__r_remove_tense_suffixes()
  1549. self.cursor = v_10
  1550. return True
  1551. class lab0(BaseException): pass
  1552. class lab1(BaseException): pass
  1553. class lab2(BaseException): pass
  1554. class lab3(BaseException): pass
  1555. class lab4(BaseException): pass
  1556. class lab5(BaseException): pass
  1557. class lab6(BaseException): pass
  1558. class lab7(BaseException): pass
  1559. class lab8(BaseException): pass
  1560. class lab9(BaseException): pass
  1561. class lab10(BaseException): pass
  1562. class lab11(BaseException): pass
  1563. class lab12(BaseException): pass
  1564. class lab13(BaseException): pass
  1565. class lab14(BaseException): pass
  1566. class lab15(BaseException): pass
  1567. class lab16(BaseException): pass
  1568. class lab17(BaseException): pass
  1569. class lab18(BaseException): pass
  1570. class lab19(BaseException): pass
  1571. class lab20(BaseException): pass
  1572. class lab21(BaseException): pass
  1573. class lab22(BaseException): pass
  1574. class lab23(BaseException): pass
  1575. class lab24(BaseException): pass
  1576. class lab25(BaseException): pass
  1577. class lab26(BaseException): pass
  1578. class lab27(BaseException): pass
  1579. class lab28(BaseException): pass
  1580. class lab29(BaseException): pass
  1581. class lab30(BaseException): pass
  1582. class lab31(BaseException): pass
  1583. class lab32(BaseException): pass
  1584. class lab33(BaseException): pass
  1585. class lab34(BaseException): pass
  1586. class lab35(BaseException): pass
  1587. class lab36(BaseException): pass
  1588. class lab37(BaseException): pass
  1589. class lab38(BaseException): pass
  1590. class lab39(BaseException): pass
  1591. class lab40(BaseException): pass
  1592. class lab41(BaseException): pass
  1593. class lab42(BaseException): pass
  1594. class lab43(BaseException): pass
  1595. class lab44(BaseException): pass
  1596. class lab45(BaseException): pass
  1597. class lab46(BaseException): pass
  1598. class lab47(BaseException): pass
  1599. class lab48(BaseException): pass
  1600. class lab49(BaseException): pass
  1601. class lab50(BaseException): pass
  1602. class lab51(BaseException): pass
  1603. class lab52(BaseException): pass
  1604. class lab53(BaseException): pass
  1605. class lab54(BaseException): pass
  1606. class lab55(BaseException): pass
  1607. class lab56(BaseException): pass
  1608. class lab57(BaseException): pass