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 RussianStemmer 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("\u0432", -1, 1), 21 new Among("\u0438\u0432", 0, 2), 22 new Among("\u044B\u0432", 0, 2), 23 new Among("\u0432\u0448\u0438", -1, 1), 24 new Among("\u0438\u0432\u0448\u0438", 3, 2), 25 new Among("\u044B\u0432\u0448\u0438", 3, 2), 26 new Among("\u0432\u0448\u0438\u0441\u044C", -1, 1), 27 new Among("\u0438\u0432\u0448\u0438\u0441\u044C", 6, 2), 28 new Among("\u044B\u0432\u0448\u0438\u0441\u044C", 6, 2) 29 }; 30 31 private static final Among a_1[] = { 32 new Among("\u0435\u0435", -1, 1), 33 new Among("\u0438\u0435", -1, 1), 34 new Among("\u043E\u0435", -1, 1), 35 new Among("\u044B\u0435", -1, 1), 36 new Among("\u0438\u043C\u0438", -1, 1), 37 new Among("\u044B\u043C\u0438", -1, 1), 38 new Among("\u0435\u0439", -1, 1), 39 new Among("\u0438\u0439", -1, 1), 40 new Among("\u043E\u0439", -1, 1), 41 new Among("\u044B\u0439", -1, 1), 42 new Among("\u0435\u043C", -1, 1), 43 new Among("\u0438\u043C", -1, 1), 44 new Among("\u043E\u043C", -1, 1), 45 new Among("\u044B\u043C", -1, 1), 46 new Among("\u0435\u0433\u043E", -1, 1), 47 new Among("\u043E\u0433\u043E", -1, 1), 48 new Among("\u0435\u043C\u0443", -1, 1), 49 new Among("\u043E\u043C\u0443", -1, 1), 50 new Among("\u0438\u0445", -1, 1), 51 new Among("\u044B\u0445", -1, 1), 52 new Among("\u0435\u044E", -1, 1), 53 new Among("\u043E\u044E", -1, 1), 54 new Among("\u0443\u044E", -1, 1), 55 new Among("\u044E\u044E", -1, 1), 56 new Among("\u0430\u044F", -1, 1), 57 new Among("\u044F\u044F", -1, 1) 58 }; 59 60 private static final Among a_2[] = { 61 new Among("\u0435\u043C", -1, 1), 62 new Among("\u043D\u043D", -1, 1), 63 new Among("\u0432\u0448", -1, 1), 64 new Among("\u0438\u0432\u0448", 2, 2), 65 new Among("\u044B\u0432\u0448", 2, 2), 66 new Among("\u0449", -1, 1), 67 new Among("\u044E\u0449", 5, 1), 68 new Among("\u0443\u044E\u0449", 6, 2) 69 }; 70 71 private static final Among a_3[] = { 72 new Among("\u0441\u044C", -1, 1), new Among("\u0441\u044F", -1, 1) 73 }; 74 75 private static final Among a_4[] = { 76 new Among("\u043B\u0430", -1, 1), 77 new Among("\u0438\u043B\u0430", 0, 2), 78 new Among("\u044B\u043B\u0430", 0, 2), 79 new Among("\u043D\u0430", -1, 1), 80 new Among("\u0435\u043D\u0430", 3, 2), 81 new Among("\u0435\u0442\u0435", -1, 1), 82 new Among("\u0438\u0442\u0435", -1, 2), 83 new Among("\u0439\u0442\u0435", -1, 1), 84 new Among("\u0435\u0439\u0442\u0435", 7, 2), 85 new Among("\u0443\u0439\u0442\u0435", 7, 2), 86 new Among("\u043B\u0438", -1, 1), 87 new Among("\u0438\u043B\u0438", 10, 2), 88 new Among("\u044B\u043B\u0438", 10, 2), 89 new Among("\u0439", -1, 1), 90 new Among("\u0435\u0439", 13, 2), 91 new Among("\u0443\u0439", 13, 2), 92 new Among("\u043B", -1, 1), 93 new Among("\u0438\u043B", 16, 2), 94 new Among("\u044B\u043B", 16, 2), 95 new Among("\u0435\u043C", -1, 1), 96 new Among("\u0438\u043C", -1, 2), 97 new Among("\u044B\u043C", -1, 2), 98 new Among("\u043D", -1, 1), 99 new Among("\u0435\u043D", 22, 2), 100 new Among("\u043B\u043E", -1, 1), 101 new Among("\u0438\u043B\u043E", 24, 2), 102 new Among("\u044B\u043B\u043E", 24, 2), 103 new Among("\u043D\u043E", -1, 1), 104 new Among("\u0435\u043D\u043E", 27, 2), 105 new Among("\u043D\u043D\u043E", 27, 1), 106 new Among("\u0435\u0442", -1, 1), 107 new Among("\u0443\u0435\u0442", 30, 2), 108 new Among("\u0438\u0442", -1, 2), 109 new Among("\u044B\u0442", -1, 2), 110 new Among("\u044E\u0442", -1, 1), 111 new Among("\u0443\u044E\u0442", 34, 2), 112 new Among("\u044F\u0442", -1, 2), 113 new Among("\u043D\u044B", -1, 1), 114 new Among("\u0435\u043D\u044B", 37, 2), 115 new Among("\u0442\u044C", -1, 1), 116 new Among("\u0438\u0442\u044C", 39, 2), 117 new Among("\u044B\u0442\u044C", 39, 2), 118 new Among("\u0435\u0448\u044C", -1, 1), 119 new Among("\u0438\u0448\u044C", -1, 2), 120 new Among("\u044E", -1, 2), 121 new Among("\u0443\u044E", 44, 2) 122 }; 123 124 private static final Among a_5[] = { 125 new Among("\u0430", -1, 1), 126 new Among("\u0435\u0432", -1, 1), 127 new Among("\u043E\u0432", -1, 1), 128 new Among("\u0435", -1, 1), 129 new Among("\u0438\u0435", 3, 1), 130 new Among("\u044C\u0435", 3, 1), 131 new Among("\u0438", -1, 1), 132 new Among("\u0435\u0438", 6, 1), 133 new Among("\u0438\u0438", 6, 1), 134 new Among("\u0430\u043C\u0438", 6, 1), 135 new Among("\u044F\u043C\u0438", 6, 1), 136 new Among("\u0438\u044F\u043C\u0438", 10, 1), 137 new Among("\u0439", -1, 1), 138 new Among("\u0435\u0439", 12, 1), 139 new Among("\u0438\u0435\u0439", 13, 1), 140 new Among("\u0438\u0439", 12, 1), 141 new Among("\u043E\u0439", 12, 1), 142 new Among("\u0430\u043C", -1, 1), 143 new Among("\u0435\u043C", -1, 1), 144 new Among("\u0438\u0435\u043C", 18, 1), 145 new Among("\u043E\u043C", -1, 1), 146 new Among("\u044F\u043C", -1, 1), 147 new Among("\u0438\u044F\u043C", 21, 1), 148 new Among("\u043E", -1, 1), 149 new Among("\u0443", -1, 1), 150 new Among("\u0430\u0445", -1, 1), 151 new Among("\u044F\u0445", -1, 1), 152 new Among("\u0438\u044F\u0445", 26, 1), 153 new Among("\u044B", -1, 1), 154 new Among("\u044C", -1, 1), 155 new Among("\u044E", -1, 1), 156 new Among("\u0438\u044E", 30, 1), 157 new Among("\u044C\u044E", 30, 1), 158 new Among("\u044F", -1, 1), 159 new Among("\u0438\u044F", 33, 1), 160 new Among("\u044C\u044F", 33, 1) 161 }; 162 163 private static final Among a_6[] = { 164 new Among("\u043E\u0441\u0442", -1, 1), new Among("\u043E\u0441\u0442\u044C", -1, 1) 165 }; 166 167 private static final Among a_7[] = { 168 new Among("\u0435\u0439\u0448\u0435", -1, 1), 169 new Among("\u043D", -1, 2), 170 new Among("\u0435\u0439\u0448", -1, 1), 171 new Among("\u044C", -1, 3) 172 }; 173 174 private static final char g_v[] = {33, 65, 8, 232}; 175 176 private int I_p2; 177 private int I_pV; 178 r_mark_regions()179 private boolean r_mark_regions() { 180 I_pV = limit; 181 I_p2 = limit; 182 int v_1 = cursor; 183 lab0: 184 { 185 golab1: 186 while (true) { 187 lab2: 188 { 189 if (!(in_grouping(g_v, 1072, 1103))) { 190 break lab2; 191 } 192 break golab1; 193 } 194 if (cursor >= limit) { 195 break lab0; 196 } 197 cursor++; 198 } 199 I_pV = cursor; 200 golab3: 201 while (true) { 202 lab4: 203 { 204 if (!(out_grouping(g_v, 1072, 1103))) { 205 break lab4; 206 } 207 break golab3; 208 } 209 if (cursor >= limit) { 210 break lab0; 211 } 212 cursor++; 213 } 214 golab5: 215 while (true) { 216 lab6: 217 { 218 if (!(in_grouping(g_v, 1072, 1103))) { 219 break lab6; 220 } 221 break golab5; 222 } 223 if (cursor >= limit) { 224 break lab0; 225 } 226 cursor++; 227 } 228 golab7: 229 while (true) { 230 lab8: 231 { 232 if (!(out_grouping(g_v, 1072, 1103))) { 233 break lab8; 234 } 235 break golab7; 236 } 237 if (cursor >= limit) { 238 break lab0; 239 } 240 cursor++; 241 } 242 I_p2 = cursor; 243 } 244 cursor = v_1; 245 return true; 246 } 247 r_R2()248 private boolean r_R2() { 249 if (!(I_p2 <= cursor)) { 250 return false; 251 } 252 return true; 253 } 254 r_perfective_gerund()255 private boolean r_perfective_gerund() { 256 int among_var; 257 ket = cursor; 258 among_var = find_among_b(a_0); 259 if (among_var == 0) { 260 return false; 261 } 262 bra = cursor; 263 switch (among_var) { 264 case 1: 265 lab0: 266 { 267 int v_1 = limit - cursor; 268 lab1: 269 { 270 if (!(eq_s_b("\u0430"))) { 271 break lab1; 272 } 273 break lab0; 274 } 275 cursor = limit - v_1; 276 if (!(eq_s_b("\u044F"))) { 277 return false; 278 } 279 } 280 slice_del(); 281 break; 282 case 2: 283 slice_del(); 284 break; 285 } 286 return true; 287 } 288 r_adjective()289 private boolean r_adjective() { 290 ket = cursor; 291 if (find_among_b(a_1) == 0) { 292 return false; 293 } 294 bra = cursor; 295 slice_del(); 296 return true; 297 } 298 r_adjectival()299 private boolean r_adjectival() { 300 int among_var; 301 if (!r_adjective()) { 302 return false; 303 } 304 int v_1 = limit - cursor; 305 lab0: 306 { 307 ket = cursor; 308 among_var = find_among_b(a_2); 309 if (among_var == 0) { 310 cursor = limit - v_1; 311 break lab0; 312 } 313 bra = cursor; 314 switch (among_var) { 315 case 1: 316 lab1: 317 { 318 int v_2 = limit - cursor; 319 lab2: 320 { 321 if (!(eq_s_b("\u0430"))) { 322 break lab2; 323 } 324 break lab1; 325 } 326 cursor = limit - v_2; 327 if (!(eq_s_b("\u044F"))) { 328 cursor = limit - v_1; 329 break lab0; 330 } 331 } 332 slice_del(); 333 break; 334 case 2: 335 slice_del(); 336 break; 337 } 338 } 339 return true; 340 } 341 r_reflexive()342 private boolean r_reflexive() { 343 ket = cursor; 344 if (find_among_b(a_3) == 0) { 345 return false; 346 } 347 bra = cursor; 348 slice_del(); 349 return true; 350 } 351 r_verb()352 private boolean r_verb() { 353 int among_var; 354 ket = cursor; 355 among_var = find_among_b(a_4); 356 if (among_var == 0) { 357 return false; 358 } 359 bra = cursor; 360 switch (among_var) { 361 case 1: 362 lab0: 363 { 364 int v_1 = limit - cursor; 365 lab1: 366 { 367 if (!(eq_s_b("\u0430"))) { 368 break lab1; 369 } 370 break lab0; 371 } 372 cursor = limit - v_1; 373 if (!(eq_s_b("\u044F"))) { 374 return false; 375 } 376 } 377 slice_del(); 378 break; 379 case 2: 380 slice_del(); 381 break; 382 } 383 return true; 384 } 385 r_noun()386 private boolean r_noun() { 387 ket = cursor; 388 if (find_among_b(a_5) == 0) { 389 return false; 390 } 391 bra = cursor; 392 slice_del(); 393 return true; 394 } 395 r_derivational()396 private boolean r_derivational() { 397 ket = cursor; 398 if (find_among_b(a_6) == 0) { 399 return false; 400 } 401 bra = cursor; 402 if (!r_R2()) { 403 return false; 404 } 405 slice_del(); 406 return true; 407 } 408 r_tidy_up()409 private boolean r_tidy_up() { 410 int among_var; 411 ket = cursor; 412 among_var = find_among_b(a_7); 413 if (among_var == 0) { 414 return false; 415 } 416 bra = cursor; 417 switch (among_var) { 418 case 1: 419 slice_del(); 420 ket = cursor; 421 if (!(eq_s_b("\u043D"))) { 422 return false; 423 } 424 bra = cursor; 425 if (!(eq_s_b("\u043D"))) { 426 return false; 427 } 428 slice_del(); 429 break; 430 case 2: 431 if (!(eq_s_b("\u043D"))) { 432 return false; 433 } 434 slice_del(); 435 break; 436 case 3: 437 slice_del(); 438 break; 439 } 440 return true; 441 } 442 443 @Override stem()444 public boolean stem() { 445 int v_1 = cursor; 446 lab0: 447 { 448 while (true) { 449 int v_2 = cursor; 450 lab1: 451 { 452 golab2: 453 while (true) { 454 int v_3 = cursor; 455 lab3: 456 { 457 bra = cursor; 458 if (!(eq_s("\u0451"))) { 459 break lab3; 460 } 461 ket = cursor; 462 cursor = v_3; 463 break golab2; 464 } 465 cursor = v_3; 466 if (cursor >= limit) { 467 break lab1; 468 } 469 cursor++; 470 } 471 slice_from("\u0435"); 472 continue; 473 } 474 cursor = v_2; 475 break; 476 } 477 } 478 cursor = v_1; 479 r_mark_regions(); 480 limit_backward = cursor; 481 cursor = limit; 482 if (cursor < I_pV) { 483 return false; 484 } 485 int v_6 = limit_backward; 486 limit_backward = I_pV; 487 int v_7 = limit - cursor; 488 lab4: 489 { 490 lab5: 491 { 492 int v_8 = limit - cursor; 493 lab6: 494 { 495 if (!r_perfective_gerund()) { 496 break lab6; 497 } 498 break lab5; 499 } 500 cursor = limit - v_8; 501 int v_9 = limit - cursor; 502 lab7: 503 { 504 if (!r_reflexive()) { 505 cursor = limit - v_9; 506 break lab7; 507 } 508 } 509 lab8: 510 { 511 int v_10 = limit - cursor; 512 lab9: 513 { 514 if (!r_adjectival()) { 515 break lab9; 516 } 517 break lab8; 518 } 519 cursor = limit - v_10; 520 lab10: 521 { 522 if (!r_verb()) { 523 break lab10; 524 } 525 break lab8; 526 } 527 cursor = limit - v_10; 528 if (!r_noun()) { 529 break lab4; 530 } 531 } 532 } 533 } 534 cursor = limit - v_7; 535 int v_11 = limit - cursor; 536 lab11: 537 { 538 ket = cursor; 539 if (!(eq_s_b("\u0438"))) { 540 cursor = limit - v_11; 541 break lab11; 542 } 543 bra = cursor; 544 slice_del(); 545 } 546 int v_12 = limit - cursor; 547 r_derivational(); 548 cursor = limit - v_12; 549 int v_13 = limit - cursor; 550 r_tidy_up(); 551 cursor = limit - v_13; 552 limit_backward = v_6; 553 cursor = limit_backward; 554 return true; 555 } 556 557 @Override equals(Object o)558 public boolean equals(Object o) { 559 return o instanceof RussianStemmer; 560 } 561 562 @Override hashCode()563 public int hashCode() { 564 return RussianStemmer.class.getName().hashCode(); 565 } 566 } 567