При работе с базой данных клиентов, для автоматизации выборки встала
задача определить пол человека. В базе есть и русские и иностранцы.
Думал долго, взвешивал все варианты и остановился на способе, о котором
хочу рассказать.
Введение
На просторах интернета нашел два проекта наработки из которых мне помогли в решении задачи.
Из первой программы нам потребуется аккуратно собранные разработчиками
базы русских и английских имен. Скачиваем программу, устанавливаем,
забираем файлы с говорящими именами girls_ru.txt girls_en.txt boys_ru.txt boys_en.txt
(я не стал выкладывать файлы отдельно, возможно это нарушает лицензию
разработчика, поэтому каждому придется скачать программу
самостоятельно). Во всех четырех файлах имена отсортированные в
алфавитном порядке, так что организовать быстрый поиск труда не
составит.
Итого имеем:
12217 русских женских имен, 11033 русских мужских имен, 5915 английских
женских имен, 1533 английских мужских имен. На лицо дискриминация
мужских имен :). Обратите внимание, что все имена написаны с маленькой
буквы. Видимо для чегото разработчикам это потребовалось, а нам нужно
будет просто это учитывать.
На счет морфоанализа. Он важен только для русского языка т.к. у меня в
базе не все имена встречались в именительном падеже. Качаем mcd.dll
отсюда: macrocosm.narod.ru/madown.html и не забываем скачать файл rus_morphology.mcr (он должен лежать в одной папке с dll`кой).
Алгоритм
Если имя написано латиницей делаем перебор по английским именам, если
кириллицой, то сначала ищем имя как есть, если не находим, включаем
морфологический модуль. В архиве с dll есть примеры на Delphi, С++ и C#,
без них только по докам с сайта разобраться будет трудно. Основная
мысль – морфологический модуль приводит имя поданное на вход к словарной
форме (единственное число, именительный падеж) ну, а дальше нам
остается только поискать слово в базе имен.
Надеюсь эта небольшая зарисовка поможет кому-нибудь решить подобную задачу.