Каталог мероприятий собирает карточки из нескольких источников. У карточек с сайтов организаторов почти не было ни даты, ни города, ни афиши, и заказчик не понимал почему. Повторный заказ: до этого я делал ему ревизию кода.
Что нашлось. При сохранении страница обрезалась на первых 500 символах HTML, в базу попадала только служебная шапка. Разбирать сохранённое было бесполезно, поэтому страницы перекачал целиком и разобрал заново.
Как разбирается. Каскад с оценкой достоверности: микроразметка сайта (95), правила по тексту и адресу страницы (70), языковая модель только для того, что не взяли правила (55), контакты с сайта организатора (50). У каждого значения хранится источник и уровень доверия, для этого добавлена отдельная таблица. Модель разобрала 4,5 тысячи страниц за 229 рублей.
Результат по карточкам с сайтов: дата с 9 до 81 %, город с 9 до 71 %, афиша и время начала появились с нуля, 42 и 31 %. Попутно закрыл дубли по адресу со слэшем на конце и поставил суточный лимит обращений к модели.
Рабочую базу не трогал. Всё лежит отдельной веткой, 79 тестов проходят, перенос одной транзакцией заполняет только пустые поля. До применения заказчик видит отчёт по каждому полю и триста карточек с найденными значениями. Работа принята и оплачена.