Слепые закупки. Код алгоритмов выявления искажения анонсов госзакупок так чтобы их не могли находить "чужие" поставщики Этот код и данные датированы февралём-мартом 2013 года и являются результатом анализа миллионов извещений о закупках на портале zakupki.gov.ru. Все ссылки актуальны на начало 2013 года. Часть наработок использовалась в проекте Госзатраты http://clearspending.ru для анализа качества контрактных данных.
Презентация с результатами: https://github.com/infoculture/blindprocurement/blob/master/docs/opendata_blindprocurement.pdf Результаты исследования НАИЗ, НИУ ВШЭ и НП "Инфокультура" http://naiz.org/upload/iblock/faa/faac377dabf5757d79a599715b888f81.pdf
Искажения текстов определялись по 4-м основным направлениям:
- латиница
- опечатки
- пробелы между буквами
- "мусорные названия"
Латиница - это способ сокрытия информации через подмену символов кириллического алфавита на аналогичные по написанию символы латиницы. В результате для человека это написание незаметно, но система поиска перестаёт находить ключевые слова.
Опечатки - опечатки в значимых словах, например, написать, "моолко" вместо "молоко" или "машына" вместо "машина" приводит к том что поисковая система не понимает текст который она индексировала и поиск по ключевому слову без опечаток не выведет результаты
Пробелы между буквами - трюк с заменой слов на слова с пробелами между буквами. Вместо текста "молоко" появляется текст "м о л о к о" где каждая буква выглядит как отдельное слово.
Мусорные названия - трюк с записью название предмета контракта в форме без ключевых слов. Например, это может звучать как "поставка товара" или "Проведение аукциона в электронной форме для нужд больницы N17". При этом невозможно понять из текста что за товар, работа или услуга закупается.
Большая часть кода слабодокументирована, весь основной код в файле https://github.com/infoculture/blindprocurement/blob/master/process_pur.py
с примерами определения каждого из правил искажений текстов.
В файле https://github.com/infoculture/blindprocurement/blob/master/export/final.xlsx приведены результаты анализа анонсов закупок:
- weight - вес (значимость) искажений текстов
- rules - признаки видов искажений текстове, перечислены через запятую. Могут быть: JU (junk) - мусорный текст, без ключевых слов, LT (latin) - текст содержащий латиницу внутри кириллических слов, MS (misspell) - ошибки и опечатки, SP (space) - наличие слов с пробелами между буквами
- id - идентификатор закупки
- url - ссылка
- placement_type - тип процедуры размещения заказа
- customer_regnum - регистрационный номер госзаказчика
- customer_name - название организации госзаказчика
- placer_regnum - регистрационный номер организации разместившей анонс закупки
- placer_name - название организации разместившей анонс закупки
- pubdate - дата публикации
- okdp_codes - коды ОКДП
- max_price - максимальная цена
- text - текст предмета закупки
- okogu_name - расшифровка кода ОКОГУ организации (принадлежность организации в системе госуправления)
- subordinationType_description - уровень организации (федеральный, региональный, муниципальный)
- factualAddress_region_fullName - точный адрес местонахождения организации
- headAgency_fullName - полное название головной организации
- Худшие случаи извещений https://github.com/infoculture/blindprocurement/blob/master/worst.xls
- Примеры закупок с особо короткими названиями https://github.com/infoculture/blindprocurement/blob/master/short.txt