├── Rakefile ├── .travis.yml ├── LICENSE ├── README.md ├── gender.json ├── gender.yml ├── rules.yml └── rules.json /Rakefile: -------------------------------------------------------------------------------- 1 | require 'psych' 2 | require 'json' 3 | 4 | desc 'Generate rules.json from rules.yml' 5 | task :json do 6 | File.open('rules.json', 'w') do |f| 7 | f.puts JSON.pretty_generate(Psych.load(File.read('rules.yml'))) 8 | end 9 | File.open('gender.json', 'w') do |f| 10 | f.puts JSON.pretty_generate(Psych.load(File.read('gender.yml'))) 11 | end 12 | end 13 | 14 | task :default => :json 15 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | branches: 3 | only: 4 | - v1 5 | language: ruby 6 | install: 7 | - cd $TRAVIS_BUILD_DIR/.. && curl -L https://api.github.com/repos/petrovich/petrovich-ruby/tarball | tar zx 8 | - ln -sf $TRAVIS_BUILD_DIR/../petrovich-petrovich-ruby-* $TRAVIS_BUILD_DIR/../petrovich-ruby 9 | - cd $TRAVIS_BUILD_DIR/.. && curl -L https://api.github.com/repos/petrovich/petrovich-eval/tarball | tar zx 10 | - ln -sf $TRAVIS_BUILD_DIR/../petrovich-petrovich-eval-* $TRAVIS_BUILD_DIR/../petrovich-eval 11 | before_script: 12 | - rm -rf $TRAVIS_BUILD_DIR/../petrovich-ruby/rules 13 | - rm -rf $TRAVIS_BUILD_DIR/../petrovich-ruby/eval 14 | - ln -sf $TRAVIS_BUILD_DIR $TRAVIS_BUILD_DIR/../petrovich-ruby/rules 15 | - ln -sf $TRAVIS_BUILD_DIR/../petrovich-eval $TRAVIS_BUILD_DIR/../petrovich-ruby/eval 16 | - cd $TRAVIS_BUILD_DIR/../petrovich-ruby && bundle --without development 17 | script: 18 | - cd $TRAVIS_BUILD_DIR/../petrovich-ruby && rake evaluate 19 | after_script: 20 | - cat $TRAVIS_BUILD_DIR/../petrovich-ruby/errors.tsv 21 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013 Petrovich Developers 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Набор правил для склонения русских имён, фамилий и отчеств по падежам. 2 | ======================================================================= 3 | 4 | [![Build Status](https://travis-ci.org/petrovich/petrovich-rules.svg?branch=v1)](https://travis-ci.org/petrovich/petrovich-rules) 5 | 6 | Файл содержит 3 группы правил. Это __lastname__, __firstname__ и __middlename__. Каждая группа 7 | содержит подгруппы с правилами: 8 | 9 | * Подгруппа __exceptions__ (её может не быть) 10 | * Подгруппа __suffixes__ 11 | 12 | Правила 13 | ------- 14 | В свою очередь, каждая подгруппа содержит набор правил. Каждое правило содержит 3 составляющие: 15 | 16 | * Пол (gender). Допустимые значения: __male__, __female__, __androgynous__ 17 | * Что заменять - __test__. Массив суффиксов для замены. 18 | * На что заменять - __mods__. Массив модификаторов. Модификатор может иметь впереди один или 19 | дефис, он означает количество символов, которые нужно будет вырезать из слова. 20 | 21 | Правила отделяются друг от друга переносом строки для лучшего восприятия. 22 | 23 | Из чего состоят суффиксы 24 | ------------------------ 25 | 26 | Из чего состоят модификаторы 27 | ----------------------------- 28 | родительный, дательный, винительный, творительный, предложный 29 | 30 | Как добавить новое правило 31 | -------------------------- 32 | -------------------------------------------------------------------------------- /gender.json: -------------------------------------------------------------------------------- 1 | { 2 | "gender": { 3 | "lastname": { 4 | "female": [ 5 | "ова", 6 | "ая", 7 | "ына", 8 | "ина", 9 | "ева", 10 | "ска", 11 | "ёва" 12 | ], 13 | "male": [ 14 | "кий", 15 | "ов", 16 | "ын", 17 | "ев", 18 | "ин", 19 | "ёв", 20 | "хий", 21 | "ний", 22 | "ый", 23 | "ой" 24 | ] 25 | }, 26 | "firstname": { 27 | "androgynous": [ 28 | "ким", 29 | "никита", 30 | "саша", 31 | "женя" 32 | ], 33 | "male": [ 34 | "кузьма", 35 | "лука", 36 | "савва", 37 | "фома", 38 | "ей", 39 | "ий", 40 | "ый", 41 | "ой", 42 | "др", 43 | "тр", 44 | "ел", 45 | "ан", 46 | "им", 47 | "д", 48 | "ис", 49 | "рт", 50 | "кт", 51 | "ар", 52 | "ен", 53 | "ав", 54 | "он", 55 | "ил", 56 | "ир", 57 | "их", 58 | "ри", 59 | "аф", 60 | "ор", 61 | "рь", 62 | "жи", 63 | "ат", 64 | "иф", 65 | "ья", 66 | "нт", 67 | "к", 68 | "ст", 69 | "ян" 70 | ], 71 | "female": [ 72 | "фанни", 73 | "фаня", 74 | "жаден", 75 | "жейден", 76 | "ия", 77 | "а", 78 | "ся", 79 | "ина", 80 | "та", 81 | "сья", 82 | "ля", 83 | "оя", 84 | "да", 85 | "йя", 86 | "ея", 87 | "вья", 88 | "нья", 89 | "ая", 90 | "ель", 91 | "ико", 92 | "фья", 93 | "рья", 94 | "лья", 95 | "биргит", 96 | "илзе", 97 | "овь", 98 | "елли", 99 | "ои", 100 | "гюль", 101 | "ес", 102 | "есс", 103 | "есси", 104 | "естин", 105 | "естини", 106 | "истин", 107 | "ети", 108 | "нет", 109 | "сти", 110 | "сми", 111 | "лин", 112 | "линн", 113 | "ейн", 114 | "нифер", 115 | "женни", 116 | "еннис", 117 | "енн", 118 | "инн", 119 | "ерин", 120 | "ляра", 121 | "лярам" 122 | ] 123 | }, 124 | "middlename": { 125 | "female": [ 126 | "на", 127 | "кызы", 128 | "гызы" 129 | ], 130 | "male": [ 131 | "ич", 132 | "оглы", 133 | "улы", 134 | "уулу" 135 | ] 136 | } 137 | } 138 | } 139 | -------------------------------------------------------------------------------- /gender.yml: -------------------------------------------------------------------------------- 1 | # Эвристики для определения пола 2 | gender: 3 | lastname: 4 | # Здесь андрогинные фамилии не выделены в отдельную группу. Если в группе female и male 5 | # не будет найдено совпадений, то фамилия будет считаться андрогинной. 6 | androgynous: 7 | # exceptions 8 | - ^бова 9 | - ^регин 10 | - ^дарвин 11 | - ^пэйлин 12 | - ^грин 13 | - ^цин 14 | - ^шенгелая 15 | female: 16 | - ова 17 | - ая 18 | - ына 19 | - ина 20 | - ева 21 | - ска 22 | - ёва 23 | male: 24 | - кий 25 | - ов 26 | - ын 27 | - ев 28 | - ин 29 | - ёв 30 | - хий 31 | - ний 32 | - ый 33 | - ой 34 | firstname: 35 | # Исключения - андрогинные имена 36 | # сортировка по окончанию 37 | androgynous: 38 | - ^сева 39 | - улла 40 | - саша 41 | - алвард 42 | - валери 43 | - кири 44 | - анри 45 | - ким 46 | - райхон 47 | - закия 48 | - захария 49 | - женя 50 | male: 51 | - аба 52 | - ^абиба 53 | - савва 54 | - ^лёва 55 | - ^ага 56 | - ^ахмедага 57 | - ^алиага 58 | - ^амирага 59 | - ^агга 60 | - ^серега 61 | - ^фейга 62 | - ^гога 63 | - ^алиада 64 | - ^муктада 65 | - ^абида 66 | - ^алда 67 | - ^маджуда 68 | - ^нурлыхуда 69 | - ^гиа 70 | - ^элиа 71 | - ^гарсиа 72 | - лука 73 | - вавила 74 | - гавриила 75 | - ермила 76 | - данила 77 | - гаврила 78 | - абдалла 79 | - аталла 80 | - абдилла 81 | - атилла 82 | - кайролла 83 | - абулла 84 | - абула 85 | - фома 86 | - кузьма 87 | - ^свитлана 88 | - ^агелина 89 | - ^джанна 90 | - жора 91 | - ^иса 92 | - ^аиса 93 | - ^халиса 94 | - ^холиса 95 | - ^ата 96 | - ^паата 97 | - ^алета 98 | - ^никита 99 | - ^мота 100 | - ^шота 101 | - ^фаста 102 | - ^коста 103 | - ^маритта 104 | - ^малюта 105 | - ^васюта 106 | - миша 107 | - леб 108 | - ав 109 | - ^лев 110 | - яков 111 | - лег 112 | - д 113 | - аз 114 | - ез 115 | - из 116 | - ализ 117 | - уз 118 | - яз 119 | - жи 120 | - ^шелли 121 | - ри 122 | - бай 123 | - лай 124 | - ей 125 | - ий 126 | - ой 127 | - ый 128 | - к 129 | - ал 130 | - ел 131 | - ил 132 | - кл 133 | - илл 134 | - улл 135 | - ол 136 | - аам 137 | - гам 138 | - дам 139 | - зам 140 | - алам 141 | - слам 142 | - там 143 | - ем 144 | - ём 145 | - им 146 | - ан 147 | - емен 148 | - емён 149 | - рсен 150 | - ддин 151 | - тдин 152 | - константин 153 | - сейн 154 | - он 155 | - ян 156 | - ипп 157 | - ар 158 | - др 159 | - ир 160 | - ор 161 | - тр 162 | - тимур 163 | - тур 164 | - ис 165 | - йс 166 | - ат 167 | - кт 168 | - нт 169 | - рт 170 | - ст 171 | - аф 172 | - иф 173 | - их 174 | - уш 175 | - ^рамиль 176 | - ^эмиль 177 | - марсель 178 | - даниэль 179 | - ^бактыгуль 180 | - ^игорь 181 | - ^арминэ 182 | - ^гия 183 | - ^мазия 184 | - ^кирикия 185 | - ^ркия 186 | - ^еркия 187 | - ^эркия 188 | - ^гулия 189 | - ^аксания 190 | - закария 191 | - ^зекерия 192 | - ^гарсия 193 | - ^шендля 194 | - емеля 195 | - филя 196 | - ^вилля 197 | - коля 198 | - толя 199 | - вася 200 | - ^цайся 201 | - ^ося 202 | - ья 203 | - ^алья 204 | - ^илья 205 | - ^ларья 206 | female: 207 | - ^судаба 208 | - ^сураба 209 | - иба 210 | - люба 211 | - лава 212 | - ева 213 | - га 214 | - да 215 | - иза 216 | - иа 217 | - ика 218 | - ска 219 | - ^джанлука 220 | - ела 221 | - ила 222 | - лла 223 | - ана 224 | - лена 225 | - ёна 226 | - ина 227 | - нна 228 | - яна 229 | - варвара 230 | - мара 231 | - ндра 232 | - вера 233 | - ира 234 | - ляра 235 | - иса 236 | - та 237 | - наташа 238 | - ^шакед 239 | - ^аннаид 240 | - ^ингрид 241 | - илзе 242 | - ^нурангиз 243 | - лиз 244 | - ^юлдуз 245 | - ^диляфруз 246 | - ^сажи 247 | - елли 248 | - сми 249 | - естини 250 | - фанни 251 | - женни 252 | - ои 253 | - ^элдари 254 | - ^эльдари 255 | - ^хилари 256 | - ^хиллари 257 | - ^аннемари 258 | - ^розмари 259 | - ^товсари 260 | - ^ансари 261 | - ^одри 262 | - мери 263 | - ^тери 264 | - ^ири 265 | - ^катри 266 | - мэри 267 | - есси 268 | - ети 269 | - сти 270 | - ^сатаней 271 | - ^ефтений 272 | - ^верунчик 273 | - ^гюзел 274 | - ^этел 275 | - рэйчел 276 | - джил 277 | - мерил 278 | - лярам 279 | - ^асем 280 | - ^мерьем 281 | - ^мирьем 282 | - ^эркаим 283 | - ^гулаим 284 | - ^айгерим 285 | - ^эван 286 | - ^гульжиган 287 | - ^айдан 288 | - ^айжан 289 | - вивиан 290 | - гульжиан 291 | - лилиан 292 | - мариан 293 | - ^саиман 294 | - джоан 295 | - чулпан 296 | - ^лоран 297 | - ^моран 298 | - ^джохан 299 | - ^гульшан 300 | - жаден 301 | - жейден 302 | - ерин 303 | - естин 304 | - истин 305 | - ейн 306 | - енн 307 | - инн 308 | - линн 309 | - ^элисон 310 | - ^гульжиян 311 | - ^марьян 312 | - санабар 313 | - дильбар 314 | - гулизар 315 | - гульзар 316 | - пилар 317 | - дагмар 318 | - элинар 319 | - нилуфар 320 | - анхар 321 | - гаухар 322 | - нифер 323 | - ^линор 324 | - ^элинор 325 | - элеонор 326 | - ^анаис 327 | - ^таис 328 | - эллис 329 | - элис 330 | - ^кларис 331 | - ^амнерис 332 | - ^айрис 333 | - ^дорис 334 | - ^беатрис 335 | - грейс 336 | - грэйс 337 | - есс 338 | - саодат 339 | - зулхижат 340 | - хамат 341 | - патимат 342 | - хатимат 343 | - альжанат 344 | - маймунат 345 | - гульшат 346 | - биргит 347 | - ^ануш 348 | - ^азгануш 349 | - гаруш 350 | - овь 351 | - николь 352 | - гуль 353 | - нуэль 354 | - гюль 355 | - нэ 356 | - ая 357 | - ея 358 | - ия 359 | - йя 360 | - ля 361 | - ^афиля 362 | - ^тафиля 363 | - ^аня 364 | - фаня 365 | - оя 366 | - ся 367 | - вья 368 | - адья 369 | - лья 370 | - мья 371 | - нья 372 | - пья 373 | - рья 374 | - сья 375 | - тья 376 | - фья 377 | middlename: 378 | female: 379 | - на 380 | - кызы 381 | - гызы 382 | male: 383 | - ич 384 | - оглы 385 | - улы 386 | - уулу 387 | -------------------------------------------------------------------------------- /rules.yml: -------------------------------------------------------------------------------- 1 | # Порядок имеет значение! 2 | # http://to-name.ru/surname/familnye-okonchania.htm 3 | # http://gramma.ru/SPR/?id=2.1 4 | lastname: 5 | exceptions: 6 | # Неизменяемые первые части двойных русских фамилий. 7 | - gender: androgynous 8 | test: 9 | - бонч 10 | - абдул 11 | - белиц 12 | - гасан 13 | - дюссар 14 | - дюмон 15 | - книппер 16 | - корвин 17 | - ван 18 | - шолом 19 | - тер 20 | - призван 21 | - мелик 22 | - вар 23 | - фон 24 | mods: [., ., ., ., .] 25 | tags: [first_word] 26 | 27 | - gender: androgynous 28 | test: [дюма, тома, дега, люка, ферма, гамарра, петипа, шандра, скаля, каруана] 29 | mods: [., ., ., ., .] 30 | 31 | - gender: androgynous 32 | test: [гусь, ремень, камень, онук, богода, нечипас, долгопалец, маненок, рева, кива] 33 | mods: [., ., ., ., .] 34 | 35 | - gender: androgynous 36 | test: [вий, сой, цой, хой] 37 | mods: [-я, -ю, -я, -ем, -е] 38 | 39 | suffixes: 40 | - gender: female 41 | test: [б, в, г, д, ж, з, й, к, л, м, н, п, р, с, т, ф, х, ц, ч, ш, щ, ъ, ь] 42 | mods: [., ., ., ., .] 43 | 44 | - gender: androgynous 45 | test: [орота] 46 | mods: [., ., ., ., .] 47 | 48 | # Брыльска, * 49 | - gender: female 50 | test: [ска, цка] 51 | mods: [-ой, -ой, -ую, -ой, -ой] 52 | 53 | # Дубовицкая, Суперанская, Лесная, Барановская 54 | - gender: female 55 | test: [цкая, ская, ная, ая] 56 | mods: [--ой, --ой, --ую, --ой, --ой] 57 | 58 | # Зимняя 59 | - gender: female 60 | test: [яя] 61 | mods: [--ей, --ей, --юю, --ей, --ей] 62 | 63 | # *, Иллуй 64 | - gender: male 65 | test: [иной, уй] 66 | mods: [-я, -ю, -я, -ем, -е] 67 | 68 | # Ярица 69 | - gender: androgynous 70 | test: [ца] 71 | mods: [-ы, -е, -у, -ей, -е] 72 | 73 | # Эрих 74 | - gender: male 75 | test: [рих] 76 | mods: [а, у, а, ом, е] 77 | 78 | # Кантария 79 | - gender: androgynous 80 | test: [ия] 81 | mods: [-и, -и, -ю, -ей, -и] 82 | 83 | # Гулиа, *, *, Джабуа, *, *, *, * 84 | - gender: androgynous 85 | test: [иа, аа, оа, уа, ыа, еа, юа, эа] 86 | mods: [., ., ., ., .] 87 | 88 | # Осипенко, *, Мегрэ, *, *, Хереску, * 89 | - gender: androgynous 90 | test: [о, е, э, и, ы, у, ю] 91 | mods: [., ., ., ., .] 92 | 93 | # Широких, Больных 94 | - gender: male 95 | test: [их, ых] 96 | mods: [., ., ., ., .] 97 | 98 | # Кузнецова, Голубева, Скурихина 99 | - gender: female 100 | test: [ова, ева, на, ёва] 101 | mods: [-ой, -ой, -у, -ой, -ой] 102 | 103 | # Басалыга, Лазука, Пидкуймуха, Бобча, Гуща, Рогожа, Кваша 104 | - gender: androgynous 105 | test: [га, ка, ха, ча, ща, жа, ша] 106 | mods: [-и, -е, -у, -ой, -е] 107 | 108 | # Глоба, Хакамада, Хамза, Бульба 109 | - gender: androgynous 110 | test: [а] 111 | mods: [-ы, -е, -у, -ой, -е] 112 | 113 | # Белоконь 114 | - gender: male 115 | test: [ь] 116 | mods: [-я, -ю, -я, -ем, -е] 117 | 118 | # Фидря 119 | - gender: androgynous 120 | test: [я] 121 | mods: [-и, -е, -ю, -ей, -е] 122 | 123 | # Воробей 124 | - gender: male 125 | test: [обей] 126 | mods: [--ья, --ью, --ья, --ьем, --ье] 127 | 128 | # Кочубей 129 | - gender: male 130 | test: [ей] 131 | mods: [-я, -ю, -я, -ем, -е] 132 | 133 | # Хачикян, Богдан, * 134 | - gender: male 135 | test: [ян, ан, йн] 136 | mods: [а, у, а, ом, е] 137 | 138 | # *, Быховец 139 | # TODO: Проверить Брагинец 140 | - gender: male 141 | test: [ынец, овец] 142 | mods: [--ца, --цу, --ца, --цом, --це] 143 | 144 | # Волынец, Горобец 145 | - gender: male 146 | test: [нец, обец] 147 | mods: [--ца, --цу, --ца, --цем, --це] 148 | 149 | # Порывай 150 | - gender: male 151 | test: [ай] 152 | mods: [-я, -ю, -я, -ем, -е] 153 | 154 | # Дорогой, Руцкой 155 | - gender: male 156 | test: [гой, кой] 157 | mods: [-го, -му, -го, --им, -м] 158 | 159 | # Беpеговой 160 | - gender: male 161 | test: [ой] 162 | mods: [-го, -му, -го, --ым, -м] 163 | 164 | # *, *, -шток 165 | - gender: male 166 | test: [ах, ив, шток] 167 | mods: [а, у, а, ом, е] 168 | 169 | # *, *, *, * 170 | - gender: male 171 | test: [ший, щий, жий, ний] 172 | mods: [--его, --ему, --его, -м, --ем] 173 | 174 | # Безверхий 175 | - gender: male 176 | test: [ый, кий, хий] 177 | mods: [--ого, --ому, --ого, -м, --ом] 178 | 179 | # Хорунжий 180 | - gender: male 181 | test: [ий] 182 | mods: [-я, -ю, -я, -ем, -и] 183 | 184 | # Починок 185 | - gender: male 186 | test: [ок] 187 | mods: [--ка, --ку, --ка, --ком, --ке] 188 | 189 | # Кравец 190 | - gender: male 191 | test: [ец] 192 | mods: [--ца, --цу, --ца, --цом, --це] 193 | 194 | # Лившиц, Концевич, Гармаш, Хрущ 195 | - gender: male 196 | test: [ц, ч, ш, щ] 197 | mods: [а, у, а, ем, е] 198 | 199 | # Любен, Манн, Гордон, Прядун 200 | - gender: male 201 | test: [ен, нн, он, ун, б, г, д, ж, з, к, л, м, п, р, с, т, ф, х] 202 | mods: [а, у, а, ом, е] 203 | 204 | # Петров, Левин 205 | - gender: male 206 | test: [в, н] 207 | mods: [а, у, а, ым, е] 208 | 209 | 210 | firstname: 211 | exceptions: 212 | - gender: male 213 | test: [лев] 214 | mods: [--ьва, --ьву, --ьва, --ьвом, --ьве] 215 | 216 | - gender: male 217 | test: [пётр] 218 | mods: [---етра, ---етру, ---етра, ---етром, ---етре] 219 | 220 | - gender: male 221 | test: [павел] 222 | mods: [--ла, --лу, --ла, --лом, --ле] 223 | 224 | - gender: male 225 | test: [яша] 226 | mods: [-и, -е, -у, -ей, -е] 227 | 228 | - gender: male 229 | test: [шота] 230 | mods: [., ., ., ., .] 231 | 232 | - gender: female 233 | test: [рашель, нинель, николь, габриэль, даниэль] 234 | mods: [., ., ., ., .] 235 | 236 | suffixes: 237 | - gender: androgynous 238 | test: [е, ё, и, о, у, ы, э, ю] 239 | mods: [., ., ., ., .] 240 | 241 | - gender: female 242 | test: [б, в, г, д, ж, з, й, к, л, м, н, п, р, с, т, ф, х, ц, ч, ш, щ, ъ] 243 | mods: [., ., ., ., .] 244 | 245 | - gender: female 246 | test: [ь] 247 | mods: [-и, -и, ., ю, -и] 248 | 249 | # Олесь 250 | - gender: male 251 | test: [ь] 252 | mods: [-я, -ю, -я, -ем, -е] 253 | 254 | - gender: androgynous 255 | test: [га, ка, ха, ча, ща, жа] 256 | mods: [-и, -е, -у, -ой, -е] 257 | 258 | # Даша, Саша 259 | - gender: female 260 | test: [ша] 261 | mods: [-и, -е, -у, -ей, -е] 262 | 263 | - gender: androgynous 264 | test: [а] 265 | mods: [-ы, -е, -у, -ой, -е] 266 | 267 | # Зульфия 268 | - gender: female 269 | test: [ия] 270 | mods: [-и, -и, -ю, -ей, -и] 271 | 272 | # Светлана 273 | - gender: female 274 | test: [а] 275 | mods: [-ы, -е, -у, -ой, -е] 276 | 277 | # Юлия 278 | - gender: female 279 | test: [я] 280 | mods: [-и, -е, -ю, -ей, -е] 281 | 282 | - gender: male 283 | test: [ия] 284 | mods: [-и, -и, -ю, -ей, -и] 285 | 286 | - gender: male 287 | test: [я] 288 | mods: [-и, -е, -ю, -ей, -е] 289 | 290 | # Андрей, * 291 | - gender: male 292 | test: [ей, й] 293 | mods: [-я, -ю, -я, -ем, -е] 294 | 295 | # Афанасий 296 | - gender: male 297 | test: [ий] 298 | mods: [-я, -ю, -я, -ем, -и] 299 | 300 | - gender: male 301 | test: [б, в, г, д, ж, з, к, л, м, н, п, р, с, т, ф, х, ц, ч] 302 | mods: [а, у, а, ом, е] 303 | 304 | - gender: androgynous 305 | test: [ния, рия, вия] 306 | mods: [-и, -и, -ю, -ем, -ем] 307 | 308 | middlename: 309 | exceptions: 310 | - gender: androgynous 311 | test: 312 | - борух 313 | mods: [., ., ., ., .] 314 | tags: [first_word] 315 | 316 | suffixes: 317 | - gender: male 318 | test: [ич] 319 | mods: [а, у, а, ем, е] 320 | 321 | - gender: female 322 | test: [на] 323 | mods: [-ы, -е, -у, -ой, -е] 324 | -------------------------------------------------------------------------------- /rules.json: -------------------------------------------------------------------------------- 1 | { 2 | "lastname": { 3 | "exceptions": [ 4 | { 5 | "gender": "androgynous", 6 | "test": [ 7 | "бонч", 8 | "абдул", 9 | "белиц", 10 | "гасан", 11 | "дюссар", 12 | "дюмон", 13 | "книппер", 14 | "корвин", 15 | "ван", 16 | "шолом", 17 | "тер", 18 | "призван", 19 | "мелик", 20 | "вар", 21 | "фон" 22 | ], 23 | "mods": [ 24 | ".", 25 | ".", 26 | ".", 27 | ".", 28 | "." 29 | ], 30 | "tags": [ 31 | "first_word" 32 | ] 33 | }, 34 | { 35 | "gender": "androgynous", 36 | "test": [ 37 | "дюма", 38 | "тома", 39 | "дега", 40 | "люка", 41 | "ферма", 42 | "гамарра", 43 | "петипа", 44 | "шандра", 45 | "скаля", 46 | "каруана" 47 | ], 48 | "mods": [ 49 | ".", 50 | ".", 51 | ".", 52 | ".", 53 | "." 54 | ] 55 | }, 56 | { 57 | "gender": "androgynous", 58 | "test": [ 59 | "гусь", 60 | "ремень", 61 | "камень", 62 | "онук", 63 | "богода", 64 | "нечипас", 65 | "долгопалец", 66 | "маненок", 67 | "рева", 68 | "кива" 69 | ], 70 | "mods": [ 71 | ".", 72 | ".", 73 | ".", 74 | ".", 75 | "." 76 | ] 77 | }, 78 | { 79 | "gender": "androgynous", 80 | "test": [ 81 | "вий", 82 | "сой", 83 | "цой", 84 | "хой" 85 | ], 86 | "mods": [ 87 | "-я", 88 | "-ю", 89 | "-я", 90 | "-ем", 91 | "-е" 92 | ] 93 | } 94 | ], 95 | "suffixes": [ 96 | { 97 | "gender": "female", 98 | "test": [ 99 | "б", 100 | "в", 101 | "г", 102 | "д", 103 | "ж", 104 | "з", 105 | "й", 106 | "к", 107 | "л", 108 | "м", 109 | "н", 110 | "п", 111 | "р", 112 | "с", 113 | "т", 114 | "ф", 115 | "х", 116 | "ц", 117 | "ч", 118 | "ш", 119 | "щ", 120 | "ъ", 121 | "ь" 122 | ], 123 | "mods": [ 124 | ".", 125 | ".", 126 | ".", 127 | ".", 128 | "." 129 | ] 130 | }, 131 | { 132 | "gender": "androgynous", 133 | "test": [ 134 | "орота" 135 | ], 136 | "mods": [ 137 | ".", 138 | ".", 139 | ".", 140 | ".", 141 | "." 142 | ] 143 | }, 144 | { 145 | "gender": "female", 146 | "test": [ 147 | "ска", 148 | "цка" 149 | ], 150 | "mods": [ 151 | "-ой", 152 | "-ой", 153 | "-ую", 154 | "-ой", 155 | "-ой" 156 | ] 157 | }, 158 | { 159 | "gender": "female", 160 | "test": [ 161 | "цкая", 162 | "ская", 163 | "ная", 164 | "ая" 165 | ], 166 | "mods": [ 167 | "--ой", 168 | "--ой", 169 | "--ую", 170 | "--ой", 171 | "--ой" 172 | ] 173 | }, 174 | { 175 | "gender": "female", 176 | "test": [ 177 | "яя" 178 | ], 179 | "mods": [ 180 | "--ей", 181 | "--ей", 182 | "--юю", 183 | "--ей", 184 | "--ей" 185 | ] 186 | }, 187 | { 188 | "gender": "male", 189 | "test": [ 190 | "иной", 191 | "уй" 192 | ], 193 | "mods": [ 194 | "-я", 195 | "-ю", 196 | "-я", 197 | "-ем", 198 | "-е" 199 | ] 200 | }, 201 | { 202 | "gender": "androgynous", 203 | "test": [ 204 | "ца" 205 | ], 206 | "mods": [ 207 | "-ы", 208 | "-е", 209 | "-у", 210 | "-ей", 211 | "-е" 212 | ] 213 | }, 214 | { 215 | "gender": "male", 216 | "test": [ 217 | "рих" 218 | ], 219 | "mods": [ 220 | "а", 221 | "у", 222 | "а", 223 | "ом", 224 | "е" 225 | ] 226 | }, 227 | { 228 | "gender": "androgynous", 229 | "test": [ 230 | "ия" 231 | ], 232 | "mods": [ 233 | "-и", 234 | "-и", 235 | "-ю", 236 | "-ей", 237 | "-и" 238 | ] 239 | }, 240 | { 241 | "gender": "androgynous", 242 | "test": [ 243 | "иа", 244 | "аа", 245 | "оа", 246 | "уа", 247 | "ыа", 248 | "еа", 249 | "юа", 250 | "эа" 251 | ], 252 | "mods": [ 253 | ".", 254 | ".", 255 | ".", 256 | ".", 257 | "." 258 | ] 259 | }, 260 | { 261 | "gender": "androgynous", 262 | "test": [ 263 | "о", 264 | "е", 265 | "э", 266 | "и", 267 | "ы", 268 | "у", 269 | "ю" 270 | ], 271 | "mods": [ 272 | ".", 273 | ".", 274 | ".", 275 | ".", 276 | "." 277 | ] 278 | }, 279 | { 280 | "gender": "male", 281 | "test": [ 282 | "их", 283 | "ых" 284 | ], 285 | "mods": [ 286 | ".", 287 | ".", 288 | ".", 289 | ".", 290 | "." 291 | ] 292 | }, 293 | { 294 | "gender": "female", 295 | "test": [ 296 | "ова", 297 | "ева", 298 | "на", 299 | "ёва" 300 | ], 301 | "mods": [ 302 | "-ой", 303 | "-ой", 304 | "-у", 305 | "-ой", 306 | "-ой" 307 | ] 308 | }, 309 | { 310 | "gender": "androgynous", 311 | "test": [ 312 | "га", 313 | "ка", 314 | "ха", 315 | "ча", 316 | "ща", 317 | "жа", 318 | "ша" 319 | ], 320 | "mods": [ 321 | "-и", 322 | "-е", 323 | "-у", 324 | "-ой", 325 | "-е" 326 | ] 327 | }, 328 | { 329 | "gender": "androgynous", 330 | "test": [ 331 | "а" 332 | ], 333 | "mods": [ 334 | "-ы", 335 | "-е", 336 | "-у", 337 | "-ой", 338 | "-е" 339 | ] 340 | }, 341 | { 342 | "gender": "male", 343 | "test": [ 344 | "ь" 345 | ], 346 | "mods": [ 347 | "-я", 348 | "-ю", 349 | "-я", 350 | "-ем", 351 | "-е" 352 | ] 353 | }, 354 | { 355 | "gender": "androgynous", 356 | "test": [ 357 | "я" 358 | ], 359 | "mods": [ 360 | "-и", 361 | "-е", 362 | "-ю", 363 | "-ей", 364 | "-е" 365 | ] 366 | }, 367 | { 368 | "gender": "male", 369 | "test": [ 370 | "обей" 371 | ], 372 | "mods": [ 373 | "--ья", 374 | "--ью", 375 | "--ья", 376 | "--ьем", 377 | "--ье" 378 | ] 379 | }, 380 | { 381 | "gender": "male", 382 | "test": [ 383 | "ей" 384 | ], 385 | "mods": [ 386 | "-я", 387 | "-ю", 388 | "-я", 389 | "-ем", 390 | "-е" 391 | ] 392 | }, 393 | { 394 | "gender": "male", 395 | "test": [ 396 | "ян", 397 | "ан", 398 | "йн" 399 | ], 400 | "mods": [ 401 | "а", 402 | "у", 403 | "а", 404 | "ом", 405 | "е" 406 | ] 407 | }, 408 | { 409 | "gender": "male", 410 | "test": [ 411 | "ынец", 412 | "овец" 413 | ], 414 | "mods": [ 415 | "--ца", 416 | "--цу", 417 | "--ца", 418 | "--цом", 419 | "--це" 420 | ] 421 | }, 422 | { 423 | "gender": "male", 424 | "test": [ 425 | "нец", 426 | "обец" 427 | ], 428 | "mods": [ 429 | "--ца", 430 | "--цу", 431 | "--ца", 432 | "--цем", 433 | "--це" 434 | ] 435 | }, 436 | { 437 | "gender": "male", 438 | "test": [ 439 | "ай" 440 | ], 441 | "mods": [ 442 | "-я", 443 | "-ю", 444 | "-я", 445 | "-ем", 446 | "-е" 447 | ] 448 | }, 449 | { 450 | "gender": "male", 451 | "test": [ 452 | "гой", 453 | "кой" 454 | ], 455 | "mods": [ 456 | "-го", 457 | "-му", 458 | "-го", 459 | "--им", 460 | "-м" 461 | ] 462 | }, 463 | { 464 | "gender": "male", 465 | "test": [ 466 | "ой" 467 | ], 468 | "mods": [ 469 | "-го", 470 | "-му", 471 | "-го", 472 | "--ым", 473 | "-м" 474 | ] 475 | }, 476 | { 477 | "gender": "male", 478 | "test": [ 479 | "ах", 480 | "ив", 481 | "шток" 482 | ], 483 | "mods": [ 484 | "а", 485 | "у", 486 | "а", 487 | "ом", 488 | "е" 489 | ] 490 | }, 491 | { 492 | "gender": "male", 493 | "test": [ 494 | "ший", 495 | "щий", 496 | "жий", 497 | "ний" 498 | ], 499 | "mods": [ 500 | "--его", 501 | "--ему", 502 | "--его", 503 | "-м", 504 | "--ем" 505 | ] 506 | }, 507 | { 508 | "gender": "male", 509 | "test": [ 510 | "ый", 511 | "кий", 512 | "хий" 513 | ], 514 | "mods": [ 515 | "--ого", 516 | "--ому", 517 | "--ого", 518 | "-м", 519 | "--ом" 520 | ] 521 | }, 522 | { 523 | "gender": "male", 524 | "test": [ 525 | "ий" 526 | ], 527 | "mods": [ 528 | "-я", 529 | "-ю", 530 | "-я", 531 | "-ем", 532 | "-и" 533 | ] 534 | }, 535 | { 536 | "gender": "male", 537 | "test": [ 538 | "ок" 539 | ], 540 | "mods": [ 541 | "--ка", 542 | "--ку", 543 | "--ка", 544 | "--ком", 545 | "--ке" 546 | ] 547 | }, 548 | { 549 | "gender": "male", 550 | "test": [ 551 | "ец" 552 | ], 553 | "mods": [ 554 | "--ца", 555 | "--цу", 556 | "--ца", 557 | "--цом", 558 | "--це" 559 | ] 560 | }, 561 | { 562 | "gender": "male", 563 | "test": [ 564 | "ц", 565 | "ч", 566 | "ш", 567 | "щ" 568 | ], 569 | "mods": [ 570 | "а", 571 | "у", 572 | "а", 573 | "ем", 574 | "е" 575 | ] 576 | }, 577 | { 578 | "gender": "male", 579 | "test": [ 580 | "ен", 581 | "нн", 582 | "он", 583 | "ун", 584 | "б", 585 | "г", 586 | "д", 587 | "ж", 588 | "з", 589 | "к", 590 | "л", 591 | "м", 592 | "п", 593 | "р", 594 | "с", 595 | "т", 596 | "ф", 597 | "х" 598 | ], 599 | "mods": [ 600 | "а", 601 | "у", 602 | "а", 603 | "ом", 604 | "е" 605 | ] 606 | }, 607 | { 608 | "gender": "male", 609 | "test": [ 610 | "в", 611 | "н" 612 | ], 613 | "mods": [ 614 | "а", 615 | "у", 616 | "а", 617 | "ым", 618 | "е" 619 | ] 620 | } 621 | ] 622 | }, 623 | "firstname": { 624 | "exceptions": [ 625 | { 626 | "gender": "male", 627 | "test": [ 628 | "лев" 629 | ], 630 | "mods": [ 631 | "--ьва", 632 | "--ьву", 633 | "--ьва", 634 | "--ьвом", 635 | "--ьве" 636 | ] 637 | }, 638 | { 639 | "gender": "male", 640 | "test": [ 641 | "пётр" 642 | ], 643 | "mods": [ 644 | "---етра", 645 | "---етру", 646 | "---етра", 647 | "---етром", 648 | "---етре" 649 | ] 650 | }, 651 | { 652 | "gender": "male", 653 | "test": [ 654 | "павел" 655 | ], 656 | "mods": [ 657 | "--ла", 658 | "--лу", 659 | "--ла", 660 | "--лом", 661 | "--ле" 662 | ] 663 | }, 664 | { 665 | "gender": "male", 666 | "test": [ 667 | "яша" 668 | ], 669 | "mods": [ 670 | "-и", 671 | "-е", 672 | "-у", 673 | "-ей", 674 | "-е" 675 | ] 676 | }, 677 | { 678 | "gender": "male", 679 | "test": [ 680 | "шота" 681 | ], 682 | "mods": [ 683 | ".", 684 | ".", 685 | ".", 686 | ".", 687 | "." 688 | ] 689 | }, 690 | { 691 | "gender": "female", 692 | "test": [ 693 | "рашель", 694 | "нинель", 695 | "николь", 696 | "габриэль", 697 | "даниэль" 698 | ], 699 | "mods": [ 700 | ".", 701 | ".", 702 | ".", 703 | ".", 704 | "." 705 | ] 706 | } 707 | ], 708 | "suffixes": [ 709 | { 710 | "gender": "androgynous", 711 | "test": [ 712 | "е", 713 | "ё", 714 | "и", 715 | "о", 716 | "у", 717 | "ы", 718 | "э", 719 | "ю" 720 | ], 721 | "mods": [ 722 | ".", 723 | ".", 724 | ".", 725 | ".", 726 | "." 727 | ] 728 | }, 729 | { 730 | "gender": "female", 731 | "test": [ 732 | "б", 733 | "в", 734 | "г", 735 | "д", 736 | "ж", 737 | "з", 738 | "й", 739 | "к", 740 | "л", 741 | "м", 742 | "н", 743 | "п", 744 | "р", 745 | "с", 746 | "т", 747 | "ф", 748 | "х", 749 | "ц", 750 | "ч", 751 | "ш", 752 | "щ", 753 | "ъ" 754 | ], 755 | "mods": [ 756 | ".", 757 | ".", 758 | ".", 759 | ".", 760 | "." 761 | ] 762 | }, 763 | { 764 | "gender": "female", 765 | "test": [ 766 | "ь" 767 | ], 768 | "mods": [ 769 | "-и", 770 | "-и", 771 | ".", 772 | "ю", 773 | "-и" 774 | ] 775 | }, 776 | { 777 | "gender": "male", 778 | "test": [ 779 | "ь" 780 | ], 781 | "mods": [ 782 | "-я", 783 | "-ю", 784 | "-я", 785 | "-ем", 786 | "-е" 787 | ] 788 | }, 789 | { 790 | "gender": "androgynous", 791 | "test": [ 792 | "га", 793 | "ка", 794 | "ха", 795 | "ча", 796 | "ща", 797 | "жа" 798 | ], 799 | "mods": [ 800 | "-и", 801 | "-е", 802 | "-у", 803 | "-ой", 804 | "-е" 805 | ] 806 | }, 807 | { 808 | "gender": "female", 809 | "test": [ 810 | "ша" 811 | ], 812 | "mods": [ 813 | "-и", 814 | "-е", 815 | "-у", 816 | "-ей", 817 | "-е" 818 | ] 819 | }, 820 | { 821 | "gender": "androgynous", 822 | "test": [ 823 | "а" 824 | ], 825 | "mods": [ 826 | "-ы", 827 | "-е", 828 | "-у", 829 | "-ой", 830 | "-е" 831 | ] 832 | }, 833 | { 834 | "gender": "female", 835 | "test": [ 836 | "ия" 837 | ], 838 | "mods": [ 839 | "-и", 840 | "-и", 841 | "-ю", 842 | "-ей", 843 | "-и" 844 | ] 845 | }, 846 | { 847 | "gender": "female", 848 | "test": [ 849 | "а" 850 | ], 851 | "mods": [ 852 | "-ы", 853 | "-е", 854 | "-у", 855 | "-ой", 856 | "-е" 857 | ] 858 | }, 859 | { 860 | "gender": "female", 861 | "test": [ 862 | "я" 863 | ], 864 | "mods": [ 865 | "-и", 866 | "-е", 867 | "-ю", 868 | "-ей", 869 | "-е" 870 | ] 871 | }, 872 | { 873 | "gender": "male", 874 | "test": [ 875 | "ия" 876 | ], 877 | "mods": [ 878 | "-и", 879 | "-и", 880 | "-ю", 881 | "-ей", 882 | "-и" 883 | ] 884 | }, 885 | { 886 | "gender": "male", 887 | "test": [ 888 | "я" 889 | ], 890 | "mods": [ 891 | "-и", 892 | "-е", 893 | "-ю", 894 | "-ей", 895 | "-е" 896 | ] 897 | }, 898 | { 899 | "gender": "male", 900 | "test": [ 901 | "ей", 902 | "й" 903 | ], 904 | "mods": [ 905 | "-я", 906 | "-ю", 907 | "-я", 908 | "-ем", 909 | "-е" 910 | ] 911 | }, 912 | { 913 | "gender": "male", 914 | "test": [ 915 | "ий" 916 | ], 917 | "mods": [ 918 | "-я", 919 | "-ю", 920 | "-я", 921 | "-ем", 922 | "-и" 923 | ] 924 | }, 925 | { 926 | "gender": "male", 927 | "test": [ 928 | "б", 929 | "в", 930 | "г", 931 | "д", 932 | "ж", 933 | "з", 934 | "к", 935 | "л", 936 | "м", 937 | "н", 938 | "п", 939 | "р", 940 | "с", 941 | "т", 942 | "ф", 943 | "х", 944 | "ц", 945 | "ч" 946 | ], 947 | "mods": [ 948 | "а", 949 | "у", 950 | "а", 951 | "ом", 952 | "е" 953 | ] 954 | }, 955 | { 956 | "gender": "androgynous", 957 | "test": [ 958 | "ния", 959 | "рия", 960 | "вия" 961 | ], 962 | "mods": [ 963 | "-и", 964 | "-и", 965 | "-ю", 966 | "-ем", 967 | "-ем" 968 | ] 969 | } 970 | ] 971 | }, 972 | "middlename": { 973 | "exceptions": [ 974 | { 975 | "gender": "androgynous", 976 | "test": [ 977 | "борух" 978 | ], 979 | "mods": [ 980 | ".", 981 | ".", 982 | ".", 983 | ".", 984 | "." 985 | ], 986 | "tags": [ 987 | "first_word" 988 | ] 989 | } 990 | ], 991 | "suffixes": [ 992 | { 993 | "gender": "male", 994 | "test": [ 995 | "ич" 996 | ], 997 | "mods": [ 998 | "а", 999 | "у", 1000 | "а", 1001 | "ем", 1002 | "е" 1003 | ] 1004 | }, 1005 | { 1006 | "gender": "female", 1007 | "test": [ 1008 | "на" 1009 | ], 1010 | "mods": [ 1011 | "-ы", 1012 | "-е", 1013 | "-у", 1014 | "-ой", 1015 | "-е" 1016 | ] 1017 | } 1018 | ] 1019 | } 1020 | } 1021 | --------------------------------------------------------------------------------