- PVSM.RU - https://www.pvsm.ru -

Выбор детского сада в Москве

В Москве больше 2000 детских садов. В очередь на зачисление можно встать в несколько. Какие садики выбрать и какой указать приоритетным? На днях я сделал попытку дать ответ на этот вопрос [1].
Выбор детского сада в Москве - 1
Хотел бы рассказать про некоторых технические детали решения. В ходе работы со школьными данными я заметил, что на сайтах школ публикуется много отзывов [2]. У этих данных есть 4 особенности:

  1. Отзывов много. Около 40 000 штук на 700 школ за 2015, 2016 годы. Это больше, чем на специальных сайтах про школьные отзывы типа www.schoolotzyv.ru [3] и schools.mel.fm [4].
  2. 90% отзывов — про детские сады. Почему-то про садики пишут чаще и больше. Даже на obr.msk.ru оставляют отзывы про сады, хотя явно указано, что нужны впечатления о школах.
  3. 99.9% отзывов положительные. Это печально, потому что читать только положительные отзывы неинтересно.
  4. В 95% отзывов родители персонально благодарят воспитателей. Например, «Инна Юрьевна находит подход к каждому, может унять любой утренний каприз ребенка и помочь родителям».

Поэтому появилась идея сделать вот что:

Тексты отзывов сами по себе не интересны, но интересны упоминания воспитателей. Можно попробовать узнать, каких сотрудников чаще всего благодарят и на основе этого делать свой выбор.

Чтобы выделить имена, я использовал яндексовый Томита-парсер [5]. Три раза прочитал документацию [6], ничего не понял. К счастью, в их репозитории нашёлся пример, который делает ровно то, что нужно [7]. Чуть-чуть модифицировал код, чтобы находились не только ФИО, но и мена без фамилия. Воспитателей часто упоминают по имени отчеству. Грамматика получается такая:

PersonName -> Word<kwtype="имя"> | Word<kwtype="имя_без_фамилии">;

Person -> PersonName interp (Person.Name);

Вы можете запалить код для запуска Томиты и парсинга результатов его работы [8]. На сколько я понимаю, это, более или менее, единственное доступное решение для выделения имён из русскоязычных текстов. На отзывах точность получается около 95%.

Выбор детского сада в Москве - 2

Отдельный квест — это объединить имена в отзывах и анкеты воспитателей [9] со школьных сайтов. Имя и отчество Томита нормализует автоматически, а фамилию оставляет как есть. Поэтому убираем окончания самостоятельно с помощью snowball-стеммера [10]. На сайтах школ ФИО учителей заполнены почти всегда хорошо. Остаётся только привести к общему виду написания типа «Наталья» и «Наталия». В отзывах в половине случаев на воспитателя ссылаются по ФИО, а в половине — по имени отчеству. В 90% случаев в рамках школы сотрудники не дублируются по имена отчеству, поэтому адресата благодарности почти всегда можно определить однозначно. Самая большая проблема заключается в том, что списки сотрудников на сайтах школ неполные и устаревшие. Из-за этого удаётся провязать только 70% имён.

Ещё хотел бы упомянуть инструмент, который меня выручает уже не первый раз. Это детектор лиц из opencv [11]. С его помощью лица воспитателей можно модно поместить в центр кружочков:
Выбор детского сада в Москве - 3

Вы можете запалить соответствующий кусочек кода [12] в репозитории obr.msk.ru. Да, этот детектор плохо работает на людях в очках, да, наверняка есть более продвинутые решения. Но на фотках учителей в 90% случаев результат получается хороший.

Наверное, единственный более важный фактор, чем воспитатели — это расположение детского сада. На сайтах школ адреса садов можно найти в соответствующем меню:
Выбор детского сада в Москве - 4

Чтобы нанести в это дело на карту используется ещё один инструмент, который выручал меня бесчисленное количество раз — это яндексовый геокодер [13]. Небольшой хак — когда не удаётся геокодировать адрес однозначно, можно добавить к адресу слово «Москва». Например, не «Улица Ленина, 15», а «Москва Улица Ленина, 15».
Выбор детского сада в Москве - 5

На всякий случай ссылка на код с вызовом геокодера [14] и на на разбор результатов его работы [15].

Автор: alexkuku

Источник [16]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/data-mining/139425

Ссылки в тексте:

[1] попытку дать ответ на этот вопрос: http://obr.msk.ru/sch1329-sad.html

[2] публикуется много отзывов: http://sch1329.mskobr.ru/elektronnye_servisy/reviews/

[3] www.schoolotzyv.ru: http://www.schoolotzyv.ru/

[4] schools.mel.fm: http://schools.mel.fm/

[5] яндексовый Томита-парсер: https://github.com/yandex/tomita-parser/

[6] документацию: https://tech.yandex.ru/tomita/doc/dg/concept/about-docpage/

[7] пример, который делает ровно то, что нужно: https://github.com/yandex/tomita-parser/blob/master/examples/algfio/people.cxx

[8] код для запуска Томиты и парсинга результатов его работы: https://github.com/alexanderkuk/moscow-school2/blob/master/main.py#L3863-L3898

[9] анкеты воспитателей: http://sch1329.mskobr.ru/dou_edu/doshkol_noe_otdelenie_gbou_shkoly_1329/obrazovanie/pedagogicheskij_kollektiv/specialisty/turkina_nataliya_olegovna/

[10] snowball-стеммера: http://www.nltk.org/howto/stem.html

[11] детектор лиц из opencv: http://docs.opencv.org/master/d7/d8b/tutorial_py_face_detection.html#gsc.tab=0

[12] соответствующий кусочек кода: https://github.com/alexanderkuk/moscow-school2/blob/c578775cc3d0a03de6a0a3ebac5607b8084e9765/main.py#L4692-L4718

[13] яндексовый геокодер: https://tech.yandex.ru/maps/geocoder/

[14] вызовом геокодера: https://github.com/alexanderkuk/moscow-school2/blob/c578775cc3d0a03de6a0a3ebac5607b8084e9765/main.py#L1576-L1585

[15] на разбор результатов его работы: https://github.com/alexanderkuk/moscow-school2/blob/c578775cc3d0a03de6a0a3ebac5607b8084e9765/main.py#L1630-L1650

[16] Источник: https://habrahabr.ru/post/303622/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best