Пользовательская функция для MS Excel

Склонение ФИО по падежам

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

Область применения:

Функцию удобно использовать для автоматизации формирования документов в MS Excel (или облегчения создания их вручную), где ФИО необходимо указывать не в именительном падеже: различного рода договоры, кассовые ордера, квитанции, акты сверок, приказы, протоколы, доверенности и т.д.

Функция также незаменима, если средствами автоматизации реализовано формирование перечисленных выше документов в приложении MS Word на основании данных, находящихся в таблицах MS Excel.

Примеры использования:

  • в договоре: "в лице руководителя Баранова Петра Вячеславовича "
  • в кассовых ордерах: "выдано Гнатюку Павлу Васильевичу ", "получено от Гриценко Ирины Сергеевны "
  • в доверенности: "доверяю управление траспортным средством Смирницкому Виталию Валерьевичу "
  • в приказе: "назначить на должность Степашову Ольгу Николаевну "
  • в протоколе: "доклад подготовлен Дворжецким Никитой Ивановичем "

Что реализовано:

  • корректно склоняются фамилии со всеми распространенными на территории стран СНГ окончаниями "-ов", "-ев", "-ин", "-ян(ц)", "-ский(-цкий)", "-ской(-цкой)", "-ый", "-ых", "-их", "-ец", "-нко", "-ук", "-юк", "-ич", "-ия" и др.: Павлов, Зиновьев, Гагарин, Петросян, Высоцкий, Трубецкой, Цой, Задорожный, Садовничий, Седых, Долгих, Сосковец, Нестеренко, Гончарук, Данилюк, Рабинович, Данелия, Кваша, Врубель, Козак, Казачок и т.д., а также соответствующие женские фамилии
  • учитываются отличия в склонении мужских и женских фамилий: Ткачу Виктору и Ткач Светлане, Козовцу Антону и Козовец Екатерине
  • корректно обрабатываются составные фамилии: например, Мамин-Сибиряк, Салтыков-Щедрин, Немирович-Данченко, Лебедев-Кумач
  • не склоняются иноязычные фамилии: Галуа, Моруа, Дефо, Дали, Безе, Верди, Гарсиа, Хэмингуэй и пр.
  • успешно обрабатываются отчества с частицами "-оглы", "-кызы", "ибн": Мамедов Полад Муртуза оглы -> Мамедовым Поладом Муртуза оглы, Гассан Абдурахман ибн Хаттаб -> Гассаном Абдурахманом ибн Хаттабом, Абу Али ибн Сина -> Абу Али ибн Синой
  • автоматически по отчеству определяется пол (мужской/женский) и исходя из этого выбираются соответствующие правила склонения
  • для ситуаций, когда пол автоматически определить затруднительно (отчество иностранное или отсутствует), можно указать пол в качестве параметра функции
  • возможен вывод в сокращенном виде "фамилия + инициалы": Полозову Н. А., Васильевой А. К., Дворжецкому Е. Е.
  • возможность использования как в виде надстройки (можно использовать во всех файлах на данном рабочем месте), так и в виде кода, внедренного в файл (функция будет работать в данном файле на любом рабочем месте - удобно, если файл, например, отправляется контрагенту)
  • открытый программный код - при желании можно изучать алгоритм либо модифицировать

Как подключить?

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

Все, программный код импортирован и его можно использовать.

Как использовать?



Вот еще несколько примеров ее использования:

Ситуации, когда работа функции может быть некорректной :

Несмотря на то, что ситуаций, когда работа функции может быть неудовлетворительной, ниже перечислено немало, вероятность столкновения с таким ФИО в практической работе достаточно мала, т.к. в 99,9% случаев фамилии, встречающиеся на территории России, склоняются по общим правилам.
Кроме того, следует заметить, что другие алгоритмы и программы также не могут гарантировать корректность результата в 100% случаев - русский язык слишком велик и могуч, чтобы быть описанным набором логических правил (смотрите ниже про влияние положения ударения в слове, происхождения фамилии, про зависимость написания женской формы фамилии от написания мужской формы и т.д.).

  • По правилам русского языка склонение мужских и женских иноязычных фамилий, оканчивающихся на "-а" и "-я", зависит от места ударения в слове и происхождения фамилии.
    Все фамилии, кончающиеся на неударное "-а" после согласных, склоняются: Сенека -> Сенеки, Петрарка -> Петрарки, Сметана -> Сметаны, Куросава -> Куросавы, Глинка -> Глинки, Окуджава -> Окуджавы и др. Склонение фамилий с ударным "-а" на конце зависит от ее происхождения: не склоняются фамилии французского происхождения: Дюмá, Дегá, Фермá, Петипá и т.д., фамилии иного происхождения (из славянских и восточных языков) склоняются: Митта -> Митты, Кваша -> Кваши, Сковорода -> Сковороды, Кочерга -> Кочерги, Хамза -> Хамзы и др.
    Аналогично, французские по происхождению фамилии с ударным "-я" на конце несклоняемы: Золя, Труайя . Все прочие фамилии на "-я" склоняемы: Головня -> Головни, Данелия -> Данилии, Берия -> Берии, Гойя -> Гойи .
    Поскольку программно определить положения ударения и происхождение фамилии невозможно, в алгоритме программы принято допущение, что все подобные фамилии склоняются по общим правилам. Поэтому французские фамилии с ударением на окончании обрабатываются программой некорректно: Дюма -> Дюмы, Золя -> Золи, Петипа -> Петипы .
  • Мужские фамилии, оканчивающиеся на "-ий", "-ый", "-ой", склоняются как прилагательные Горький -> Горького, Блаженный -> Блаженного, Броневой -> Броневого . Исключения составляют случаи, когда фамилия с таким окончанием - нарицательное существительное (Козодой, Водопой, Гений, Сценарий ) либо иноязычна по происхождению (Цой, Цхой, Чой ). Так как программно не определить, является ли фамилия подобным исключением, условно принято, что все фамилии с окончаниями "-ий", "-ый", "-ой" склоняются как прилагательные. В подавляющем большинстве случаяв это верно, однако в исключительных случаях с фамилиями-существительными результат функции будет ошибочным: Козодой Яков -> Козодого Якова, Гений Стефан -> Генего Стефана .
    Однако, в виде исключения в алгоритме учтено склонение фамилий с данными окончаниями и длиной менее 5 букв (преимущественно корейских по происхождению): Цой Виктор -> Цоя Виктора .
  • В ряде случаев корректное склонение женской фамилии, оканчивающейся на "-ина", "-ова", возможно только, если известно склонение соответствующей ей мужской фамилии: Жемчужина Людмила, Малина Светлана могут склоняться как в обычной форме: Жемчужина Людмила -> Жемчужиной Людмилы, Малина Светлана -> Малиной Светланы (если соответствующими мужскими фамилиями являются, например, Жемчужин Борис и Малин Олег), так и в форме существительного: Жемчужина Людмила -> Жемчужины Людмилы, Малина Светлана -> Малины Светланы (если мужские формы фамилии, например, Жемчужина Борис и Малина Олег).
    Учесть подобные нюансы в алгоритме невозможно, поэтому все женские фамилии функцией обрабатываются по единым правилам (как прилагательные), что в отдельных случаях может приводить к неверным результатам.
  • Похожая ситуация обстоит с мужскими и женскими фамилиями, оканчивающимися на "-ов(а)", "-ев(а)", "-ин(а)", которые омонимичны нарицательным существительным: Боров, Лев, Филин, Барин, Корова, Сова, Картина, Перина, Старина и т.д. ). Ни по каким формальным признакам программно установить идентичность фамилии и существительного нет возможности, поэтому склонение подобных фамилии по единым общим правилам приводит к некорректным результатам вида: Лев Павел -> Левым Павлом, Филин Сергей -> Филиным Сергеем, Корова Ксения -> Коровой Ксении, Сова Ольга -> Совой Ольги, Картина Алла -> Картиной Аллы .
  • Мужские фамилии, оканчивающиеся на мягкий знак, склоняются: Врубель Михаил -> Врубеля Михаила, Гоголь Николай -> Гоголя Николая и т.д. Однако при склонении окончания таких фамилий зависят от того, существительными какого рода - мужского, женского или среднего - они являются.
    Алгоритмически определить род существительного не представляется возможным, поэтому в тех случаях, когда мужская фамилия является существительным женского или среднего рода, функция будет работать некорректно: Сталь Иван -> Сталя Ивана, Полынь Виктор -> Полыня Виктора .
  • Образование творительного падежа фамилий, оканчивающихся на "-жа", "-ца", "-ча", "-ша", "-ща", зависит от ударения в слове: если это окончание является безударным, то при склонении оно меняется на "-ей": Капица Петр -> Капицей Петром, Туча Федор -> Тучей Федором ; если же окончание удареное, оно заменяется на "-ой": Кваша Игорь -> Квашой Игорем, Свеча Иван -> Свечой Иваном . Аналогичная ситуация с фамилиями, оканчивающимися на "-ец": без ударения окончание меняется на "-ем": Палец Виктор -> Пальцем Виктором ; под ударением - на "-ом": Сосковец Олег -> Сосковцом Олегом .
    Как было сказано выше, определить положения ударения в слове программно нельзя, поэтому в алгоритме программы принято допущение, что в словах, оканчивающихся на "-жа", "-ца", "-ча", "-ша", "-ща", окончание безударное (таких слов больше), то есть творительный падеж всегда образуется окончанием "-ей". Напротив, в словах, оканчивающихся на "ец", принято, что окончание находится под ударением, то есть склонение будет с окончанием "-ом". Соответственно, в остальных случаях будут наблюдаться ошибки вида: Квашей Игорем, Свечей Иваном, Пальцом Виктором .
  • Согласно правилам русского языка первая часть двойной русской фамилии склоняется, если она сама по себе может употребляться как фамилия: творчество Мамина-Сибиряка, рассказ Салтыкова-Щедрина, опера Римского-Корсакова и т.д. В противном случае она не изменяется: картина Ван-Дейка, похождения Дон-Жуана, оруженосец Дон-Кихота и др. Так, например, в фамилии Семёнов-Тян-Шанский склоняется первая часть, но не вторая: труды Семёнова-Тян-Шанского .
    Опять же, определить, является ли составная часть фамилии самостоятельной, алгоритмически возможности нет, поэтому для работы принято допущение, что все части составной фамилии следует склонять (в большинстве случаев это так), что в ряде ситуаций приводит к ошибкам: Вана-Дейка, Дона-Кихота, Семёнова-Тяна-Шанского .
  • Иностранные фамилии, оканчивающиеся на "-ов" и "-ин" в творительном падеже меняют окончание на "-ом": Бенджамином Франклином, Чарльзом Дарвином, Чарли Чаплином, Александром Грином . "Русские" же фамилии с аналогичными окончаниями заканчиваются на "-ым": Ивановым, Гагариным, Фонвизиным и т.д. Несмотря на то, что перечисленные выше фамилии (Франклин, Дарвин, Чаплин, Грин ) в виде исключений учтены в алгоритме, есть небольшая вероятность, что встретится какая-либо другая аналогичная иностранная фамилия - в таком случае результат функции будет некорректен.

Правила склонения фамилий и имен использованы в соответствии с разделами 13.1 и 13.2 работы Н. А. Еськовой «Трудности словоизменения существительных. Учебно-методические материалы к практическим занятиям по курсу «Язык современной печати» (Госкомитет печати СССР. Всесоюзный институт повышения квалификации работников печати. М., 1990).

Песочница

друже 16 ноября 2013 в 15:01

Склонение ФИО - NameCaseLib PHP Framework

  • PHP

Здравствуй, Хабрахабр!

Сегодня я расскажу о небольшом, но очень полезном фреймворке - NameCaseLib.

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

Установка

Для работы NameCaseLib нам понадобится PHP5 и библиотека php_mbstring, для работы с текстом в формате UTF-8.

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

NameCaseLib поддерживает два языка: русский и украинский. Файл NCL.NameCase.ru.php содержит русские правила склонения, NCL.NameCase.ua.php, соответственно, украинские. В папке NCL расположено само «ядро» фреймворка, то есть, набор основных функций.

Итак, давайте создадим файл в формате.php, и проверим работоспособность данного фреймворка.

q("Максимов Александр Васильевич"); # Выводим получившийся массив. (Примечание: возвращает простой индексируемый массив) var_dump($array); ?>

Соответственно, таким же образом, мы можем склонять и украинские ФИО, подключив украинские правила склонения.

Но, давайте все-таки разберем, какие параметры содержит в себе метод q , и как его еще можно использовать?

Данный метод имеет 3 параметра, 2 из них - можно не указывать. Первый параметр - ФИО человека, второй - падеж (Список констант приведу ниже; в случае, если не указан падеж (NULL), то метод возвращает все падежи), и третий - пол человека. (Константы, также, приведены ниже; если не указать пол (NULL), метод определит его сам)

Константы

Для указания пола используются константы:
  • NCL::$MAN – мужской пол
  • NCL::$WOMAN – женский пол

Для указания падежей русского языка:

  • NCL::$IMENITLN - именительный падеж
  • NCL::$RODITLN - родительный падеж
  • NCL::$DATELN - дательный падеж
  • NCL::$VINITELN - винительный падеж
  • NCL::$TVORITELN - творительный падеж
  • NCL::$PREDLOGN - предложный падеж

Для указания падежей украинского языка:

  • NCL::$UaNazyvnyi – називний відмінок
  • NCL::$UaRodovyi – родовий відмінок
  • NCL::$UaDavalnyi – давальний відмінок
  • NCL::$UaZnahidnyi – знахідний відмінок
  • NCL::$UaOrudnyi – орудний відмінок
  • NCL::$UaMiszevyi – місцевий відмінок
  • NCL::$UaKlychnyi – кличний відмінок

Примечания

  1. Порядок расположения ФИО не имеет значения.
  2. Не имеет значение, в каком регистре указаны ФИО, после склонения, метод возвращает сохраненный регистр букв.

Определение части ФИО

С помощью метода getFullNameFormat, мы можем определить часть, или какие части ФИО мы используем.

getFullNameFormat("Максимов Александр Васильевич"); /* Мы получаем формат вида: S F N, где: - S - Фамилия - N - Имя - F - Отчество */ echo $fullName; ?>

Но, что же делать, если все-таки фреймворк не может правильно определить, как склонять выбранное вами ФИО?

Для этого в библиотеке предусмотрен метод qFullName, который позволяет указать Фамилию, Имя, Отчество и пол человека в определенной последовательности.

qFullName("Максимов", "Александр", "Васильевич", NCL::$MAN, NCL::$TVORITELN, "S N F")."\n"; ?>

Итоги

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

Большинство русских фамилий склоняется по падежам согласно правилам русского языка. Однако есть много фамилий иностранного происхождения, окончания которых отличаются от типичных окончаний русских фамилий. Возникают два вопроса: склонять их или нет, как склонять? Рассмотрим разные случаи склонения фамилий:

1. Фамилии, оканчивающиеся на -ов/ев, -ин/ын, -ский/ской, -цкий/цкой, составляют основную часть русских фамилий. Их склонение обычно не вызывает вопросов и происходит с добавлением окончаний по следующим правилам:

Таблица 1. Фамилии на -ов/-ова
Падеж Вопрос падежа Мужская фамилия Женская фамилия Множественное число
И.п. кто? Иванов Иванова Ивановы
Р.п. кого? Иванова Ивановой Ивановых
Д.п. кому? Иванову Ивановой Ивановым
В.п. кого? Иванова Иванову Ивановых
Т.п. кем? Ивановым Ивановой Ивановыми
П.п. о ком? об Иванове об Ивановой об Ивановых
Таблица 2. Фамилии на -ский/-ская
Падеж Вопрос падежа Мужская фамилия Женская фамилия Множественное число
И.п. кто? Ахтырский Ахтырская Ахтырские
Р.п. кого? Ахтырского Ахтырской Ахтырских
Д.п. кому? Ахтырскому Ахтырской Ахтырским
В.п. кого? Ахтырского Ахтырскую Ахтырских
Т.п. кем? Ахтырским Ахтырской Ахтырскими
П.п. о ком? об Ахтырском об Ахтырской об Ахтырских

2. Фамилии, созвучные прилагательным, склоняются в соответствии со склонением прилагательных в мужском и женском роде и в множественном числе: Лихой, Толстая, Белый, Великий.

Таблица 3. Фамилии, созвучные прилагательным
Падеж Вопрос падежа Мужская фамилия Женская фамилия Множественное число
И.п. кто? какой/какая? Лихой Лихая Лихие
Р.п. кого? какого/какой? Лихого Лихой Лихих
Д.п. кому? какому/какой? Лихому Лихой Лихим
В.п. кого? какого/какую? Лихого Лихую Лихих
Т.п. кем? каким/какой? Лихим Лихой Лихими
П.п. о ком? о каком/о какой? о Лихом о Лихой о Лихих

3. Фамилии, созвучные существительным, склоняются в соответствии с полом, грамматический род не влияет на склонение. В том числе иноязычные без ударения на последний слог. Примеры фамилий: Мельник, Гитара, Бык, Ворона, Черноус, Щерба, Кафка. Фамилии мужского рода (Мельник, Трус) склоняются у мужчин по правилу склонения существительных мужского рода, у женщин и во множественном числе не склоняются. Фамилии женского рода (Гитара, Пятница) у мужчин и женщин склоняются по правилам склонения существительных женского рода, во множественном числе фамилия имеет форму именительного падежа у мужчин и не склоняется по падежам.

Таблица 4. Фамилии, созвучные существительным в мужском роде
Падеж Вопрос падежа Мужская фамилия Женская фамилия Множественное число
И.п. кто? Мельник Мельник Мельник
Р.п. кого? Мельника
Д.п. кому? Мельнику
В.п. кого? Мельника
Т.п. кем? Мельником
П.п. о ком? о Мельнике
Таблица 5. Фамилии, созвучные существительным в женском роде
Падеж Вопрос падежа Мужская фамилия Женская фамилия Множественное число
И.п. кто? Гитара Гитара Гитара
Р.п. кого? Гитары Гитары
Д.п. кому? Гитаре Гитаре
В.п. кого? Гитару Гитару
Т.п. кем? Гитарой Гитарой
П.п. о ком? о Гитаре Гитаре

Примечание 1. Стоит уточнять ударение в фамилиях, оканчивающихся на -а, так как от этого зависит окончание творительного падежа. Сравните: Лéвша — Левшей, Левшá — Левшой.
Примечание 2. Французские фамилии с ударным окончанием -а,-я, не склоняются: Эмилю Золя, Пьером Брока, об Александре Дюма.

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

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

Именительный (кто?) - Сидоров (м.р.), Сидорова (ж.р.);

Родительный (кого?) - Сидорова (м.р.), Сидоровой (ж.р.);

Дательный (кому?) - Сидорову (м.р.), Сидоровой (ж.р.);

Винительный (кого?) - Сидорова (м.р.), Сидорову (ж.р.);

Творительный (кем?) - Сидоровым (м.р.), Сидоровой (ж.р.);

Предложный (о ком?) - о Сидорове (м.р.), о Сидоровой (ж.р.).

Фамилии, подобные вышеозначенной, склонять проще всего. Но существуют фамилии, в которых отсутствует суффикс, например, Кошевой, Лановой, Толстой, Броневой.

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

Если среди ваших знакомых есть человек по фамилии Гладких, Черемных, Малых и т. п., то запомните, что это фамилия застывшей формы, которая не склоняется. Также правила запрещают склонять фамилии иностранного происхождения, оканчивающиеся на -их, -и, -ых, -ей. Не склоняются и такие, что оканчиваются на -яго, -аго. Говоря проще, типичные фамилии русского происхождения следует склонять как имена прилагательные, а нетипичные и иностранные - как имена существительные.

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

Если мужская фамилия заканчивается на -а или -я (Сковорода, Головня, Майборода), то правила склонения фамилий позволяют изменять окончания. Например, Вася Сорока, Васи Сороки, Васе Сороке, Васю Сороку и т. п. Иностранные же фамилии, что оканчиваются на гласную (Дюма, Гюго, Страдивари, Россини), склонять нельзя. Также правила склонения фамилий не позволяют изменять оные, если они неблагозвучны, вызывают неуместные ассоциации или созвучны с географическим названием или личным именем. Например, такие фамилии, как Вареник, Гордей, Донец, Гусь, в любом падеже остаются неизменными, независимо от того, принадлежат ли они мужчине или женщине.

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

Имеется достаточное количество решений (в том числе и в «коробке»), которые позволяют проводить преобразование из именительного в любой другой падеж. А вот чтобы наоборот — таких, думаю, встретится не очень много. Одно из них опишу в этой статье и приложу его исходные файлы.

Почему решений по обратному преобразованию падежей почти нет? Задача, вроде бы, актуальная. Скорее всего, это из-за того, что порой однозначно верно преобразовать русскую фамилию к именительному падежу не всегда получается даже у человека. Что уж говорить про алгоритмы для машин. Приведенное в статье решение тоже не всегда позволит преобразовать фамилию в именительный падеж однозначно верно. Но большинство случаев вполне может обработать.

Какие встречаются сложности

Например, запись родительного падежа разных фамилий в женском роде (Перцева и Перцевая) могут совпадать (Перцевой). И тогда при обратном преобразовании непонятно, какая из фамилий имелась в виду.

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

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

Чуть-чуть теории и особенностей

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

Углубляться в историю происхождения фамилий я не буду, хотя тема очень интересная. А вот то, что в фамилиях интересно вкратце рассмотрю. А интересно: окончания фамилий, отличия мужских и женских фамилий.

Большинство русских мужских фамилий имеют окончания «-ов/-ев», «-ин/-ын» (Иванов, Алексеев, Ивашкин). В дательном падеже окончания будут соответствовать «-ову/-еву», «-ину/ыну». Поэтому если фамилия оканчивается на «-ову/-еву» (Петрову, Шмелеву), «-ину/ыну» (Моськину, Синицыну), то обратное преобразование можно произвести, просто убрав последнюю букву «у» из окончания. Тогда получим фамилии в именительном падеже (Петров у, Шмелев у, Моськин у, Синицын у).

Аналогичные окончания фамилий, но уже в женском роде будут такими: «-ова/-ева», «-ина/-ына». В дательном падеже они примут вид: «-овой/-евой» (Петровой, Шмелевой), «-иной/ыной» (Моськиной, Синицыной). Обратное преобразование в именительный падеж можно выполнить, убрав из окончания последние «ой» и затем добавив «а» (Петров ой а, Шмелев ой а, Моськин ой а, Синицын ой а).

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

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

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

Пример кода на ISBL:

// На вход: строка в виде перечисленных через запятую Фамилия И.О. Addresses = "г-ну Сергееву С.С., Иванову А., Снигиреву А." // В WorkerIDsList функция возвращает список строк с ИД найденных работников. WorkerIDsList = PadegGetWorkerIDsByString(Addresses) // ИД работников через запятую showmessage(WorkerIDsList.DelimitedText)