В Москве больше 2000 детских садов. В очередь на зачисление можно встать в несколько. Какие садики выбрать и какой указать приоритетным? На днях я сделал попытку дать ответ на этот вопрос.
Хотел бы рассказать про некоторых технические детали решения. В ходе работы со школьными данными я заметил, что на сайтах школ публикуется много отзывов. У этих данных есть 4 особенности:
- Отзывов много. Около 40 000 штук на 700 школ за 2015, 2016 годы. Это больше, чем на специальных сайтах про школьные отзывы типа www.schoolotzyv.ru и schools.mel.fm.
- 90% отзывов — про детские сады. Почему-то про садики пишут чаще и больше. Даже на obr.msk.ru оставляют отзывы про сады, хотя явно указано, что нужны впечатления о школах.
- 99.9% отзывов положительные. Это печально, потому что читать только положительные отзывы неинтересно.
- В 95% отзывов родители персонально благодарят воспитателей. Например, «Инна Юрьевна находит подход к каждому, может унять любой утренний каприз ребенка и помочь родителям».
Поэтому появилась идея сделать вот что:
Тексты отзывов сами по себе не интересны, но интересны упоминания воспитателей. Можно попробовать узнать, каких сотрудников чаще всего благодарят и на основе этого делать свой выбор.
Чтобы выделить имена, я использовал яндексовый Томита-парсер. Три раза прочитал документацию, ничего не понял. К счастью, в их репозитории нашёлся пример, который делает ровно то, что нужно. Чуть-чуть модифицировал код, чтобы находились не только ФИО, но и мена без фамилия. Воспитателей часто упоминают по имени отчеству. Грамматика получается такая:
PersonName -> Word<kwtype="имя"> | Word<kwtype="имя_без_фамилии">;
Person -> PersonName interp (Person.Name);
Вы можете запалить код для запуска Томиты и парсинга результатов его работы. На сколько я понимаю, это, более или менее, единственное доступное решение для выделения имён из русскоязычных текстов. На отзывах точность получается около 95%.
Отдельный квест — это объединить имена в отзывах и анкеты воспитателей со школьных сайтов. Имя и отчество Томита нормализует автоматически, а фамилию оставляет как есть. Поэтому убираем окончания самостоятельно с помощью snowball-стеммера. На сайтах школ ФИО учителей заполнены почти всегда хорошо. Остаётся только привести к общему виду написания типа «Наталья» и «Наталия». В отзывах в половине случаев на воспитателя ссылаются по ФИО, а в половине — по имени отчеству. В 90% случаев в рамках школы сотрудники не дублируются по имена отчеству, поэтому адресата благодарности почти всегда можно определить однозначно. Самая большая проблема заключается в том, что списки сотрудников на сайтах школ неполные и устаревшие. Из-за этого удаётся провязать только 70% имён.
Ещё хотел бы упомянуть инструмент, который меня выручает уже не первый раз. Это детектор лиц из opencv. С его помощью лица воспитателей можно модно поместить в центр кружочков:
Вы можете запалить соответствующий кусочек кода в репозитории obr.msk.ru. Да, этот детектор плохо работает на людях в очках, да, наверняка есть более продвинутые решения. Но на фотках учителей в 90% случаев результат получается хороший.
Наверное, единственный более важный фактор, чем воспитатели — это расположение детского сада. На сайтах школ адреса садов можно найти в соответствующем меню:
Чтобы нанести в это дело на карту используется ещё один инструмент, который выручал меня бесчисленное количество раз — это яндексовый геокодер. Небольшой хак — когда не удаётся геокодировать адрес однозначно, можно добавить к адресу слово «Москва». Например, не «Улица Ленина, 15», а «Москва Улица Ленина, 15».
На всякий случай ссылка на код с вызовом геокодера и на на разбор результатов его работы.
Автор: alexkuku