|
| 1 | +# Words test set |
| 2 | +# https://raw.githubusercontent.com/snowballstem/snowball-data/master/russian/voc.txt |
| 3 | + |
| 4 | +# Граматика української мови |
| 5 | +# https://uk.wikipedia.org/wiki/%D0%93%D1%80%D0%B0%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0_%D1%83%D0%BA%D1%80%D0%B0%D1%97%D0%BD%D1%81%D1%8C%D0%BA%D0%BE%D1%97_%D0%BC%D0%BE%D0%B2%D0%B8 |
| 6 | + |
| 7 | +perfective_gerund = { # DONE |
| 8 | + 'в' => %w[подола|в підня|в], |
| 9 | + 'вши' => %w[написа|вши підня|вши], |
| 10 | + 'вшись' => %w[абсолютизува|вшись підня|вшись], |
| 11 | + |
| 12 | + 'ивши' => %w[дзвон|ивши], |
| 13 | + 'ившись' => %w[дзвон|ившись], |
| 14 | + 'ув' => %w[приб|ув], |
| 15 | + 'увши' => %w[приб|увши], |
| 16 | + 'увшись' => %w[дотикн|увшись] |
| 17 | +} |
| 18 | + |
| 19 | +adjective = { # DONE |
| 20 | + 'іше іє і е ими' => %w[зелен|іше послан|іє ароматн|і зіпсован|е зіпсован|ими], |
| 21 | + 'іший ий ій им' => %w[зелен|іший зелен|ий великодн|ій глибок|им], # noun: ой =>палеоз|ой perfective_gerund: ем => похапц|ем |
| 22 | + 'ого' => %w[ головн|ого ], # noun ім => екстр|ім ом => заїзд|ом |
| 23 | + 'ому их у я а' => %w[веснян|ому зелен|их бронзов|у верхн|я весел|а], # !по-весняному? |
| 24 | + 'ою' => %w[веснян|ою ], |
| 25 | + # noun 'ею' => %w[земл|ею], |
| 26 | +} |
| 27 | + |
| 28 | +adjectival = { |
| 29 | + 'ем' => %w[задава|емые изменя|ем], |
| 30 | + 'нн' => %w[беспреста|нно деревя|нными], |
| 31 | + 'вш' => %w[отказа|вшись отделя|вший], |
| 32 | + 'ющ щ' => %w[сталкива|ющихся спеша|щих |
| 33 | + умоля|ющими блестя|щему], |
| 34 | + |
| 35 | + 'ивш ывш' => %w[брод|ивших несб|ывшееся], |
| 36 | + 'ующ' => %w[несуществ|ующий] |
| 37 | +} |
| 38 | + |
| 39 | +reflexive = { |
| 40 | + 'ся' => %w[осек|ся], |
| 41 | + 'сь' => %w[ввы|сь] |
| 42 | +} |
| 43 | + |
| 44 | +verb = { |
| 45 | + 'ла на ете йте ли й' => %w[сдела|ла воспита|на сдела|ете сдела|йте сдела|ли сдела|й |
| 46 | + приня|ла потеря|на причиня|ете причиня|йте причиня|ли причиня|й], |
| 47 | + |
| 48 | + 'л ем н ло но ет ют' => %w[сдела|л воспита|ем сдела|н сдела|ло сдела|но сдела|ет сдела|ют |
| 49 | + приня|л потеря|ем растеря|н причиня|ло настоя|но объясня|ет объясня|ют], |
| 50 | + |
| 51 | + 'ны ть ешь' => %w[сдела|ны сдела|ть сдела|ешь |
| 52 | + потеря|ны потеря|ть потеря|ешь], |
| 53 | + |
| 54 | + 'нно' => %w[пута|нно постоя|нно], |
| 55 | + |
| 56 | + 'ила ыла ена ейте' => %w[беспоко|ила прикр|ыла выруч|ена пожал|ейте вспл|ыла], # вспл|ыла? |
| 57 | + 'уйте ите или ыли ей' => %w[пожал|уйте позвол|ите полюб|или приб|ыли приникш|ей], |
| 58 | + 'уй ил ыл им ым ен' => %w[протест|уй проход|ил раскр|ыл редк|им решительн|ым свобод|ен], |
| 59 | + 'ило ыло ено ят ует' => %w[став|ило неун|ыло обознач|ено обрат|ят повеств|ует], |
| 60 | + 'уют ит ыт ены ить' => %w[преслед|уют прибеж|ит закр|ыт зауч|ены затуш|ить], |
| 61 | + 'ыть ишь ую ю' => %w[откр|ыть отправ|ишь отперт|ую отрица|ю] |
| 62 | +} |
| 63 | + |
| 64 | +noun = { |
| 65 | + 'а ев ов ие ье е' => %w[вод|а нап|ев вопрос|ов здрав|ие здоров|ье вопрос|е], |
| 66 | + 'иями ями ами еи ии' => %w[волнен|иями вопл|ями вопрос|ами галер|еи гармон|ии], |
| 67 | + 'и ией ей ой ий й' => %w[потер|и гармон|ией галере|ей гер|ой ген|ий сара|й], |
| 68 | + 'иям ям ием ем ам ом' => %w[губерн|иям двер|ям биен|ием братц|ем бумаг|ам букет|ом], |
| 69 | + 'о у ах иях ях ы ь' => %w[брюх|о брюх|у бумаг|ах здан|иях камн|ях казн|ы камен|ь], |
| 70 | + 'ию ью ю ия ья я' => %w[комед|ию кров|ью кровл|ю лечен|ия лист|ья локт|я] |
| 71 | +} |
| 72 | + |
| 73 | +derivational = { |
| 74 | + 'ост' => %w[любезн|остей], |
| 75 | + 'ость' => %w[любезн|остью] |
| 76 | +} |
| 77 | + |
| 78 | +tidy_up = { |
| 79 | + 'н[н]ейш' => %w[наиполезн|ейший смирен|нейший], |
| 80 | + 'н[н]ейше' => %w[многочислен|нейшее сильн|ейшее], |
| 81 | + 'н[н]' => %w[смирен|но смирн|о], |
| 82 | + 'ь' => %w[совест|ь] |
| 83 | +} |
| 84 | + |
| 85 | +exceptions = { |
| 86 | + # ё => е |
| 87 | + 'угнетённый' => 'угнетен', |
| 88 | + |
| 89 | + # -ию => '' |
| 90 | + 'академию' => 'академ' |
| 91 | +} |
| 92 | + |
| 93 | +$all_tests = [] |
| 94 | +$errors = [] |
| 95 | + |
| 96 | +def incorrect_stem_msg(result_stem, word, stem) |
| 97 | + "Incorrect stemming '#{result_stem}' for word '#{word}', should be '#{stem}'" |
| 98 | +end |
| 99 | + |
| 100 | +def check_words_set(words_set) |
| 101 | + words_set.each do |_rule, test_cases| |
| 102 | + test_cases.each do |test_case| |
| 103 | + stem, ending = test_case.split('|') |
| 104 | + word = [stem, ending].join |
| 105 | + $all_tests << word |
| 106 | + result_stem = (`echo "#{word}" | ./stemwords -l ru`).strip |
| 107 | + $errors << incorrect_stem_msg(result_stem, word, stem) if result_stem != stem |
| 108 | + end |
| 109 | + end |
| 110 | +end |
| 111 | + |
| 112 | +[ |
| 113 | + perfective_gerund, |
| 114 | + adjective, |
| 115 | + # adjectival, |
| 116 | + # reflexive, |
| 117 | + # verb, |
| 118 | + # noun, |
| 119 | + # derivational, |
| 120 | + # tidy_up |
| 121 | +].each {|words_set| check_words_set(words_set) } |
| 122 | + |
| 123 | +# exceptions.each do |word, stem| |
| 124 | +# $all_tests << word |
| 125 | +# result_stem = (`echo "#{word}" | ./stemwords -l uk`).strip |
| 126 | +# $errors << incorrect_stem_msg(result_stem, word, stem) if result_stem != stem |
| 127 | +# end |
| 128 | + |
| 129 | +$errors.empty? ? puts("#{$all_tests.count} test(s) passed successfully!") : puts($errors.join("\n")) |
0 commit comments