Advertisement
Guest User

Untitled

a guest
Sep 21st, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.92 KB | None | 0 0
  1. object Porter {
  2.  
  3. private val PERFECTIVEGROUND = Pattern.compile("((ив|ивши|ившись|ыв|ывши|ывшись)|((<=[ая])(в|вши|вшись)))$")
  4.  
  5. private val REFLEXIVE = Pattern.compile("(с[яь])$")
  6.  
  7. private val ADJECTIVE = Pattern.compile("(ее|ие|ые|ое|ими|ыми|ей|ий|ый|ой|ем|им|ым|ом|его|ого|ему|ому|их|ых|ую|юю|ая|яя|ою|ею)$")
  8.  
  9. private val PARTICIPLE = Pattern.compile("((ивш|ывш|ующ)|((?<=[ая])(ем|нн|вш|ющ|щ)))$")
  10.  
  11. private val VERB = Pattern.compile("((ила|ыла|ена|ейте|уйте|ите|или|ыли|ей|уй|ил|ыл|им|ым|ен|ило|ыло|ено|ят|ует|уют|ит|ыт|ены|ить|ыть|ишь|ую|ю)|((?<=[ая])(ла|на|ете|йте|ли|й|л|ем|н|ло|но|ет|ют|ны|ть|ешь|нно)))$")
  12.  
  13. private val NOUN = Pattern.compile("(а|ев|ов|ие|ье|е|иями|ями|ами|еи|ии|и|ией|ей|ой|ий|й|иям|ям|ием|ем|ам|ом|о|у|ах|иях|ях|ы|ь|ию|ью|ю|ия|ья|я)$")
  14.  
  15. private val RVRE = Pattern.compile("^(.*?[аеиоуыэюя])(.*)$")
  16.  
  17. private val DERIVATIONAL = Pattern.compile(".*[^аеиоуыэюя]+[аеиоуыэюя].*ость?$")
  18.  
  19. private val DER = Pattern.compile("ость?$")
  20.  
  21. private val SUPERLATIVE = Pattern.compile("(ейше|ейш)$")
  22.  
  23. private val I = Pattern.compile("и$")
  24. private val P = Pattern.compile("ь$")
  25. private val NN = Pattern.compile("нн$")
  26.  
  27. fun stem(words: String): String {
  28. var word = words
  29. word = word.toLowerCase()
  30. word = word.replace('ё', 'е')
  31. val m = RVRE.matcher(word)
  32.  
  33. if (m.matches()) {
  34. val pre = m.group(1)
  35. var rv = m.group(2)
  36. var temp = PERFECTIVEGROUND.matcher(rv).replaceFirst("")
  37. if (temp == rv) {
  38. rv = REFLEXIVE.matcher(rv).replaceFirst("")
  39. temp = ADJECTIVE.matcher(rv).replaceFirst("")
  40. if (temp != rv) {
  41. rv = temp
  42. rv = PARTICIPLE.matcher(rv).replaceFirst("")
  43. } else {
  44. temp = VERB.matcher(rv).replaceFirst("")
  45. if (temp == rv) {
  46. rv = NOUN.matcher(rv).replaceFirst("")
  47. } else {
  48. rv = temp
  49. }
  50. }
  51. } else {
  52. rv = temp
  53. }
  54.  
  55. rv = I.matcher(rv).replaceFirst("")
  56.  
  57. if (DERIVATIONAL.matcher(rv).matches()) {
  58. rv = DER.matcher(rv).replaceFirst("")
  59. }
  60.  
  61. temp = P.matcher(rv).replaceFirst("")
  62. if (temp == rv) {
  63. rv = SUPERLATIVE.matcher(rv).replaceFirst("")
  64. rv = NN.matcher(rv).replaceFirst("н")
  65. } else {
  66. rv = temp
  67. }
  68. word = pre + rv
  69. }
  70.  
  71. return word
  72. }
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement