Как склонять существительные после числительных. Составные и сложные количественные числительные

Суть задачи: написать функцию, на входе у которой число и существительное, на выходе сгенерированное числительное и существительное в правильном склонении.
Такая задача очень часто возникает например в финансовой сфере, так как на документах принято писать сумму помимо цифрой — ещё и прописью.

Алгоритм склонения множественно числа очень прост. Всего существует только три варианта для любого числа. Возьмём слово доллар, тогда
Вариант 1: именительный падеж, например один доллар, тридцать один доллар, много-много-один доллар. т.е. когда число оканчивается на 1
Вариант 2: Родительный падеж, например два доллара, тридцать три доллара, много-много-четыре доллара. т.е. когда число оканчивается на 2, 3 и 4
Вариант 3: Множественная форма, Родительный падеж. например пять долларово, много-много-восемь долларов. т.е. когда число оканчивается на 5, 6, 7, 8, 9, 0
Случай с нулём лучше рассмотреть отдельно в силу различных требований от того что вы действительно хотите получить.

Внимание! Для чисел оканчивающихся на 11, 12, 13, 14 есть особенность. Поэтому
основной алгоритм выбора формы существительного после числительного будет таким:
Шаг 1: Если число оканчивается на 1, но не оканчивается на 11, то вариант 1 (Именительный падеж)
Шаг 2: Если число оканчивается на 2, 3, 4, и не оканчивается на 12, 13, 14, то вариант 2 (Родительный падеж)
Шаг 3: Всё остальное — вариант 3 (Множественный родительный падеж)

Теперь вернемся к нашей изначальной задаче, ведь на входе у нас есть только одно существительное. Значит надо уметь его поставить в одну из этих форм. Воспользуемся библиотекой на python — pymorphy2:

Import pymorphy2 morph = pymorphy2.MorphAnalyzer() word = morph.parse("доллар") v1, v2, v3 = word.inflect({"sing", "nomn"}), word.inflect({"gent"}), word.inflect({"plur", "gent"}) print(v1.word, v2.word, v3.word) # доллар доллара долларов

Если кто знаком с библиотекой pymorphy2, то возможно знают, что можно напрямую воспользоваться методом make_agree_with_number . Это действительно так, и не надо воротить лишний код, но есть одно Но — библиотека не умеет генерировать сами числительные, а лишь согласовывать, ставя в нужную форму
существительное. Чтобы именно генерировать — воспользуемся библиотекой, найденной мной на github — https://github.com/seriyps/ru_number_to_text/blob/master/num2t4ru/__init__.py (). Отмечу, что библиотека делает даже чуть больше чем генерация целых числительных, также возможна генерация дробных числительных. И так, создадим финальную функцию, с импортом указанной библиотеки

From num2t4ru import num2text import pymorphy2 def get_number_and_noun(numeral, noun): morph = pymorphy2.MorphAnalyzer() word = morph.parse(noun) v1, v2, v3 = word.inflect({"sing", "nomn"}), word.inflect({"gent"}), word.inflect({"plur", "gent"}) return num2text(num=numeral, main_units=((v1.word, v2.word, v3.word), "m")) result = get_number_and_noun(123452, "доллар") print(result) # сто двадцать три тысячи четыреста пятьдесят два доллара

В качестве практического применения сгенерированных числительных — представьте что вам , в каждый из которых требуется подставить полученные числа. Причем сгенерированные числа с согласуемым существительным можно в дальнейшем просклонять с помощью pymorphy2. (в текущем примере числительные в именительном падеже)

Морфологические нормы употребления и образования имён числительных - это правила, необходимые для построения правильно литературной речи, что необходимо не только для письменного или официального общения, но и для неформального устного общения. Именно поэтому в программу ЕГЭ по русскому входят задания на употребление и образование форм числительных. Трудности при этом могут вызывать изменения и склонения числительных по падежам , а также совместимость их с существительными.

Составные порядковые числительные.

Составные порядковые числительные - это числительные, которые обозначают порядок существительных, и состоят из нескольких слов: двадцать первый год от роду, сорок пятый дом. При склонении составных порядковых числительных изменяется их последняя часть, которая при склонении получает формы, совпадающие с формой полных прилагательных: первый, первого, первому и т.д.

Остальная часть составного порядкового существительного остается неизменной при всех типах склонений, и какие-либо её изменения считаются морфологической ошибкой: двадцать первые лунные сутки - на двадцать первых лунных сутках.

Составные и сложные количественные числительные.

По правилам русского языка каждая часть и каждое слово, из которого состоит составное и сложное числительное , склоняется по отдельности: расплатиться двадцатью пятью рублями. Основная часть числительных склоняется по третьему склонению, но, как мы знаем, почти из каждого правила русского языка есть исключения:

  • В соответствии с морфологическими нормами современного русского языка , числительное «тысяча» склоняется не по третьему, а по первому склонению: расплатиться тысячей рублей . Тем не менее, очень типичной является ошибка, когда это числительное, как и все остальные, склоняют по третьему склонению - тысячью .
  • Имена числительные «сто» и «сорок» в косвенных падежах имеют только по одной форме: ста и сорока . Но когда «сто» входит в состав сложных числительных, оно склоняется по архаичному типу: с пятьюстами, о двухстах.
  • Когда составные числительные употребляются вместе с одушевленными существительными, то склоняется только существительное, а имя числительное не изменяется: наловил двадцать пять бабочек, пасти сорок три овцы одновременно .

Правила склонения и употребления собирательных числительных.

Есть несколько случаев, в которых употребляются собирательные существительные :

  1. С существительными люди, дети и названиями детёнышей животных: семеро козлят, двое котят, пятеро детей.
  2. С существительными, означающими название лиц мужского пола: четверо братьев, трое друзей.
  3. С существительными, которые употребляются только в форме множественного числа (парные или составные предметы): трое ворот, пятеро суток, семеро саней.
  4. С существительными, которые называют лиц и имеют субстантивированный тип: в комнату вошли трое, сегодня по классу двое дежурных.
  5. С личными местоимениями: нас будет трое, их придет пятеро.
  6. Правильными будут следующие словосочетания: трое учеников и три ученика . Но ни в коем случае нельзя сказать: трое учениц , хотя эта ошибка тоже часто встречается в просторечии.

Дробные числительные.

Здесь только одно правило без всяких исключений - при склонении дробного имёни числительного изменяются все его части. Числитель дроби склоняется, как отдельное целое число, а знаменатель приобретает соответствующую форму прилагательного во множественном числе (как прилагательное в единственном числе, склоняется знаменатель дроби, где числителем является единица ): около двух третьих , приближается к четырём седьмым .

Числительное " полтора", "оба", "полтораста".

  • Имя числительное «полтора» имеет две родовые формы (и мужскую, и женскую), которые употребляются в зависимости от рода существительного: полторы тысячи, полтора десятка яиц. В непрямых падежах это числительное также имеет форму «полутора»: около полутора тысяч долларов.
  • Такая же ситуация наблюдается с числительным «оба»: оба пальца, обе страны.
  • Как и числительное «полтора», «полтораста» также имеет особую форму в косвенных падежах: около полутораста гвардейцев.

Особенности склонения словосочетаний с числительным.

  • При использовании словосочетания «числительное + существительное» числительное в именительном падеже управляет родительным падежом существительного: страной управляли триста спартанцев .
  • При образовании косвенных падежей главным в словосочетании становится уже существительное, а числительное: убить двух зайцев.
  • Числительные «десяток», «сотня», «тысяча», «миллион», «миллиард » и т.д. всегда сохраняют управление существительным в родительном падеже: десяток яиц, о миллионе рублей.

Существительное, не имеющее единственного числа.

Когда существительное не имеет формы единственного числа (ножницы, сутки и др.), часто сложно образовать форму числительного , более 20, которое бы правильно согласовалось с таким числительным: сорок трое суток? сорок три суток? Как сказать правильно? Правильным будет вариант: сорок три дня. С такими существительными сочетаются только числительные, оканчивающиеся на единицу или пятерку: двадцать одни сутки. Для того, чтобы обозначить количество других собирательных существительных (например, ножниц, трусов, глаз), можно употребить слово «штука» или «пара» : сорок восемь пар глаз, двадцать две пары трусов, семь штук ножниц.

Употребление числа существительных при именах числительных.

  • Если числительное обозначает количество до пяти, то существительное употребляется в единственном числе: три котла, одного гвоздя. Когда количество, которое обозначает числительное, равняется или превышает пять, то существительное уже употребляется во множественном числе: пять этажей, восемь деревьев.
  • Числительные «полтора» и «полтораста» требует в именительном и винительном падеже существительного в единственном числе, а в остальных падежах - во множественном числе: полтора десятка - полутора десятков.

Особенности употребления обозначения дат.

Здесь действует только одно правило - числительное всегда управляет родительным падежом имени существительного: к двадцатому марта (не марту), тринадцатым июля (не июлем).

Встречающееся в просторечии количественное числительное полста (пятьдесят) не склоняется. Оригинальная форма числительного полтора (с необычным ударением) употребляется со словом «сутки» -- по?лтора суток. Например: От Тюмени до Москвы можно доехать на поезде за по?лтора суток.

Грамматически сочетание полтора суток не совсем правильно: в именительном падеже количественное числительное полтора управляет существительным в единственном числе (полтора метра, полтора часа). Но в литературном языке выражение полтора суток (но не полторы соток) существует.

Т. к. слово сутки не имеет формы единственного числа, то заданный смысл рекомендуется выражать описательно, например: в течение полутора суток, полтора дня (если точное значение слова сутки не принципиально). С существительными, не имеющими формы единственного числа, следует употреблять слово полутора: Не прошло и полутора суток. Время ожидания приближается уже к полутора суткам. Все ограничилось полутора сутками. Стоит ли так много говорить об этих полутора сутках? Кстати, полтора -- это сращение слов полъ и вътора -- «полвтора», «половина второго». После выпадения редуцированных согласных лвт упростилось до лт Земская Е.А. Словообразование как деятельность. - М., 1992., с. 182..

Кстати, слово «сутки» в именительном падеже не сочетается с некоторыми числительными, например, с такими, как 22, 23, 34 ... 183 и т.д. В этом случае целесообразно использовать другой падеж (в течение двадцати трех суток) или заменить слово сутк» на день.

При соединении составного числительного, оканчивающегося на «два», «три», «четыре», с существительными, имеющими только формы множественного числа (сутки, сани, ножницы) возникает синтаксическая несочетаемость: нельзя сказать ни «двадцать два суток», ни «двадцать две сутки», ни «двадцать двое суток». В подобных случаях можно лишь заменить либо слово, либо грамматический строй предложения: двадцать два дня, в течение двадцати двух суток, двадцать две штуки ножниц и т. п.

Числительные два, три, четыре (а также составные числительные, оканчивающиеся на два, три, четыре, например, двадцать два) в именительном падеже сочетаются с существительными в форме родительного падежа и единственного числа, например: двадцать два стола, тридцать три несчастья, пятьдесят четыре человека. Числительные пять, шесть, семь, восемь, девять и т. д. и составные числительные, оканчивающиеся на пять, шесть, семь, восемь и т. д., согласуются с существительным, стоящим в форме родительного падежа множественного числа, например: сорок восемь преступников. Однако в косвенных падежах согласование выравнивается: родит. п. -- двух столов, пяти столов, дательн. п. -- двум столам, пяти столам.

В некоторых случаях для обозначения количества используются, наряду с количественными числительными, также числительные собирательные (двое, трое, четверо, пятеро, шестеро, семеро, восьмеро, девятеро). Двумя последними числительными мы практически не пользуемся. Собирательные числительные используются ограниченно, а именно:

  • - с существительными мужского и общего рода, называющими лиц мужского пола: двое друзей, трое сирот;
  • - с существительными, имеющими формы только множественного числа: двое ножниц, трое суток;
  • - с существительными дети, ребята, люди, лицо (в значении «человек»): двое детей, трое незнакомых лиц;
  • - с личными местоимениями мы, вы, они: нас двое;
  • - с субстантивированными числительными и прилагательными, обозначающими лиц: вошли двое, трое больных.

В косвенных падежах при неодушевленных существительных употребляются количественные числительные: более трех суток. Собирательные числительные с существительными, обозначающими лиц мужского пола, иногда вносят сниженный оттенок (нежелательно: двое генералов, трое профессоров).

Собирательные числительные не сочетаются с именами существительными, обозначающими лиц женского пола (нельзя сказать: трое студенток, четверо подруг). Не сочетаются они также с существительными мужского рода, обозначающими название животных (нельзя сказать: трое волков).

При употреблении собирательного числительного оба -- обе в сочетаниях с существительными женского рода используются формы обеих, обеими, обеим и т. д. Эти числительные не употребляются с существительными, не имеющими формы единственного числа, так как у них отсутствует категория рода. Нельзя сказать у обоих ворот (нет формы именительного падежа: оба -- обе ворота), можно: у тех и других ворот.

Слово «клиенты» в предложении: «Фирма «Красота», обладающая 40 000 замечательных клиентов, выходит на международный рынок» можно употреблять только в родительном падеже: «Обладающая сорока тысячами (кого?) клиентов (но не клиентами). Падежом существительного в данном предложении управляет числительное.

Говоря о количественно-неопределенных числительных, следует учитывать, что в русском языке функционирует только числительное «оба» и его падежные формы: обоих, обоим, об обоих. Числительного «обое» в русском языке нет.

Согласование количественных числительных с существительными предполагает следующие правила:

В составном количественном числительном склоняются все образующие его части, причем каждая из этих частей должна быть поставлена в соответствующем падеже; это правило обязательно для литературного языка, в особенности для книжно-письменной его формы: пароход с пятьюстами восьмьюдесятью четырьмя пассажирами. Варианты типа «пятистами восьмидесяти четырьмя» или «пятьсот восемьдесят четырьмя» не нормативны и оцениваются как просторечные См. Головин Б.Н., Основы культуры речи, М., 1988 г, с. 65..

Часто в профессиональной деятельности мы сталкиваемся с необходимостью произнести дробное числительное в сочетании с существительным. На письме проблем нет: 45,7%; 3,35 руб.; 125,4 га, но в устной речи возникает путаница. Правило употребления дробных числительных не из особо сложных: существительное после таких числительных ставится в единственном числе (сорок пять целых и семь десятых процентА, три целых тридцать пять сотых рублЯ, сто двадцать пять целых четыре десятых гектарА).

Гораздо сложней оказывается склонять составные количественные числительные, например: 456789. Прежде всего, надо помнить простое правило: при склонении таких числительных следует изменять каждую часть, например: в четырехстах пятидесяти шести тысячах семистах восьмидесяти девяти случаях. Вряд ли нам придется часто использовать в устной речи такие числительные, но ошибки возникают и при употреблении более простых форм.

Серьезной проблемой современной речевой практики стало и то, что в настоящее время уже не приходится, как раньше, ориентироваться на речь дикторов радио и телевидения как на норму.

Речевые ошибки для многих программ и телеканалов стали почти нормой, причем их совершают не только участники передач, которым это в некоторой степени простительно, но и сами журналисты -- это уже профессиональный брак.

Речевой ошибкой является любое отступление от современной языковой нормы. Под языковой нормой понимается общепринятое и формализованное (в словарях и учебниках русского языка) употребление слов, словообразований и синтаксических конструкций. Граудина Л.К., Ицкович В.И., Катлинская Л.П., Грамматическая правильность русской речи, М., 2001 г., с. 39.

Чрезвычайно распространенная в разговорной речи ошибка, перенесена сейчас и в эфир: слово пара применимо лишь к тем предметам, которые существуют в парном виде: пара глаз, пара ног, пара ботинок, но ни в коем случае не пара лет, пара домов и пр.

Морфолого-стилистические ошибки являются следствием нарушений правил образования различных форм слова. Особенно часто встречаются такие ошибки при употреблении имен числительных.

Объясняется этот грустный факт достаточно просто: незнанием особенностей склонения имен числительных.

Как уже говорилось, в составном количественном числительном изменяется каждое слово.

Пример склонения количественного числительного 3892 человека:

Имен. -- Три тысячи восемьсот девяносто два человека.

Родит. -- Три тысячи восьмисот девяноста двух человек.

Дат. -- Трем тысячам восьмистам девяноста двум людям.

Вин. -- Три тысячи восемьсот девяносто два человека.

Твор. -- Тремя тысячами восьмьюстами девяноста двумя людьми.

Предл. -- (о) Трех тысячах восьмистах девяноста двух людях. При склонении дробных числительных изменяются обе части: Имен. -- Три пятых.

Родит. -- Трех пятых.

Дат. -- Трем пятым.

Винит. -- Три пятых.

Твор. -- Тремя пятыми.

Предл. -- (о) Трех пятых.

При смешанном числе (целое и дробь) существительным управляет дробь, а не целое число. При употреблении слов с половиной, с четвертью, с третью, существительным управляет целое число. Десять и пять десятых процента (существительное процент употребляется в единственном числе). Десять с половиной процентов (существительное ставится во множественном числе).

Особенности в склонении имеют слова полтора, полторы, полтораста, относящиеся к дробным числительным. При склонении они имеют формы только двух падежей.

Имен. -- Полтора метра, полторы тонны.

Родит. -- Полутора метров, полутора тонн.

Дат. -- Полутора метрам, полутора тоннам.

Винит. -- Полтора метра, полторы тонны.

Твор. -- Полутора метрами, полутора тоннами.

Предл. -- (о) Полутора метрах, (о) полутора тоннах.

В то же время включение цифры в словесный текст часто приводит к очевидным ошибкам, которые не всегда можно объяснить невниманием, небрежностью или незнанием школьной грамматики. Корни многих наших затруднений лежат значительно глубже. Их следует искать в формировании языкового сознания, в особенностях восприятия текста, в истории языка, в истории нашей письменности.

Казалось бы, выбор между словом и цифрой при обозначении числового значения не должен представлять особой сложности, тем более что выбор этот оговорен правилами, принятыми издательской практикой. В них просматриваются традиционные для русской письменности представления о том, как следует изображать количество на письме.

Числа в пределах первого десятка, легко осознаваемые предметно, рекомендуется изображать словом. Словесная форма используется также для всех количественных значений в текстах художественной и близкой к ней литературы, где точность передачи количества не играет, как правило, решающей роли.

В случаях, когда важно сообщить точное числовое значение в литературе научной и технической, предпочтение отдается цифре. Однако жанровое и стилистическое своеобразие журналистских публикаций, активные поиски выразительной формы представления в тексте фактического материала часто создают предпосылки для отхода от общепринятых рекомендаций и делают выбор между словом и цифрой практически важной задачей.

Цифра, включенная в словесный текст, прерывая ряд слов, всегда останавливает на себе внимание. Цифра «бросается в глаза» зачастую еще до прочтения всей фразы. На первый план выступает не содержательная информация, а выразительная сторона количественной характеристики явления. Не случайно цифры так часто включают в заголовочные элементы публикаций - собственно заголовки, начальные фразы, выделенные шрифтом, лид.

«Оптический эффект» цифры хорошо известен составителям рекламных текстов. Специальные исследования позволили им, например, выработать рекомендации по назначению предельных цен. В пределах от 1 до 9,99 рекомендуют обозначение цен цифрами, оканчивающимися только на 5 и 9. В пределах от 10 до 99,99 рекомендуется круглая цифра или оканчивающаяся на 50 Пирогова Ю.К., Рекламный текст. Семиотика и лингвистика, М., 2001 г., с. 124..

Включенная в словесный текст, цифра подчиняется законам, на основе которых формируется целостность словесного текста. «Увидев цифру в тексте, мы всегда мысленно произносим ее в именительном падеже и лишь при дальнейшем продвижении по тексту понимаем, что падеж надо изменить. Приходится останавливаться, возвращаться к началу фразы - процесс восприятия замедляется и усложняется, тем более что склонение многозначных числительных - камень преткновения для многих, даже для опытных дикторов» Там же, с. 125.

Несмотря на то, что в устной речи существует явная тенденция к упрощению склонения числительных, правила письменной речи пока остаются неизменными. Практическая рекомендация в этом случае очевидна: надо так построить фразу, чтобы числовое значение входило в нее в именительном падеже.

До недавнего времени самым большим числом, которое встречалось в газетных публикациях, был миллиард. Сейчас мы свободно оперируем числом триллион. Будут ли в ближайшее время освоены языком газеты следующие числовые разряды - квадриллион, септиллион и другие, сказать трудно.

Однако очевидно, что цифры с пятнадцатью и более нулями трудно прочитать и тем более трудно осознать. Их цифровая запись может служить лишь привлечению внимания, значение же нуждается в специальной расшифровке.

Примеры, взятые нами из журнальной подборки, представляются убедительными: «29 700 000 000 000 рублей, или 24,4 процента всех денежных средств россиян, было затрачено ими на покупку иностранной валюты в минувшем январе». «17 000 000 000 000 рублей - именно столько, по словам вице-премьера, рассчитывало получить государство в виде акцизов...» См. Панорама, № 1, 2004 г., с. 124, № 2, 2004 г., с. 99-100..

Итак вот сам код:

Function smart_ending($number, $forms, $base = "") { $rest = $number % 10; $number = (int) substr($number, -2, 2); if ($rest == 1 && $number != 11) return $base.$forms; elseif (in_array($rest, array(2, 3, 4)) && !in_array($number, array(12, 13, 14))) return $base.$forms; else return $base.$forms; }

Функция принимает на вход от 2 до 3 параметров. Первый параметр ($number) - это число, собственно, само числительное. Второй параметр ($forms) это массив форм существительного. Третий параметр ($base) - неизменяющаяся основа слова, его можно указывать для сокращения записи, если в этом есть необходимость.

Например, результат работы функции в обоих случаях будет идентичен:

Echo smart_ending(17, array("пользователь", "пользователя", "пользователей")); //пользователей echo smart_ending(17, array("ь", "я", "ей"), "пользовател"); //пользователей

Также иногда может быть, что при склонении существительное полностью меняет свою форму. В таких случаях возможен только один вариант вызова функции - без параметра $base .

Echo smart_ending(21, array("день", "дня", "дней")); //день

Как это работает?

Существует три варианта склонения:

  1. Если остаток от деления числительного на 10 равен 1.

    Например это числа: 1, 21, 31 и т.д. Форма существительного для них будет одинакова: «1 день», «21 билет».

    Но, исключение составляет число 11 и заканчивающиеся на 11 числа 111, 211 и т.д. Остаток от деления таких чисел на 10 тоже равен 1, но использовать ту же форму существительного нельзя: « 11 день ».

    Поэтому в функции этот момент должен учитываться.

  2. Если остаток от деления числительного на 10 равен 2, 3 или 4.

    Например это числа: 2, 23, 34 и т.д. Форма существительного для них будет тоже одинакова: «22 дня», «4 билета».

    Но, опять не обошлось без исключений. Числа 12, 13, 14 и заканчивающиеся на эти цифры числа 114, 212 и т.д. Как и в предыдущем случае, остаток от деления таких чисел на 10 удовлетворяет условию, но форма существительного будет неверна: « 14 дня ».

    Этот момент тоже должен учитываться в функции.

  3. Все остальные остатки от деления числительного на 10, а также исключения из предыдущих двух вариантов - используют третью форму существительного. Примеры: «12 дней», «18 билетов», «111 часов».

Все эти условия отражены в функции smart_ending , обеспечивая тем самым корректность её работы.

Вот такая простая и, надеюсь, удобная функция получилась.