:: Visual Foxpro, Foxpro for DOS
Склонения имен ...
Sergey_L

Сообщений: 59
Откуда: г.Пермь
Дата регистрации: 07.10.2003
В решениях www.foxclub.ru
есть пример кода склонения ФИО в дательном (кому) падеже ....
еще раз хочется сказать большое спасибо автору
а есть ли что нить подобное но с родительным, винительным (кого), творительным (кем) и т.п. ?
......
Ratings: 0 negative/0 positive
Re: Склонения имен ...
PuMa

Сообщений: 153
Откуда: Комсомольск-на-А
Дата регистрации: 19.04.2006
Вот ссылка на библиотеку
www.delphikingdom.ru
Но сам не пробовал...
Ratings: 0 negative/0 positive
Re: Склонения имен ...
rvc44

Сообщений: 2211
Откуда: Тамбов
Дата регистрации: 06.12.2005
На delphikingdom, кажется, реализовано с использованием DLL.
Я противник использования лишних DLL, о чем не раз писал,
поэтому своё решение сделал на чистом фоксе, которое затем
прошло экспертизу на gramota.ru,
где все замеченные нарекания специалистов оперативно устранял.
Прошел уже год с момента опубликования решения и пока больше
ни одного письма, о том, что неправильно склоняет не пришло...
Буду признателен, если кто-нибудь ещё что-нибудь накопает!

По поводу других падежей - у меня такой потребности при решении
своих задач не возникало. Подскажите, что за задачи решаете Вы?
Даже не могу предположить, где это реально нужно?
У нас на работе - точно никому не требуется!
Ratings: 0 negative/0 positive
Re: Склонения имен ...
matod
Автор

Сообщений: 3062
Откуда: Иркутск
Дата регистрации: 31.10.2001
Цитата:
Вот ссылка на библиотеку
www.delphikingdom.ru
Хорошая штука. Работает надежно. Ни разу не замечал, чтобы склонение выполнялось неправильно.
Ratings: 0 negative/0 positive
Re: Склонения имен ...
rvc44

Сообщений: 2211
Откуда: Тамбов
Дата регистрации: 06.12.2005
Вот сегодня дожил до реального случая, когда на своей работе потребовалось склонять фамилии, имена, отчества в родительном падеже. Видимо придется доработать свою функцию под эти цели... Но предварительно хочется задать вопрос: может кто уже пытался адоптировать мое решение (ссылку см. в первом посте) для родительного падежа?Отзовитесь, если такие есть..
Ratings: 0 negative/0 positive
Re: Склонения имен ...
Влад Колосов

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
Правильное склонение фамилий в принципе невозможно без знания пола человека. Можно только 50/50


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.
Ratings: 0 negative/0 positive
Re: Склонения имен ...
Влад Колосов

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
?famtorodp('Колосов Владислав',.T.)
***********************************************
* автор Маринченко Юлия, Ростов н/Д
FUNCTION famtorodp && ставит фамилию в родительный падеж
PARAMETERS famfull,prizn && Фамилия и признак - менять или не менять
LOCAL fam,i,lncount,lfam
LOCAL ARRAY arr(100)
IF AT('1',famfull)!=0 OR AT('2',famfull)!=0 OR AT('3',famfull)!=0 OR AT('4',famfull)!=0 OR;
AT('5',famfull)!=0 OR AT('6',famfull)!=0 OR AT('7',famfull)!=0 OR AT('8',famfull)!=0 OR;
AT('9',famfull)!=0 OR AT('0',famfull)!=0 OR empty(famfull)
RETURN ' '
ENDIF
lncount=0
FOR i=1 TO LEN(famfull)
IF ISUPPER(SUBSTR(famfull,i))
lncount=lncount+1
arr(lncount)=i
ENDIF
ENDFOR
DO CASE
CASE lncount=3
fam=ALLTRIM(SUBSTR(famfull,arr(1),arr(lncount-1)-arr(1)))
CASE lncount=2
fam=ALLTRIM(SUBSTR(famfull,arr(1),arr(lncount)-arr(1)))
CASE lncount=1
fam=ALLTRIM(SUBSTR(famfull,arr(1)))
OTHERWISE
RETURN famfull
ENDCASE
IF prizn
lfam=fam
DO CASE
CASE INLIST(UPPER(RIGHT(fam,2)),'ОВ','ЕВ','ЁВ','ИН','ЫН')
lfam=fam+'а'
CASE INLIST(UPPER(RIGHT(fam,4)),'СКИЙ','СКОЙ','ЦКИЙ','ЦКОЙ','ЗКИЙ','ЗКОЙ') OR;
INLIST(UPPER(RIGHT(fam,2)),'ЫЙ','ОЙ')
lfam=LEFT(fam,LEN(fam)-2)+'ого'
CASE UPPER(RIGHT(fam,2))='ИЙ'
lfam=LEFT(fam,LEN(fam)-2)+'его'
CASE INLIST(UPPER(RIGHT(fam,3)),'ОВА','ЕВА','ЁВА','ИНА','ЫНА') OR UPPER(RIGHT(fam,2))='АЯ'
lfam=IIF(UPPER(RIGHT(fam,1))='Я',LEFT(fam,LEN(fam)-2)+'ой',LEFT(fam,LEN(fam)-1)+'ой')
CASE UPPER(RIGHT(fam,2))='ЯЯ'
lfam=LEFT(fam,LEN(fam)-2)+'ей'
ENDCASE
RETURN lfam+' '+IIF(lncount>1,ALLTRIM(SUBSTR(famfull,arr(2),1))+'.','')+;
IIF(lncount>2,ALLTRIM(SUBSTR(famfull,arr(3),1))+'.','')
ELSE
RETURN fam+' '+IIF(lncount>1,ALLTRIM(SUBSTR(famfull,arr(2),1))+'.','')+;
IIF(lncount>2,ALLTRIM(SUBSTR(famfull,arr(3),1))+'.','')
ENDIF


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.




Исправлено 2 раз(а). Последнее : Влад Колосов, 19.03.08 12:40
Ratings: 0 negative/0 positive
Re: Склонения имен ...
Penner

Сообщений: 4102
Откуда: Muenster
Дата регистрации: 26.04.2002
a s familiami inostrannogo proizchogdenija rabotaet?
naprimer: Пеннер
Ratings: 0 negative/0 positive
Re: Склонения имен ...
Влад Колосов

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
Без знания пола это невозможно, я писал. Функция выше не ориентирована на анализ пола.


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.
Ratings: 0 negative/0 positive
Re: Склонения имен ...
ama68

Сообщений: 5278
Откуда: Кострома
Дата регистрации: 27.04.2006
Цитата:
CASE UPPER(RIGHT(fam,2))='ИЙ'
lfam=LEFT(fam,LEN(fam)-2)+'его'
Влад, знал я одного товарищи с фамилией ПАЛИЙ. Причем с вполне традиционными именем и отчеством..

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


------------------
"Следовательно, разруха не в клозетах, а в головах!"
Михаил Булгаков
Ratings: 0 negative/0 positive
Re: Склонения имен ...
Penner

Сообщений: 4102
Откуда: Muenster
Дата регистрации: 26.04.2002
Пеннер
ne sklonjaetsja v muzskom, no sklanjaetsja w genskom rode
Ratings: 0 negative/0 positive
Re: Склонения имен ...
Влад Колосов

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
Наоборот Женские не склоняются. Я как-то давал ссылку год-два назад.
ПАЛИЙ Юрий
Палия Юрия
Палий Анна
Палий Анну
Там ошибка, выходит.
Да вот, сразу нашел: www.rustrana.ru


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.
Ratings: 0 negative/0 positive
Re: Склонения имен ...
rvc44

Сообщений: 2211
Откуда: Тамбов
Дата регистрации: 06.12.2005
+1 to Влад
Пеннер не склоняется в женском, но склоняется в мужском!
А пол можно определить очень просто, но для этого должно быть указано отчество
(в большинстве БД именно так и есть!). Вот алгоритм:
* Определение пола человека по его отчеству
LstTwoOtc = Upper(Right(Otc,2)) && Последние две буквы отчества
lcSex = "?" && Пол: "М" - мужской, "Ж" - женский, "?" - не определен достоверно.
If LstTwoOtc=="ИЧ" &&Если отчество заканчивается на буквы "ИЧ"
lcSex = "М"
EndIf
If Upper(Right(Otc,1))=="А" && Если отчество заканчивается на букву "А"
lcSex = "Ж"
EndIf
If lcSex=="?"
* "Оглы" (для мужчин) и "Кызы" (для женщин) не склоняются и могут писаться как
* через черточку, так и отдельно от первой части отчества (однозначно определяют пол),
* то есть ФИО может состоять из 4 слов.
If At("ОГЛЫ", Upper(lFIO))<>0
lcSex = "М"
Else
If At("КЫЗЫ", Upper(lFIO))<>0
lcSex = "Ж"
EndIf
EndIf
EndIf
Ratings: 0 negative/0 positive
Re: Склонения имен ...
Влад Колосов

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
Надо взять на заметку! Хорошая идея.


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.
Ratings: 0 negative/0 positive
Re: Склонения имен ...
s66

Сообщений: 689
Откуда: Владивосток
Дата регистрации: 09.02.2007
Вот когда то было написано под 6-ой. Для Оглы и Кызы нуна доработать напильником.
LPARAMETERS cFio
*** Параметр Фамилия Имя Отчество
LOCAL cFam, cIma, cOth, lType
cFam=ALLTRIM(SUBSTR(cFio, 1, AT(" ", cFio)))
cIma=ALLTRIM(SUBSTR(cFio, AT(" ", cFio) + 1, AT(" ", cFio, 2) - (AT(" ", cFio) + 1)))
cOth=ALLTRIM(SUBSTR(cFio, AT(" ", cFio, 2) + 1))
IF SUBSTR(cOth, LEN(cOth)-1)="ич"
lType=.T.
ENDIF
********** фамилия ***********************************************************
IF lType
DO CASE
CASE SUBSTR(cFam, LEN(cFam)-1)="ба" OR SUBSTR(cFam, LEN(cFam)-1)="да"
cFam = SUBSTR(cFam, 1, LEN(cFam)-1) + "е"
CASE SUBSTR(cFam, LEN(cFam)-1)="ха" OR SUBSTR(cFam, LEN(cFam)-1)="ка"
cFam = SUBSTR(cFam, 1, LEN(cFam)-1) + "е"
CASE SUBSTR(cFam, LEN(cFam)-1)="ук"
CASE SUBSTR(cFam, LEN(cFam)-1)="ра"
CASE SUBSTR(cFam, LEN(cFam))="о"
CASE SUBSTR(cFam, LEN(cFam)-1)="ец"
CASE SUBSTR(cFam, LEN(cFam)-1)="ей"
cFam = SUBSTR(cFam, 1, LEN(cFam)-1) + "ю"
CASE SUBSTR(cFam, LEN(cFam))="ь"
cFam = SUBSTR(cFam, 1, LEN(cFam)-1) + "ю"
CASE SUBSTR(cFam, LEN(cFam)-1)="яй"
CASE SUBSTR(cFam, LEN(cFam)-2)="кий" OR SUBSTR(cFam, LEN(cFam)-1)="ый" OR SUBSTR(cFam, LEN(cFam)-1)="ой"
cFam = SUBSTR(cFam, 1, LEN(cFam)-2) + "ому"
OTHERWISE
cFam = cFam + "а"
ENDCASE
ELSE
DO CASE
CASE SUBSTR(cFam, LEN(cFam)-1)="ба" OR SUBSTR(cFam, LEN(cFam)-1)="да"
cFam = SUBSTR(cFam, 1, LEN(cFam)-1) + "е"
CASE SUBSTR(cFam, LEN(cFam)-1)="ха" OR SUBSTR(cFam, LEN(cFam)-1)="ка"
cFam = SUBSTR(cFam, 1, LEN(cFam)-1) + "е"
CASE SUBSTR(cFam, LEN(cFam))="о"
CASE SUBSTR(cFam, LEN(cFam)-1)="ук"
CASE SUBSTR(cFam, LEN(cFam)-1)="ич"
CASE SUBSTR(cFam, LEN(cFam)-1)="ей"
CASE SUBSTR(cFam, LEN(cFam)-1)="ра"
CASE SUBSTR(cFam, LEN(cFam)-1)="ва" OR SUBSTR(cFam, LEN(cFam)-1)="на"
cFam = SUBSTR(cFam, 1, LEN(cFam)-1) + "ой"
CASE SUBSTR(cFam, LEN(cFam)-1)="ая"
cFam = SUBSTR(cFam, 1, LEN(cFam)-2) + "ой"
ENDCASE
ENDIF
************** Имя ****************************************************
IF lType
DO CASE
CASE SUBSTR(cIma, LEN(cIma))="й" OR SUBSTR(cIma, LEN(cIma))="ь"
cIma = SUBSTR(cIma, 1, LEN(cIma)-1) + "ю"
CASE SUBSTR(cIma, LEN(cIma)-2)="вел"
cIma = SUBSTR(cIma, 1, LEN(cIma)-2) + "лу"
CASE SUBSTR(cIma, LEN(cIma))="я"
cIma = SUBSTR(cIma, 1, LEN(cIma)-1) + "е"
OTHERWISE
cIma = cIma + "у"
ENDCASE
ELSE
DO CASE
CASE SUBSTR(cIma, LEN(cIma)-1)="га" OR SUBSTR(cIma, LEN(cIma))="я"
cIma = SUBSTR(cIma, 1, LEN(cIma)-1) + "е"
OTHERWISE
cIma = SUBSTR(cIma, 1, LEN(cIma)-1) + "е"
ENDCASE
ENDIF
IF lType
cOth = cOth + "у"
ELSE
cOth = SUBSTR(cOth, 1, LEN(cOth)-1) + "е"
ENDIF
RETURN(cFam + " " + cIma + " " + cOth)
Ratings: 0 negative/0 positive
Re: Склонения имен ...
rvc44

Сообщений: 2211
Откуда: Тамбов
Дата регистрации: 06.12.2005
Наконец-то, вчера возвращаясь домой из отпуска, проведенного в г.Задонске Липецкой области, где 18 июля похоронил на берегу Дона на местном уютном Тюнинском кладбище любимую тёщу, сидя в автобусе Липецк-Тамбов, не находя себе место от тоски и скуки, нашел себе занятие: наваял на своём ноутбуке, вроде бы, универсальную процедуру склонения ФИО в родительном падеже (прилагается с исходниками). Если сочтете, что это не так - шлите сюда реальные факты! Разберёмся, примем меры. Программу эту посвящаю ей: удивительному оптимисту Кобзенко Нине Николаевне, которой едва исполнился 61 год, а она ушла за каких-то два дня, проведенных в Липецкой клинической больнице, никого даже не обременив болезнями и старостью, в самом расцвете и полная сил, планов и любви к внукам... и осиротели сразу 3 пусть уже взрослых, но ребенка... У врачей есть право на ошибку... избегайте их!
Ratings: 0 negative/0 positive
Re: Склонения имен ...
reware

Сообщений: 4116
Откуда: Хабаровск
Дата регистрации: 21.07.2008
Sergey_L
В решениях www.foxclub.ru есть пример кода склонения ФИО в дательном (кому) падеже ....
еще раз хочется сказать большое спасибо автору
а есть ли что нить подобное но с родительным, винительным (кого), творительным (кем) и т.п. ?
......

Ценителям синтаксических изысков посвщается...
Ratings: 0 negative/0 positive
Re: Склонения имен ...
rvc44

Сообщений: 2211
Откуда: Тамбов
Дата регистрации: 06.12.2005
Синтаксические изыски - это, конечно хорошо, но надо хотя бы немного учитывать правила русского языка (великого и могучего!), а то уж больно много ошибок, прямо куда ни плюнь.
Полный список ошибок весьма обширен. Вот часть из них, что лежат прямо на поверхности:

? FIO2("Малашонок","Геннадий","Иванович","м",1)
В итоге потеряна буква в имени: Малашонок Геннади Иванович

? FIO2("Головня","Геннадий","Иванович","м",3)
В итоге не просклонялась мужская фамилия, хотя правило 3 взято с spravka.gramota.ru
ПРАВИЛО 3: Несклоняемы фамилии французского происхождения с ударением на конце: ЗоЛЯ, ТруаЙА. Все прочие фамилии на "-я" склоняемы; таковы ГоловНЯ, ЗозуЛЯ, СырокомЛЯ, ГамалЕЯ, ГоЙЯ, ШенгелАЯ, ДанелИЯ, БерИЯ, БакерИЯ, ИверИЯ.

? FIO2("Молчанова","Лилия","Михайловна","ж",3)
В итоге получаем грамматическую ошибку в окончании имени: Молчановой Лилие Михайловне!
Хотя здесь черным по белому в пункте 3 написано: www.nazovite.ru
Имена, оканчивающиеся на -ия, имеют в родительном, дательном и предложном падежах окончание -ии;
имена, оканчивающиеся на -ья, имеют в родительном падеже окончание -ьи, а в дательном и
предложном -ье.

? FIO2("Лещенко","Лев","Валерьянович","м",3)
В итоге получаем ошибку: Лещенко Леву Валерьяновичу

? FIO2("Бородин","Павел","Павлович","м",3)
В итоге получаем ошибку: Бородину Павелу Павловичу

Изучите хотя бы, для начала, содержимое указанных сайтов, или исходники выстраданные мной в течении нескольких лет, приведенные выше и сравните со своими, иначе Вашими ошибками кто-то реально воспользуется! Лингвистика, как видим, наука и весьма не простая!
Ratings: 0 negative/0 positive
Re: Склонения имен ...
reware

Сообщений: 4116
Откуда: Хабаровск
Дата регистрации: 21.07.2008
rvc44
Синтаксические изыски - это, конечно хорошо, но надо хотя бы немного учитывать правила русского языка (великого и могучего!), а то уж больно много ошибок, прямо куда ни плюнь.
Полный список ошибок весьма обширен. Лингвистика, как видим, наука и весьма не простая!

Да бога ради. Я ведь кинул то, что нашел сто лет назад в и-нете как информацию к размышлению. Вы хотели готовый кусок кода ?
Ratings: 0 negative/0 positive
Re: Склонения имен ...
rvc44

Сообщений: 2211
Откуда: Тамбов
Дата регистрации: 06.12.2005
Готовый и проверенный кусок кода я старался лично написать постом выше!
Вдабавок обсуждение моего проекта велось и ведется на сайте gramota.ru
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 23 kornienko_ru  (Гостей: 22)

© 2000-2024 Fox Club 
Яндекс.Метрика