diff --git a/rudict/frequent_nouns_2000.csv b/rudict/frequent_nouns_2000.csv index 3611bb8..7498947 100644 --- a/rudict/frequent_nouns_2000.csv +++ b/rudict/frequent_nouns_2000.csv @@ -1,4 +1,4 @@ -Номер;Слово;Род / число;Есть единственное число;Есть множественное число;Есть стандартное множественное число;Есть стандартное множественное число, полученное путем удаления последней гласной из базы;Есть стандартное окончание множественного числа;"Есть альтернативное окончание множественного числа ""а/я""";Специальные мн. числа;Может быть одушевленным;Может быть неодушевленным;Специальная форма падежа;1 +Номер;Слово;Род / число;Есть единственное число;Есть множественное число;Есть стандартное или альтернативное множественное число, без удаления гласных;Есть стандартное или альтернативное множественное число, полученное путем удаления последней гласной из базы;Есть стандартное окончание множественного числа;"Есть альтернативное окончание множественного числа ""а/я""";Специальные мн. числа;Может быть одушевленным;Может быть неодушевленным;Специальная форма падежа;1 307;любовь;ж;1;0;0;0;0;0;;0;1;;1 338;помощь;ж;1;0;0;0;0;0;;0;1;;1 589;борьба;ж;1;0;0;0;0;0;;0;1;;1 @@ -40,6 +40,71 @@ 1791;давление;с;1;0;0;0;0;0;;0;1;;1 1971;жильё;с;1;0;0;0;0;0;;0;1;;1 1987;пиво;с;1;0;0;0;0;0;;0;1;;1 +301;мать;ж;1;1;0;0;0;0;матери;1;0;;1 +834;дочь;ж;1;1;0;0;0;0;дочери;1;0;;1 +71;день;м;1;1;0;1;1;0;;0;1;;1 +106;друг;м;1;1;0;0;0;0;друзья;1;0;;1 +110;глаз;м;1;1;1;0;0;1;;0;1;;1 +118;дом;м;1;1;1;0;0;1;;0;1;;1 +137;ребенок;м;1;1;0;0;0;0;ребята;1;0;;1 +142;конец;м;1;1;0;1;1;0;;0;1;;1 +156;город;м;1;1;1;0;0;1;;0;1;;1 +192;отец;м;1;1;0;1;1;0;;1;0;;1 +221;голос;м;1;1;1;0;0;1;;0;1;;1 +280;уровень;м;1;1;0;1;1;0;;0;1;;1 +295;вечер;м;1;1;1;0;0;1;;0;1;;1 +314;век;м;1;1;1;0;0;1;;0;1;;1 +328;порядок;м;1;1;0;1;1;0;;0;1;;1 +365;рынок;м;1;1;0;1;1;0;;0;1;;1 +495;палец;м;1;1;0;1;0;0;;0;1;;1 +512;лес;м;1;1;1;0;0;1;;0;1;;1 +542;брат;м;1;1;0;0;0;0;братья;1;0;;1 +548;номер;м;1;1;1;0;1;1;;0;1;;1 +553;гражданин;м;1;1;0;0;0;0;граждане;1;0;;1 +576;край;м;1;1;1;0;0;1;;0;1;;1 +625;рисунок;м;1;1;0;1;1;0;;0;1;;1 +664;хозяин;м;1;1;0;0;0;0;хозяева;1;0;;1 +692;берег;м;1;1;1;0;0;1;;0;1;;1 +697;цвет;м;1;1;1;0;0;1;;0;1;;1 +752;господин;м;1;1;0;0;0;0;господа;1;0;;1 +769;сон;м;1;1;0;1;1;0;;0;1;;1 +816;участок;м;1;1;0;1;1;0;;0;1;;1 +847;ветер;м;1;1;0;1;1;1;;0;1;;1 +849;парень;м;1;1;0;1;1;0;;1;0;;1 +855;огонь;м;1;1;0;1;1;0;;0;1;;1 +901;рот;м;1;1;0;1;1;0;;0;1;;1 +910;камень;м;1;1;0;1;1;0;;0;1;;1 +953;снег;м;1;1;1;0;0;1;;0;1;;1 +962;немец;м;1;1;0;1;1;0;;1;0;;1 +1060;учитель;м;1;1;1;0;0;1;;1;0;;1 +1150;десяток;м;1;1;0;1;1;0;;0;1;;1 +1254;список;м;1;1;0;1;1;0;;0;1;;1 +1278;остров;м;1;1;1;0;0;1;;0;1;;1 +1324;цветок;м;1;1;0;1;1;0;;0;1;;1 +1406;стул;м;1;1;0;0;1;0;стулья;0;1;;1 +1505;образец;м;1;1;0;1;1;0;;0;1;;1 +1574;американец;м;1;1;0;1;1;0;;1;0;;1 +1575;лоб;м;1;1;0;1;1;0;;0;1;;1 +1590;бок;м;1;1;1;0;0;1;;0;1;;1 +1599;кусок;м;1;1;0;1;1;0;;0;1;;1 +1606;звонок;м;1;1;0;1;1;0;;0;1;;1 +1624;подарок;м;1;1;0;1;1;0;;0;1;;1 +1639;смех;м;1;1;1;0;0;1;;0;1;;1 +1874;лев;м;1;1;0;1;1;0;;1;0;;1 +1892;корень;м;1;1;0;1;1;0;;0;1;;1 +1907;владелец;м;1;1;0;1;1;0;;1;0;;1 +1928;лед;м;1;1;0;1;1;0;;0;1;;1 +1940;недостаток;м;1;1;0;1;1;0;;0;1;;1 +1972;мешок;м;1;1;0;1;1;0;;0;1;;1 +1984;дворец;м;1;1;0;1;1;0;;0;1;;1 +52;время;с;1;1;0;0;0;0;времена;0;1;;1 +239;имя;с;1;1;0;0;0;0;имена;0;1;;1 +452;плечо;с;1;1;0;0;1;0;плечи;0;1;;1 +600;небо;с;1;1;0;0;0;0;небеса;0;1;;1 +860;ухо;с;1;1;0;0;0;0;уши;0;1;;1 +1447;чудо;с;1;1;0;0;0;0;чудеса;0;1;;1 +1528;вино;с;1;1;0;0;0;0;вины;0;1;;1 +1782;крыло;с;1;1;0;0;0;0;крылья;0;1;;1 66;жизнь;ж;1;1;1;0;1;0;;0;1;;1 74;рука;ж;1;1;1;0;1;0;;0;1;;1 87;работа;ж;1;1;1;0;1;0;;0;1;;1 @@ -73,7 +138,6 @@ 292;улица;ж;1;1;1;0;1;0;;0;1;;1 299;мысль;ж;1;1;1;0;1;0;;0;1;;1 300;дорога;ж;1;1;1;0;1;0;;0;1;;1 -301;мать;ж;1;1;0;0;0;0;матери;1;0;;1 309;мама;ж;1;1;1;0;1;0;;1;0;;1 315;школа;ж;1;1;1;0;1;0;;0;1;;1 318;цель;ж;1;1;1;0;1;0;;0;1;;1 @@ -144,7 +208,6 @@ 808;площадь;ж;1;1;1;0;1;0;;0;1;;1 823;линия;ж;1;1;1;0;1;0;;0;1;;1 830;губа;ж;1;1;1;0;1;0;;0;1;;1 -834;дочь;ж;1;1;0;0;0;0;дочери;1;0;;1 836;среда;ж;1;1;1;0;1;0;;0;1;;1 862;грудь;ж;1;1;1;0;1;0;;0;1;;1 869;услуга;ж;1;1;1;0;1;0;;0;1;;1 @@ -313,36 +376,23 @@ 1985;забота;ж;1;1;1;0;1;0;;0;1;;1 28;год;м;1;1;1;0;1;1;;0;1;;1 39;человек;м;1;1;1;0;1;0;люди;1;0;;1 -71;день;м;1;1;0;1;1;0;;0;1;;1 -106;друг;м;1;1;0;0;0;0;друзья;1;0;;1 -110;глаз;м;1;1;0;0;0;1;;0;1;;1 114;вопрос;м;1;1;1;0;1;0;;0;1;;1 -118;дом;м;1;1;0;0;0;1;;0;1;;1 128;мир;м;1;1;1;0;1;0;;0;1;;1 -137;ребенок;м;1;1;0;0;0;0;ребята;1;0;;1 -142;конец;м;1;1;0;1;1;0;;0;1;;1 145;вид;м;1;1;1;0;1;0;;0;1;;1 -156;город;м;1;1;0;0;0;1;;0;1;;1 -192;отец;м;1;1;0;1;1;0;;1;0;;1 200;час;м;1;1;1;0;1;0;;0;1;;1 212;образ;м;1;1;1;0;1;0;;0;1;;1 217;закон;м;1;1;1;0;1;0;;0;1;;1 220;бог;м;1;1;1;0;1;0;;1;0;;1 -221;голос;м;1;1;0;0;0;1;;0;1;;1 235;результат;м;1;1;1;0;1;0;;0;1;;1 237;стол;м;1;1;1;0;1;0;;0;1;;1 252;народ;м;1;1;1;0;1;0;;0;1;;1 260;процесс;м;1;1;1;0;1;0;;0;1;;1 261;суд;м;1;1;1;0;1;0;;0;1;;1 274;путь;м;1;1;1;0;1;0;;0;1;;1 -280;уровень;м;1;1;0;1;1;0;;0;1;;1 -295;вечер;м;1;1;0;0;0;1;;0;1;;1 303;месяц;м;1;1;1;0;1;0;;0;1;;1 306;язык;м;1;1;1;0;1;0;;0;1;;1 308;взгляд;м;1;1;1;0;1;0;;0;1;;1 -314;век;м;1;1;0;0;0;1;;0;1;;1 326;президент;м;1;1;1;0;1;0;;1;0;;1 -328;порядок;м;1;1;0;1;1;0;;0;1;;1 329;момент;м;1;1;1;0;1;0;;0;1;;1 330;театр;м;1;1;1;0;1;0;;0;1;;1 343;рубль;м;1;1;1;0;1;0;;0;1;;1 @@ -350,7 +400,6 @@ 354;орган;м;1;1;1;0;1;0;;0;1;;1 357;труд;м;1;1;1;0;1;0;;0;1;;1 360;сын;м;1;1;1;0;1;0;;1;0;;1 -365;рынок;м;1;1;0;1;1;0;;0;1;;1 374;разговор;м;1;1;1;0;1;0;;0;1;;1 394;центр;м;1;1;1;0;1;0;;0;1;;1 396;ответ;м;1;1;1;0;1;0;;0;1;;1 @@ -370,26 +419,20 @@ 479;проект;м;1;1;1;0;1;0;;0;1;;1 484;директор;м;1;1;1;0;1;1;;1;0;;1 494;срок;м;1;1;1;0;1;0;;0;1;;1 -495;палец;м;1;1;0;1;0;0;;0;1;;1 496;опыт;м;1;1;1;0;1;0;;0;1;;1 -512;лес;м;1;1;0;0;0;1;;0;1;;1 517;состав;м;1;1;1;0;1;0;;0;1;;1 522;член;м;1;1;1;0;1;0;;1;1;;1 528;объект;м;1;1;1;0;1;0;;0;1;;1 529;зал;м;1;1;1;0;1;0;;0;1;;1 536;период;м;1;1;1;0;1;0;;0;1;;1 538;шаг;м;1;1;1;0;1;0;;0;1;;1 -542;брат;м;1;1;0;0;0;0;братья;1;0;;1 -548;номер;м;1;1;0;0;1;1;;0;1;;1 550;пример;м;1;1;1;0;1;0;;0;1;;1 -553;гражданин;м;1;1;0;0;0;0;граждане;1;0;;1 557;начальник;м;1;1;1;0;1;0;;1;0;;1 559;рост;м;1;1;1;0;1;0;;0;1;;1 563;принцип;м;1;1;1;0;1;0;;0;1;;1 569;метод;м;1;1;1;0;1;0;;0;1;;1 570;тип;м;1;1;1;0;1;0;;0;1;;1 571;фильм;м;1;1;1;0;1;0;;0;1;;1 -576;край;м;1;1;0;0;0;0;края;0;1;;1 579;гость;м;1;1;1;0;1;0;;1;0;;1 588;характер;м;1;1;1;0;1;0;;0;1;;1 593;размер;м;1;1;1;0;1;0;;0;1;;1 @@ -400,24 +443,20 @@ 609;герой;м;1;1;1;0;1;0;;1;0;;1 612;доллар;м;1;1;1;0;1;0;;0;1;;1 616;пол;м;1;1;1;0;1;0;;0;1;;1 -625;рисунок;м;1;1;0;1;1;0;;0;1;;1 629;банк;м;1;1;1;0;1;0;;0;1;;1 650;союз;м;1;1;1;0;1;0;;0;1;;1 653;врач;м;1;1;1;0;1;0;;1;0;;1 655;договор;м;1;1;1;0;1;1;;0;1;;1 661;факт;м;1;1;1;0;1;0;;0;1;;1 -664;хозяин;м;1;1;0;0;0;0;хозяева;1;0;;1 676;телефон;м;1;1;1;0;1;0;;0;1;;1 681;двор;м;1;1;1;0;1;0;;0;1;;1 685;писатель;м;1;1;1;0;1;0;;1;0;;1 686;самолёт;м;1;1;1;0;1;0;;0;1;;1 687;объём;м;1;1;1;0;1;0;;0;1;;1 689;род;м;1;1;1;0;1;1;;0;1;;1 -692;берег;м;1;1;0;0;0;1;;0;1;;1 693;спектакль;м;1;1;1;0;1;0;;0;1;;1 695;способ;м;1;1;1;0;1;0;;0;1;;1 696;завод;м;1;1;1;0;1;0;;0;1;;1 -697;цвет;м;1;1;0;0;0;1;;0;1;;1 699;журнал;м;1;1;1;0;1;0;;0;1;;1 700;руководитель;м;1;1;1;0;1;0;;1;0;;1 701;специалист;м;1;1;1;0;1;0;;1;0;;1 @@ -430,12 +469,10 @@ 736;стих;м;1;1;1;0;1;0;;0;1;;1 737;автомобиль;м;1;1;1;0;1;0;;0;1;;1 747;поэт;м;1;1;1;0;1;0;;1;0;;1 -752;господин;м;1;1;0;0;0;0;господа;1;0;;1 756;предмет;м;1;1;1;0;1;0;;0;1;;1 759;вариант;м;1;1;1;0;1;0;;0;1;;1 760;министр;м;1;1;1;0;1;0;;1;0;;1 765;дух;м;1;1;1;0;1;0;;0;1;;1 -769;сон;м;1;1;0;1;1;0;;0;1;;1 772;ум;м;1;1;1;0;1;0;;0;1;;1 773;повод;м;1;1;1;0;1;0;;0;1;;1 774;старик;м;1;1;1;0;1;0;;1;0;;1 @@ -449,7 +486,6 @@ 801;текст;м;1;1;1;0;1;0;;0;1;;1 812;возраст;м;1;1;1;0;1;0;;0;1;;1 815;участник;м;1;1;1;0;1;0;;1;0;;1 -816;участок;м;1;1;0;1;1;0;;0;1;;1 818;пункт;м;1;1;1;0;1;0;;0;1;;1 826;папа;м;1;1;1;0;1;0;;1;0;;1 829;доктор;м;1;1;1;0;1;1;;1;0;;1 @@ -457,10 +493,7 @@ 839;солдат;м;1;1;1;0;1;0;;1;0;;1 840;художник;м;1;1;1;0;1;0;;1;0;;1 842;волос;м;1;1;1;0;1;0;;0;1;;1 -847;ветер;м;1;1;0;1;1;1;;0;1;;1 -849;парень;м;1;1;0;1;1;0;;1;0;;1 853;генерал;м;1;1;1;0;1;0;;1;0;;1 -855;огонь;м;1;1;0;1;1;0;;0;1;;1 863;нос;м;1;1;1;0;1;0;;0;1;;1 868;страх;м;1;1;1;0;1;0;;0;1;;1 877;продукт;м;1;1;1;0;1;0;;0;1;;1 @@ -469,17 +502,13 @@ 884;сад;м;1;1;1;0;1;0;;0;1;;1 888;сотрудник;м;1;1;1;0;1;0;;1;0;;1 893;курс;м;1;1;1;0;1;0;;0;1;;1 -901;рот;м;1;1;0;1;1;0;;0;1;;1 -910;камень;м;1;1;0;1;1;0;;0;1;;1 913;рассказ;м;1;1;1;0;1;0;;0;1;;1 914;контроль;м;1;1;1;0;1;0;;0;1;;1 934;фонд;м;1;1;1;0;1;0;;0;1;;1 939;лист;м;1;1;1;0;1;0;;0;1;;1 950;бюджет;м;1;1;1;0;1;0;;0;1;;1 -953;снег;м;1;1;0;0;0;1;;0;1;;1 956;мужик;м;1;1;1;0;1;0;;1;0;;1 959;элемент;м;1;1;1;0;1;0;;0;1;;1 -962;немец;м;1;1;0;1;1;0;;1;0;;1 965;источник;м;1;1;1;0;1;0;;0;1;;1 977;выбор;м;1;1;1;0;1;0;;0;1;;1 981;итог;м;1;1;1;0;1;0;;0;1;;1 @@ -497,7 +526,6 @@ 1049;праздник;м;1;1;1;0;1;0;;0;1;;1 1052;читатель;м;1;1;1;0;1;0;;1;0;;1 1055;актер;м;1;1;1;0;1;0;;1;0;;1 -1060;учитель;м;1;1;0;0;0;1;;1;0;;1 1061;акт;м;1;1;1;0;1;0;;0;1;;1 1070;показатель;м;1;1;1;0;1;0;;0;1;;1 1072;корабль;м;1;1;1;0;1;0;;0;1;;1 @@ -522,7 +550,6 @@ 1136;чай;м;1;1;1;0;1;0;;0;1;;1 1137;режим;м;1;1;1;0;1;0;;0;1;;1 1139;вирус;м;1;1;1;0;1;0;;0;1;;1 -1150;десяток;м;1;1;0;1;1;0;;0;1;;1 1153;студент;м;1;1;1;0;1;0;;1;0;;1 1157;поиск;м;1;1;1;0;1;0;;0;1;;1 1160;налог;м;1;1;1;0;1;0;;0;1;;1 @@ -539,11 +566,9 @@ 1239;артист;м;1;1;1;0;1;0;;1;0;;1 1246;сосед;м;1;1;1;0;1;0;;1;0;;1 1251;субъект;м;1;1;1;0;1;0;;0;1;;1 -1254;список;м;1;1;0;1;1;0;;0;1;;1 1256;журналист;м;1;1;1;0;1;0;;1;0;;1 1257;май;м;1;1;1;0;1;0;;0;1;;1 1269;долг;м;1;1;1;0;1;0;;0;1;;1 -1278;остров;м;1;1;0;0;0;1;;0;1;;1 1280;противник;м;1;1;1;0;1;0;;1;0;;1 1288;житель;м;1;1;1;0;1;0;;1;0;;1 1300;храм;м;1;1;1;0;1;0;;0;1;;1 @@ -553,7 +578,6 @@ 1313;университет;м;1;1;1;0;1;0;;0;1;;1 1318;адрес;м;1;1;1;0;1;1;;0;1;;1 1319;декабрь;м;1;1;1;0;1;0;;0;1;;1 -1324;цветок;м;1;1;0;1;1;0;;0;1;;1 1327;лидер;м;1;1;1;0;1;0;;0;1;;1 1328;октябрь;м;1;1;1;0;1;0;;0;1;;1 1332;сентябрь;м;1;1;1;0;1;0;;0;1;;1 @@ -570,7 +594,6 @@ 1396;март;м;1;1;1;0;1;0;;0;1;;1 1398;клиент;м;1;1;1;0;1;0;;1;0;;1 1403;фронт;м;1;1;1;0;1;0;;0;1;;1 -1406;стул;м;1;1;0;0;1;0;стулья;0;1;;1 1420;музей;м;1;1;1;0;1;0;;0;1;;1 1423;след;м;1;1;1;0;1;0;;0;1;;1 1425;полковник;м;1;1;1;0;1;0;;1;0;;1 @@ -586,7 +609,6 @@ 1474;еврей;м;1;1;1;0;1;0;;1;0;;1 1477;июнь;м;1;1;1;0;1;0;;0;1;;1 1490;дождь;м;1;1;1;0;1;0;;0;1;;1 -1505;образец;м;1;1;0;1;1;0;;0;1;;1 1518;костюм;м;1;1;1;0;1;0;;0;1;;1 1534;коллега;м;1;1;1;0;1;0;;1;0;;1 1535;организм;м;1;1;1;0;1;0;;0;1;;1 @@ -598,24 +620,17 @@ 1565;спор;м;1;1;1;0;1;0;;0;1;;1 1569;вкус;м;1;1;1;0;1;0;;0;1;;1 1571;признак;м;1;1;1;0;1;0;;0;1;;1 -1574;американец;м;1;1;0;1;1;0;;1;0;;1 -1575;лоб;м;1;1;0;1;1;0;;0;1;;1 1584;ключ;м;1;1;1;0;1;0;;0;1;;1 1589;слой;м;1;1;1;0;1;0;;0;1;;1 -1590;бок;м;1;1;0;0;0;1;;0;1;;1 1595;июль;м;1;1;1;0;1;0;;0;1;;1 1597;перевод;м;1;1;1;0;1;0;;0;1;;1 1598;секретарь;м;1;1;1;0;1;0;;1;0;;1 -1599;кусок;м;1;1;0;1;1;0;;0;1;;1 1601;слух;м;1;1;1;0;1;0;;0;1;;1 -1606;звонок;м;1;1;0;1;1;0;;0;1;;1 1613;чиновник;м;1;1;1;0;1;0;;1;0;;1 1622;билет;м;1;1;1;0;1;0;;0;1;;1 -1624;подарок;м;1;1;0;1;1;0;;0;1;;1 1626;ящик;м;1;1;1;0;1;0;;0;1;;1 1627;конкурс;м;1;1;1;0;1;0;;0;1;;1 1637;царь;м;1;1;1;0;1;0;;1;0;;1 -1639;смех;м;1;1;0;0;0;1;;0;1;;1 1650;блок;м;1;1;1;0;1;0;;0;1;;1 1656;портрет;м;1;1;1;0;1;0;;0;1;;1 1664;стакан;м;1;1;1;0;1;0;;0;1;;1 @@ -659,42 +674,33 @@ 1854;эксперт;м;1;1;1;0;1;0;;1;0;;1 1861;автобус;м;1;1;1;0;1;0;;0;1;;1 1866;кадр;м;1;1;1;0;1;0;;1;1;;1 -1874;лев;м;1;1;0;1;1;0;;1;0;;1 1876;порог;м;1;1;1;0;1;0;;0;1;;1 1881;ремонт;м;1;1;1;0;1;0;;0;1;;1 1891;памятник;м;1;1;1;0;1;0;;0;1;;1 -1892;корень;м;1;1;0;1;1;0;;0;1;;1 1905;штаб;м;1;1;1;0;1;0;;0;1;;1 -1907;владелец;м;1;1;0;1;1;0;;1;0;;1 1908;компьютер;м;1;1;1;0;1;0;;0;1;;1 1911;инженер;м;1;1;1;0;1;0;;1;0;;1 1926;выпуск;м;1;1;1;0;1;0;;0;1;;1 1927;кулак;м;1;1;1;0;1;0;;0;1;;1 -1928;лед;м;1;1;0;1;1;0;;0;1;;1 1938;корпус;м;1;1;1;0;1;1;;0;1;;1 -1940;недостаток;м;1;1;0;1;1;0;;0;1;;1 1942;сапог;м;1;1;1;0;1;0;;0;1;;1 1945;талант;м;1;1;1;0;1;0;;0;1;;1 1967;сбор;м;1;1;1;0;1;0;;0;1;;1 1968;штат;м;1;1;1;0;1;0;;0;1;;1 1970;следователь;м;1;1;1;0;1;0;;1;0;;1 -1972;мешок;м;1;1;0;1;1;0;;0;1;;1 1976;куст;м;1;1;1;0;1;0;;0;1;;1 1977;отказ;м;1;1;1;0;1;0;;0;1;;1 1979;замок;м;1;1;1;0;1;0;;0;1;;1 1982;редактор;м;1;1;1;0;1;0;;1;0;;1 -1984;дворец;м;1;1;0;1;1;0;;0;1;;1 1990;диван;м;1;1;1;0;1;0;;0;1;;1 1994;столик;м;1;1;1;0;1;0;;0;1;;1 1997;эксперимент;м;1;1;1;0;1;0;;0;1;;1 -52;время;с;1;1;0;0;1;0;времена;0;1;;1 65;дело;с;1;1;1;0;1;0;;0;1;;1 94;слово;с;1;1;1;0;1;0;;0;1;;1 98;место;с;1;1;1;0;1;0;;0;1;;1 104;лицо;с;1;1;1;0;1;0;;0;1;;1 162;отношение;с;1;1;1;0;1;0;;0;1;;1 203;право;с;1;1;1;0;1;0;;0;1;;1 -239;имя;с;1;1;0;0;1;0;имена;0;1;;1 246;число;с;1;1;1;0;1;0;;0;1;;1 259;развитие;с;1;1;1;0;1;0;;0;1;;1 265;условие;с;1;1;1;0;1;0;;0;1;;1 @@ -718,14 +724,12 @@ 432;сердце;с;1;1;1;0;1;0;;0;1;;1 433;движение;с;1;1;1;0;1;0;;0;1;;1 437;чувство;с;1;1;1;0;1;0;;0;1;;1 -452;плечо;с;1;1;0;0;1;0;плечи;0;1;;1 527;событие;с;1;1;1;0;1;0;;0;1;;1 533;значение;с;1;1;1;0;1;0;;0;1;;1 543;искусство;с;1;1;1;0;1;0;;0;1;;1 552;исследование;с;1;1;1;0;1;0;;0;1;;1 590;использование;с;1;1;1;0;1;0;;0;1;;1 595;образование;с;1;1;1;0;1;0;;0;1;;1 -600;небо;с;1;1;0;0;1;0;небеса;0;1;;1 605;участие;с;1;1;1;0;1;0;;0;1;;1 619;поле;с;1;1;1;0;1;0;;0;1;;1 621;изменение;с;1;1;1;0;1;0;;0;1;;1 @@ -747,7 +751,6 @@ 851;зрение;с;1;1;1;0;1;0;;0;1;;1 858;понятие;с;1;1;1;0;1;0;;0;1;;1 859;строительство;с;1;1;1;0;1;0;;0;1;;1 -860;ухо;с;1;1;0;0;1;0;уши;0;1;;1 873;содержание;с;1;1;1;0;1;0;;0;1;;1 895;предложение;с;1;1;1;0;1;0;;0;1;;1 907;отсутствие;с;1;1;1;0;1;0;;0;1;;1 @@ -789,10 +792,8 @@ 1416;повышение;с;1;1;1;0;1;0;;0;1;;1 1427;сомнение;с;1;1;1;0;1;0;;0;1;;1 1428;понимание;с;1;1;1;0;1;0;;0;1;;1 -1447;чудо;с;1;1;0;0;1;0;чудеса;0;1;;1 1457;настроение;с;1;1;1;0;1;0;;0;1;;1 1465;преступление;с;1;1;1;0;1;0;;0;1;;1 -1528;вино;с;1;1;0;0;1;0;вины;0;1;;1 1529;воспоминание;с;1;1;1;0;1;0;;0;1;;1 1538;учреждение;с;1;1;1;0;1;0;;0;1;;1 1540;открытие;с;1;1;1;0;1;0;;0;1;;1 @@ -820,7 +821,6 @@ 1771;разрешение;с;1;1;1;0;1;0;;0;1;;1 1772;воздействие;с;1;1;1;0;1;0;;0;1;;1 1778;следствие;с;1;1;1;0;1;0;;0;1;;1 -1782;крыло;с;1;1;0;0;1;0;крылья;0;1;;1 1794;присутствие;с;1;1;1;0;1;0;;0;1;;1 1802;достоинство;с;1;1;1;0;1;0;;0;1;;1 1816;испытание;с;1;1;1;0;1;0;;0;1;;1 diff --git a/rudict/frequent_nouns_2000.xlsx b/rudict/frequent_nouns_2000.xlsx index 2524d0a..ad0a648 100644 Binary files a/rudict/frequent_nouns_2000.xlsx and b/rudict/frequent_nouns_2000.xlsx differ diff --git a/rudict/grammar_case.csv b/rudict/grammar_case.csv index f6ff90c..1d7e739 100644 --- a/rudict/grammar_case.csv +++ b/rudict/grammar_case.csv @@ -77,10 +77,10 @@ SECOND_MALE_IFORM_INANIMATE;NC_SINGULAR;NGC_P1_NOMINATIVE;;бук ;;NGC_P4_ACCUSATIVE;;обвиняю бук ;;NGC_P5_INSTRUMENTAL;ом;говорю с буком ;;NGC_P6_PREPOSITIONAL;е;говорю о буке -;NC_PLURAL;NGC_P1_NOMINATIVE;и;буки +;NC_PLURAL;NGC_P1_NOMINATIVE;и, я;буки ;;NGC_P2_GENITIVE;ов;подарок для буков ;;NGC_P3_DATIVE;ам;подарок букам -;;NGC_P4_ACCUSATIVE;и;обвиняю буки +;;NGC_P4_ACCUSATIVE;и, я;обвиняю буки ;;NGC_P5_INSTRUMENTAL;ами;говорю с буками ;;NGC_P6_PREPOSITIONAL;ах;говорю о буках SECOND_MALE_IFORM_ANIMATE;NC_SINGULAR;NGC_P1_NOMINATIVE;;рыбак @@ -89,7 +89,7 @@ SECOND_MALE_IFORM_ANIMATE;NC_SINGULAR;NGC_P1_NOMINATIVE;;рыбак ;;NGC_P4_ACCUSATIVE;а;обвиняю рыбака ;;NGC_P5_INSTRUMENTAL;ом;говорю с рыбаком ;;NGC_P6_PREPOSITIONAL;е;говорю о рыбаке -;NC_PLURAL;NGC_P1_NOMINATIVE;и;рыбаки +;NC_PLURAL;NGC_P1_NOMINATIVE;и, я;рыбаки ;;NGC_P2_GENITIVE;ов;подарок для рыбаков ;;NGC_P3_DATIVE;ам;подарок рыбакам ;;NGC_P4_ACCUSATIVE;ов;обвиняю рыбаков @@ -101,10 +101,10 @@ SECOND_MALE_UFORM_INANIMATE;NC_SINGULAR;NGC_P1_NOMINATIVE;;зад ;;NGC_P4_ACCUSATIVE;;обвиняю зад ;;NGC_P5_INSTRUMENTAL;ом;говорю с задом ;;NGC_P6_PREPOSITIONAL;е;говорю о заде -;NC_PLURAL;NGC_P1_NOMINATIVE;ы;зады +;NC_PLURAL;NGC_P1_NOMINATIVE;ы, а;зады ;;NGC_P2_GENITIVE;ов;подарок для задов ;;NGC_P3_DATIVE;ам;подарок задам -;;NGC_P4_ACCUSATIVE;ы;обвиняю зады +;;NGC_P4_ACCUSATIVE;ы, а;обвиняю зады ;;NGC_P5_INSTRUMENTAL;ами;говорю с задами ;;NGC_P6_PREPOSITIONAL;ах;говорю о задах SECOND_MALE_UFORM_ANIMATE;NC_SINGULAR;NGC_P1_NOMINATIVE;;кит @@ -113,7 +113,7 @@ SECOND_MALE_UFORM_ANIMATE;NC_SINGULAR;NGC_P1_NOMINATIVE;;кит ;;NGC_P4_ACCUSATIVE;а;обвиняю кита ;;NGC_P5_INSTRUMENTAL;ом;говорю с китом ;;NGC_P6_PREPOSITIONAL;е;говорю о ките -;NC_PLURAL;NGC_P1_NOMINATIVE;ы;киты +;NC_PLURAL;NGC_P1_NOMINATIVE;ы, а;киты ;;NGC_P2_GENITIVE;ов;подарок для китов ;;NGC_P3_DATIVE;ам;подарок китам ;;NGC_P4_ACCUSATIVE;ов;обвиняю китов @@ -125,10 +125,10 @@ SECOND_MALE_SSFORM_INANIMATE;NC_SINGULAR;NGC_P1_NOMINATIVE;ь;тополь ;;NGC_P4_ACCUSATIVE;ь;обвиняю тополь ;;NGC_P5_INSTRUMENTAL;ем;говорю с тополем ;;NGC_P6_PREPOSITIONAL;е;говорю о тополе -;NC_PLURAL;NGC_P1_NOMINATIVE;и;тополи +;NC_PLURAL;NGC_P1_NOMINATIVE;и, я;тополи ;;NGC_P2_GENITIVE;ей;подарок для тополей ;;NGC_P3_DATIVE;ям;подарок тополям -;;NGC_P4_ACCUSATIVE;и;обвиняю тополи +;;NGC_P4_ACCUSATIVE;и, я;обвиняю тополи ;;NGC_P5_INSTRUMENTAL;ями;говорю с тополями ;;NGC_P6_PREPOSITIONAL;ях;говорю о тополях SECOND_MALE_SSFORM_ANIMATE;NC_SINGULAR;NGC_P1_NOMINATIVE;ь;парень @@ -137,7 +137,7 @@ SECOND_MALE_SSFORM_ANIMATE;NC_SINGULAR;NGC_P1_NOMINATIVE;ь;парень ;;NGC_P4_ACCUSATIVE;я;обвиняю парня ;;NGC_P5_INSTRUMENTAL;ем;говорю с парнем ;;NGC_P6_PREPOSITIONAL;е;говорю о парне -;NC_PLURAL;NGC_P1_NOMINATIVE;и;парни +;NC_PLURAL;NGC_P1_NOMINATIVE;и, я;парни ;;NGC_P2_GENITIVE;ей;подарок для парней ;;NGC_P3_DATIVE;ям;подарок парням ;;NGC_P4_ACCUSATIVE;ей;обвиняю парней @@ -149,10 +149,10 @@ SECOND_I_SHORT_INANIMATE;NC_SINGULAR;NGC_P1_NOMINATIVE;й;каравай ;;NGC_P4_ACCUSATIVE;й;обвиняю каравай ;;NGC_P5_INSTRUMENTAL;ем;говорю с караваем ;;NGC_P6_PREPOSITIONAL;е;говорю о каравае -;NC_PLURAL;NGC_P1_NOMINATIVE;и;караваи +;NC_PLURAL;NGC_P1_NOMINATIVE;и, я;караваи ;;NGC_P2_GENITIVE;ев;подарок для караваев ;;NGC_P3_DATIVE;ям;подарок караваям -;;NGC_P4_ACCUSATIVE;и;обвиняю караваи +;;NGC_P4_ACCUSATIVE;и, я;обвиняю караваи ;;NGC_P5_INSTRUMENTAL;ями;говорю с караваями ;;NGC_P6_PREPOSITIONAL;ях;говорю о караваях SECOND_I_SHORT_ANIMATE;NC_SINGULAR;NGC_P1_NOMINATIVE;й;герой @@ -161,7 +161,7 @@ SECOND_I_SHORT_ANIMATE;NC_SINGULAR;NGC_P1_NOMINATIVE;й;герой ;;NGC_P4_ACCUSATIVE;я;обвиняю героя ;;NGC_P5_INSTRUMENTAL;ем;говорю с героем ;;NGC_P6_PREPOSITIONAL;е;говорю о каравае -;NC_PLURAL;NGC_P1_NOMINATIVE;и;герои +;NC_PLURAL;NGC_P1_NOMINATIVE;и, я;герои ;;NGC_P2_GENITIVE;ев;подарок для героев ;;NGC_P3_DATIVE;ям;подарок героям ;;NGC_P4_ACCUSATIVE;ев;обвиняю героев diff --git a/rudict/grammar_case.xlsx b/rudict/grammar_case.xlsx index 9c40441..b4fb238 100644 Binary files a/rudict/grammar_case.xlsx and b/rudict/grammar_case.xlsx differ diff --git a/rudict/rudict/http/request_handler.cpp b/rudict/rudict/http/request_handler.cpp index 930f49f..464d9ab 100644 --- a/rudict/rudict/http/request_handler.cpp +++ b/rudict/rudict/http/request_handler.cpp @@ -144,7 +144,7 @@ namespace http { result.put(L"error", L"String is too short"); } - std::vector nounStructArr = RecognizeNoun(request); + std::set nounStructArr = RecognizeNoun(request); std::cout <<"nounstructarr" << nounStructArr.size() << std::endl; @@ -171,20 +171,6 @@ namespace http { nounTree.put(L"specialMultipleForm", nounStruct.nounRecord.specialMultipleForm); nounTree.put(L"nominativeSingularForm", nounStruct.nounRecord.nominativeForm); - - /* - if (nounStruct.nounRecord.haveMultipleForm) - { - if (nounStruct.nounRecord.specialMultipleForm != L"") - { - nounTree.put(L"nominativeSingularForm", nounStruct.nounRecord.nominativeForm); - } - else - { - nounTree.put(L"nominativeSingularForm", CalculateNounDeclention(nounStruct.nounRecord)); - } - }*/ - nounArr.push_back(std::make_pair(L"", nounTree)); id++; diff --git a/rudict/rudict/noun.cpp b/rudict/rudict/noun.cpp index 1d2a048..ed73771 100644 --- a/rudict/rudict/noun.cpp +++ b/rudict/rudict/noun.cpp @@ -329,6 +329,7 @@ std::wstring convertToStandardPluralForm(std::wstring s) return pluralForm; } + std::wstring convertFromStandardToAlternativePluralForm(std::wstring s) { if (s[s.size() - 1] == L'и') @@ -363,6 +364,7 @@ std::set getPluralForm(NounRecord noun) result.insert(pluralForm); } + if (noun.haveAlternativeMultipleFormEnding) { result.insert(convertFromStandardToAlternativePluralForm(pluralForm)); @@ -390,6 +392,7 @@ std::set getPluralForm(NounRecord noun) result.insert(pluralForm); } + if (noun.haveAlternativeMultipleFormEnding) { result.insert(convertFromStandardToAlternativePluralForm(pluralForm)); @@ -524,7 +527,6 @@ std::set getPossibleNounEndingDivisionSet(std::wstring noun) (charIsConsolant(nounBase[nounBase.size() - 1]) || nounBase[nounBase.size() - 1] == L'ь' || nounBase[nounBase.size() - 1] == L'ъ')) { result.insert({ nounBase, ending, NounEndingDivision::DC_COMMON }); - //result.insert({ nounBase, ending, NounEndingDivision::DC_SPECIAL_PLURAL_FORM }); } //Check missed vowel (simple case) @@ -544,10 +546,11 @@ std::set getPossibleNounEndingDivisionSet(std::wstring noun) } + /* if (ending == L"а" || ending == L"я") { result.insert({ nounBase, ending, NounEndingDivision::DC_SPECIAL_PLURAL_A }); - } + }*/ } } @@ -565,7 +568,7 @@ std::vector GetPossibleNounTupleArr(std::wstring nounEnding) { for (int i = 0; i < NGC_SIZE * NC_SIZE; i++) { - if (noun.grammaticalCaseTable[i].ending == nounEnding) + if (noun.grammaticalCaseTable[i].ending.count(nounEnding) != 0) { result.push_back(NounTuple{ noun.nounDeclencion, noun.grammaticalCaseTable[i].count, noun.grammaticalCaseTable[i].grammaticalCase }); } @@ -573,6 +576,33 @@ std::vector GetPossibleNounTupleArr(std::wstring nounEnding) } + /* + //Xperimental -- additionally check for plural form with a-ending + if (nounEnding == L"а" || nounEnding == L"я") + { + + result.push_back(NounTuple{ SECOND_MALE_IFORM_INANIMATE, NC_PLURAL, NGC_P1_NOMINATIVE }); + result.push_back(NounTuple{ SECOND_MALE_IFORM_INANIMATE, NC_PLURAL, NGC_P4_ACCUSATIVE }); + + result.push_back(NounTuple{ SECOND_MALE_UFORM_INANIMATE, NC_PLURAL, NGC_P1_NOMINATIVE }); + result.push_back(NounTuple{ SECOND_MALE_UFORM_INANIMATE, NC_PLURAL, NGC_P4_ACCUSATIVE }); + + result.push_back(NounTuple{ SECOND_MALE_SSFORM_INANIMATE, NC_PLURAL, NGC_P1_NOMINATIVE }); + result.push_back(NounTuple{ SECOND_MALE_SSFORM_INANIMATE, NC_PLURAL, NGC_P4_ACCUSATIVE }); + + result.push_back(NounTuple{ SECOND_I_SHORT_INANIMATE, NC_PLURAL, NGC_P1_NOMINATIVE }); + result.push_back(NounTuple{ SECOND_I_SHORT_INANIMATE, NC_PLURAL, NGC_P1_NOMINATIVE }); + + + result.push_back(NounTuple{ SECOND_MALE_IFORM_ANIMATE, NC_PLURAL, NGC_P1_NOMINATIVE }); + + result.push_back(NounTuple{ SECOND_MALE_UFORM_ANIMATE, NC_PLURAL, NGC_P1_NOMINATIVE }); + + result.push_back(NounTuple{ SECOND_MALE_SSFORM_ANIMATE, NC_PLURAL, NGC_P1_NOMINATIVE }); + + result.push_back(NounTuple{ SECOND_I_SHORT_ANIMATE, NC_PLURAL, NGC_P1_NOMINATIVE }); + }*/ + return result; } @@ -593,18 +623,46 @@ std::vector FilterNounTupleArrByNounDeclentionSet(std::vector GetNounNoninative(std::wstring nounBase, NounDeclencion nounDeclencion, NounCount nounCount) { + std::set result; + NounDeclencionCaseTableRecord nounDeclencionCaseTableRecord = nounDeclencionCaseTable[static_cast(nounDeclencion)]; for (auto& grammaticalTableRecord : nounDeclencionCaseTableRecord.grammaticalCaseTable) { if (grammaticalTableRecord.grammaticalCase == NGC_P1_NOMINATIVE && grammaticalTableRecord.count == nounCount) { - return nounBase + grammaticalTableRecord.ending; + for (auto& e : grammaticalTableRecord.ending) + { + result.insert(nounBase + e); + } + } } + return result; +} + +std::wstring GetNounNoninativeSpecialPluralA(std::wstring nounBase, NounDeclencion nounDeclencion) +{ + + if (charIsIFormConsolant(nounBase[nounBase.size() - 1])) + { + return nounBase + L"я"; + } + + if (charIsUFormConsolant(nounBase[nounBase.size() - 1])) + { + return nounBase + L"а"; + } + + if (charIsVowel(nounBase[nounBase.size() - 1])) + { + return nounBase + L"я"; + } + std::cout << "Error in GetNounNoninative" << std::endl; return L""; @@ -1025,7 +1083,6 @@ bool LostVowelETest(NounTuple nounTuple, NounRecord nounRecord) std::map> DivisionCaseNounModificatorMap; std::map> DivisionCaseEndingModificatorMap; - std::map < NounEndingDivision::DivisionCase, std::function < bool(NounTuple) >> DivisionCaseNounTupleFilterMap; std::map < NounEndingDivision::DivisionCase, std::function < bool(NounTuple, NounRecord) >> DivisionCaseNounTupleRecordFilterMap; @@ -1052,18 +1109,11 @@ void FillDivisionCaseMaps() } }; - DivisionCaseNounModificatorMap[NounEndingDivision::DC_SPECIAL_PLURAL_A] = DivisionCaseNounModificatorMap[NounEndingDivision::DC_COMMON]; - + DivisionCaseEndingModificatorMap[NounEndingDivision::DC_COMMON] = [](std::wstring s){ return s; }; DivisionCaseEndingModificatorMap[NounEndingDivision::DC_LOST_VOWEL_O] = DivisionCaseEndingModificatorMap[NounEndingDivision::DC_COMMON]; DivisionCaseEndingModificatorMap[NounEndingDivision::DC_LOST_VOWEL_E] = DivisionCaseEndingModificatorMap[NounEndingDivision::DC_COMMON]; - DivisionCaseEndingModificatorMap[NounEndingDivision::DC_SPECIAL_PLURAL_A] = [](std::wstring s) - { - if (s == L"а") return L"ы"; - if (s == L"я") return L"и"; - std::cout << "Error in DivisionCaseEndingModificatorMap[NounEndingDivision::DC_SPECIAL_PLURAL_A]" << std::endl; - return L""; - }; + DivisionCaseNounTupleFilterMap[NounEndingDivision::DC_COMMON] = [](NounTuple t) { return true; }; @@ -1078,12 +1128,6 @@ void FillDivisionCaseMaps() DivisionCaseNounTupleFilterMap[NounEndingDivision::DC_LOST_VOWEL_E] = DivisionCaseNounTupleFilterMap[NounEndingDivision::DC_LOST_VOWEL_O]; - DivisionCaseNounTupleFilterMap[NounEndingDivision::DC_SPECIAL_PLURAL_A] = [](NounTuple t) - { - return (std::get<1>(t) == NC_PLURAL) && - ( (std::get<2>(t) == NGC_P1_NOMINATIVE) || - ((std::get<2>(t) == NGC_P4_ACCUSATIVE && !IsDeclencionAnimated(std::get<0>(t))))); - }; DivisionCaseNounTupleRecordFilterMap[NounEndingDivision::DC_COMMON] = [](NounTuple t, NounRecord r) @@ -1101,20 +1145,16 @@ void FillDivisionCaseMaps() return LostVowelETest(t, r) && StandardTest(t, r); }; - DivisionCaseNounTupleRecordFilterMap[NounEndingDivision::DC_SPECIAL_PLURAL_A] = [](NounTuple t, NounRecord r) - { - return r.haveAlternativeMultipleFormEnding && StandardTest(t, r); - }; } -std::vector RecognizeNoun(std::wstring noun) +std::set RecognizeNoun(std::wstring noun) { - std::vector result; + std::set result; auto nounEndingDivisionArr = getPossibleNounEndingDivisionSet(noun); @@ -1139,32 +1179,42 @@ std::vector RecognizeNoun(std::wstring noun) if (std::get<1>(nounTuple) == NC_SINGULAR) { - std::wstring nounNominaviteSingular = GetNounNoninative(modifiedNounBase, std::get<0>(nounTuple), NC_SINGULAR); + std::set nounNominaviteSingularSet = GetNounNoninative(modifiedNounBase, std::get<0>(nounTuple), NC_SINGULAR); - if (NounIsInDictionary(nounNominaviteSingular)) + for (auto& nn : nounNominaviteSingularSet) { - NounRecord nounRecord = GetNounRecordFromDictionary(nounNominaviteSingular); - - if (DivisionCaseNounTupleRecordFilterMap[dc](nounTuple, nounRecord)) + if (NounIsInDictionary(nn)) { - result.push_back({ std::get<2>(nounTuple), std::get<1>(nounTuple), IsDeclencionAnimated(std::get<0>(nounTuple)), nounRecord }); - } - } + NounRecord nounRecord = GetNounRecordFromDictionary(nn); + + if (DivisionCaseNounTupleRecordFilterMap[dc](nounTuple, nounRecord)) + { + result.insert({ std::get<2>(nounTuple), std::get<1>(nounTuple), IsDeclencionAnimated(std::get<0>(nounTuple)), nounRecord }); + } + } + + } } else { - std::wstring nounNominavitePlural = GetNounNoninative(nounBase, std::get<0>(nounTuple), NC_PLURAL); + std::set nounNominavitePluralSet = GetNounNoninative(nounBase, std::get<0>(nounTuple), NC_PLURAL); - if (NounPluralFormIsInDictionary(nounNominavitePlural)) + //Check all plural forms + + for (auto& nn : nounNominavitePluralSet) { - NounRecord nounRecord = GetNounRecordFromDictionary_ByPluralForm(nounNominavitePlural); - if (DivisionCaseNounTupleRecordFilterMap[dc](nounTuple, nounRecord)) + if (NounPluralFormIsInDictionary(nn)) { - result.push_back({ std::get<2>(nounTuple), std::get<1>(nounTuple), IsDeclencionAnimated(std::get<0>(nounTuple)), nounRecord }); + NounRecord nounRecord = GetNounRecordFromDictionary_ByPluralForm(nn); + + if (DivisionCaseNounTupleRecordFilterMap[dc](nounTuple, nounRecord)) + { + result.insert({ std::get<2>(nounTuple), std::get<1>(nounTuple), IsDeclencionAnimated(std::get<0>(nounTuple)), nounRecord }); + } } } } @@ -1260,10 +1310,15 @@ void LoadNounDeclencionCaseTable() currentNounCount = string_to_wstring(lineArr[1]); } + std::wstring endings = string_to_wstring(lineArr[3]); + + std::set endingsSet; + boost::split_regex(endingsSet, endings, boost::regex(", ")); + currentGrammaticalCaseTable.push_back({ WStringToNounCount(currentNounCount), WStringToNounGrammaticalCase(string_to_wstring(lineArr[2])), - string_to_wstring(lineArr[3]) + endingsSet }); } diff --git a/rudict/rudict/noun.h b/rudict/rudict/noun.h index a8ff107..2f58fc6 100644 --- a/rudict/rudict/noun.h +++ b/rudict/rudict/noun.h @@ -39,6 +39,11 @@ struct NounRecord NounRecord(); NounRecord(std::wstring line); + + bool operator<(const NounRecord& n) const + { + return nominativeForm < n.nominativeForm; + } }; enum NounDeclencion @@ -87,7 +92,7 @@ struct GrammaticalTableRecord NounGrammaticalCase grammaticalCase; - std::wstring ending; + std::set ending; }; struct NounDeclencionCaseTableRecord @@ -129,8 +134,7 @@ struct NounEndingDivision { DC_COMMON = 0, DC_LOST_VOWEL_O, - DC_LOST_VOWEL_E, - DC_SPECIAL_PLURAL_A + DC_LOST_VOWEL_E } divisionCase; bool operator<(const NounEndingDivision& other) const @@ -178,6 +182,32 @@ struct NounStruct NounCount nounCount; bool animated; NounRecord nounRecord; + + bool operator<(const NounStruct& other) const + { + if (nounGrammaticalCase != other.nounGrammaticalCase) + { + return nounGrammaticalCase < other.nounGrammaticalCase; + } + else + { + if (nounCount != other.nounCount) + { + return nounCount < other.nounCount; + } + else + { + if (animated != other.animated) + { + return animated < other.animated; + } + else + { + return nounRecord < other.nounRecord; + } + } + } + } }; @@ -185,7 +215,8 @@ std::set getPossibleNounEndingDivisionSet(std::wstring noun) std::vector GetPossibleNounTupleArr(std::wstring nounEnding); -std::wstring GetNounNoninative(std::wstring nounBase, NounDeclencion nounDeclencion, NounCount nounCount); +std::set GetNounNoninative(std::wstring nounBase, NounDeclencion nounDeclencion, NounCount nounCount); +std::wstring GetNounNoninativeSpecialPluralA(std::wstring nounBase, NounDeclencion nounDeclencion); wchar_t GetLastChar(const NounRecord& nounRecord); wchar_t GetPrevLastChar(const NounRecord& nounRecord); @@ -202,7 +233,7 @@ bool IsDeclencionAnimated(NounDeclencion nounDeclention); void FillDivisionCaseMaps(); -std::vector RecognizeNoun(std::wstring noun); +std::set RecognizeNoun(std::wstring noun); NounDeclencion CalculateNounDeclention(NounRecord nounRecord);