Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Определение пола по фамилиии и имени


Автор: Veroonya 3.12.2008, 13:03
Помогите найти алгоритм.
В базе имеются имена и фамилии (отдельно) и их склонения по падежам.

Необходимо определить пол по фамилии, а именно, можно ли присвоить эту фамилию человеку определенного пола. Тоже самое и с именем.

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

Автор: Данкинг 3.12.2008, 13:06
А что тут хитрого? Если фамилия обычная, то оканчивается на -ева, -ова, -ина, -ая, -ев, -ов, -ин, -ий. Если же фамилия оканчивается на согласный, то по падежам изменяются только мужские фамилии. То же для фамилий вроде "Шегида" и т.п.

Автор: Veroonya 3.12.2008, 13:13
Хотелось бы иметь конкретный алгоритм, с чего начать, какие именно проверять окончания, и т.п.

Автор: Данкинг 3.12.2008, 13:15
Цитата(Veroonya @  3.12.2008,  13:13 Найти цитируемый пост)
какие именно проверять окончания

Я же написал, какие именно окончания. Вот моя функция на фоксе, правда, ей передаётся строка с ФИО целиком, т.е. Иванов Иван Иванович:

Код

FUNCTION Getpol (sss)
rrr=''
SSS=' '+ALLTRIM(UPPER(SSS))+' '
DO CASE g
CASE GETWORDCOUNT(SSS)=4
 IF 'ОГЛЫ'$SSS
 RRR='М'
 ENDIF
 IF 'КЫЗЫ'$SSS
 RR='Ж'
 ENDIF
CASE GETWORDCOUNT(SSS)=3
 IF 'ИЧ '$GETWORDNUM(SSS,3)+' '
 RRR='М'
 ENDIF
 IF 'НА '$GETWORDNUM(SSS,3)+' '
 RRR='Ж'
 ENDIF
 IF EMPTY(RRR)
  IF 'ЕВ '$GETWORDNUM(SSS,1)+' ' OR 'ОВ '$GETWORDNUM(SSS,1)+' ' OR 'ИН '$GETWORDNUM(SSS,1)+' ' OR 'ИЙ '$GETWORDNUM(SSS,1)+' '
  RRR='М'
  ENDIF
  IF 'ЕВА '$GETWORDNUM(SSS,1)+' ' OR 'ОВА '$GETWORDNUM(SSS,1)+' ' OR 'ИНА '$GETWORDNUM(SSS,1)+' ' OR 'АЯ '$GETWORDNUM(SSS,1)+' '
  RRR='Ж'
  ENDIF
 ENDIF
CASE GETWORDCOUNT(SSS)<3
 IF 'ЕВ '$GETWORDNUM(SSS,1)+' ' OR 'ОВ '$GETWORDNUM(SSS,1)+' ' OR 'ИН '$GETWORDNUM(SSS,1)+' ' OR 'ИЙ '$GETWORDNUM(SSS,1)+' '
  RRR='М'
  ENDIF
 IF 'ЕВА '$GETWORDNUM(SSS,1)+' ' OR 'ОВА '$GETWORDNUM(SSS,1)+' ' OR 'ИНА '$GETWORDNUM(SSS,1)+' ' OR 'АЯ '$GETWORDNUM(SSS,1)+' '
  RRR='Ж'
  ENDIF
ENDCASE
RETURN rrr
ENDFUNC

Автор: Veroonya 3.12.2008, 13:32
Но есть же еще и окончания -ц -ко -ян и проч.
А как быть с именами? Особенно бахытгуль и тд. фиг поймет какой пол, только человек понимает.

Кстати, за код все равно спасибо, пригодится smile 

Автор: Данкинг 3.12.2008, 14:00
Цитата(Veroonya @  3.12.2008,  13:32 Найти цитируемый пост)
Но есть же еще и окончания -ц -ко -ян и проч.

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

Цитата(Veroonya @  3.12.2008,  13:32 Найти цитируемый пост)
А как быть с именами? 

А с именами - никак. Только брать словарь, в котором для каждого имени прописан его пол.

Автор: podval 3.12.2008, 19:35
Лучшее решение - добавить в базу поле "пол".

Автор: Данкинг 3.12.2008, 19:49
Цитата(podval @ 3.12.2008,  19:35)
Лучшее решение - добавить в базу поле "пол".

Это понятно, только если в базе xxxxx записей, то сиё будет уже затруднительным. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)