Найти в Дзене
Геннадий Шушпанов

Мужчина или женщина

Как отделить мужчин от женщин? С людьми просто, они сами разойдутся в нужные группы. А если есть список содержащий только фамилии, имена и отчества и нужно проставить пол? Способ "ич/на" работает не всегда. Для статистического метода нужна статистика, а ее нет. Но мы-то всегда можем определить по конкретному ФИО пол человека. Поэтому нужен всего лишь помощник. Пусть в нашем списке есть Сидоров Иван Харитонович. Он мужчина. Но и все Иваны и Харитоновичи в нашем списке также будут мужчинами. Например Иван Сергеевич и Петр Харитонович. А раз они мужчины, то и все Петры и Сергеевичи.... Таким образом по одной записи мы можем установить пол для многих других. На тестовой выборке из 1000 записей потребовалось указать пол только дважды --один раз для мужчины и один раз для женщины. А это реализация описанного алгоритма. Person содержит поля для фамилии, имени и отчества. GetPersons отвечает за получение списка лиц, а IsMan -- за реализацию "звонка другу" для определения пола конкретного лица.

Как отделить мужчин от женщин?

Мальчики налево -- девочки направо
Мальчики налево -- девочки направо

С людьми просто, они сами разойдутся в нужные группы. А если есть список содержащий только фамилии, имена и отчества и нужно проставить пол? Способ "ич/на" работает не всегда. Для статистического метода нужна статистика, а ее нет. Но мы-то всегда можем определить по конкретному ФИО пол человека. Поэтому нужен всего лишь помощник. Пусть в нашем списке есть Сидоров Иван Харитонович. Он мужчина. Но и все Иваны и Харитоновичи в нашем списке также будут мужчинами. Например Иван Сергеевич и Петр Харитонович. А раз они мужчины, то и все Петры и Сергеевичи.... Таким образом по одной записи мы можем установить пол для многих других. На тестовой выборке из 1000 записей потребовалось указать пол только дважды --один раз для мужчины и один раз для женщины.

-2

А это реализация описанного алгоритма. Person содержит поля для фамилии, имени и отчества. GetPersons отвечает за получение списка лиц, а IsMan -- за реализацию "звонка другу" для определения пола конкретного лица. Далее в дело вступает рекурсивная AddTo, которая добавляет лицо в один из выходных списков и делает то же самое для всех подходящих по имени или отчеству. Проверка на пустоту учитывает случай не полного ФИО, исключая равенство записей по отсутствию значения.

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

Вот такое человеко-машинное сотрудничество, где каждый делает то, что умеет лучше.