- Регистрация
- 23.12.2014
- Сообщения
- 14 449
- Реакции
- 5 477
- Баллы
- 113
Всем привет. Я решил поделится интересным решением по определению пола.
При парсинге данных с сайта Авито возникла задача определить пол. Сам сайт не давал подобных данных, по этому я приступил к поиску решений данной задачи. Сразу же подумал проверять имя на наличие в списке, но мне это показалось затратным по ресурсам. Спустя время я пришел к выводу, что поиск имени является самым доступным и эффективным вариантом.
По скольку предыдущее обновление парсера включало в себя блэклист, то за основу я взял сниппет @Adigen который отлично выполнял функции блэклиста.
C#:
IZennoList Names = project.Lists["names"]; //привязываемся к списку
string Element = "Vasya";
return Names.Contains(Element); // True/False
К моему удивлению оказалось, что метод Contains не подошел в случае с определением имен, хотя точные вхождения обрабатывал без проблем.
В переменной Element, было значение Андреева.
Contains нашел Андре. Как так произошло мы так и не поняли.
Мистика!

В общем было решено все это дело переносить в Regex и парсить регуляркой ^Андреева$
Это немного повысило нагрузку, зато определение было более точным.
Вот так выглядит итоговый сниппеет.
C#:
string nameRegexp = project.Variables["NAME"].Value; // NAME - название зенно переменной
IZennoList Names = project.Lists["FEMALE"];
Regex re = new Regex(nameRegexp, RegexOptions.IgnoreCase);
return Names.Any(item => re.IsMatch(item));
NAME - сюда кладем регулярку или просто имя.
FEMALE - это список с женскими именами
return - Ответ будет True (Имя найдено) и False (Имя не найдено)
Если не найдено, чекаем на мужской пол. И тут я решил что все, работа сделана, можно курить бамбук. Запустил чек на 100к имен и офигел. 20к имен он просто не распознал.
Списки с именами для идентификации пола я нашел на форуме, внушительный список около 30к имен. Они были полностью на кириллице, но это же не паспортный стол, "Дашечки", "Юрки" - такие имена улетали в список "Не определен", по мимо этого был всякий треш из смеси англ. и русских букв. Я начал просматривать этот список и собирать имена вручную! Вручную КАРЛ! Это был адовый труд, ох я и ошибок насмотрелся, за пару часов все было готово, основной приоритет отдавал русским именам. Итог по 1к строк я добавил в списки.
Пример имен из списка "Не определен"
Камуфляжный Ниндзя
Красивая Независимая
Лавка тёти Сары
Озорная Семейка
НЕВСКИЙ БЛЯДИНА
разгружаю гардероб
тихорецкие_лизуны
kati
Kati
Katia
Katie
Katina
Katjuscha
Katrin
Katrin&Vilyam
katrin.s
Katrina
Katrine
katrinka.mо
Katrins
Katrish
Katsunari
Katterina
katty
Katush_k_a
KATVR-SHOP
katyaprosto
Katyasha
Katycha
katyusha
Kaтерина
Kaтя
Kristen
Kristine
Kristinka
Kristinochka
Kristusha
Kristy
Ksela
Ksena
Kseniaaa
Ksenialucky
Kseniia
Ksenija
Kseny
Ksenya
Ksu
ksucha
Ksucha-1977
ksuha
ksush.81
Ksusha
Ksuyshka
Ksyou1992
Ksyunechka
Kарина
Kатерина
Kатя
Kира
Kристина
По скольку проверка идет только по одному слову, то такие имена "Эльмирочка Николаева" приходилось разделять на две переменных и чекать по очереди. т.е. Если "Эльмирочка"(Имя 1) не определилась, то проверяем "Николаева"(Имя 2) если она есть.
Плюс ко всему не экранированные символы приводили к ошибке, по этому я сделал замену этих символов на пробел (Дополнять по мере необходимости, если не знаете как дополнить - пишите в теме).
Код:
(\(|\)|\+|\\|\*|-)
В процессе обкатки, дополнительно ввел пару мелких правок. (Проверку переменной Имя на пустоту и т.д.)
На момент публикации статьи я получил такой результат
Мужских имен: 54506.
Женских имен: 46593.
Не определено: 25665.
Кажется, что много не определил, но в основном там не имена.
Тем не менее, уже есть несколько идей как повысить процент распознаваемости.
По мере конкурса я буду развивать шаблон и тему
Примеры полученных данных.
Надеюсь мой шаблон пригодится в решении задач парсинга данных с сайтов которые не предоставляют данных по половому признаку.
Ну и в дополнение ответ на вопрос. А зачем определять пол? Например для формирования баз, по определенным критериям. Допустим женщины продающие автомобиль. Это сэкономит время и позволит более точно определить свою ЦА. Всем спасибо, Удачи!
- Номер конкурса статей
- Девятый конкурс статей
- Тема статьи
- Парсинг
Вложения
Последнее редактирование:







