Сегодня мне хотелось бы поговорить о весьма любопытном операторе языка запросов Яндекса – операторе cat:. В документации к языку запросов он относится к документным операторам и описывается как «поиск по страницам сайтов, зарегистрированных в Яндекс.Каталоге, тематическая рубрика или регион которых совпадают с заданным». Применение оператора осуществляется с помощью задания определенных идентификаторов. Документировано два типа идентификаторов, характеризуемых разными значениями так называемых смещений:
1. 9000000 – смещение для тематической рубрики Яндекс.Каталога, к которому надо прибавлять код темы из документа
2. 11000000 – смещение региона, к которому надо прибавлять код региона из документа https://yandex.ru/yaca/geo.c2n
В свое время с помощью смещения для индикатора тематической рублики мне удалось сделать очень простой, но достаточно эффективный классификатор коммерческости запроса. Дело в том, что применив оператор cat: 9000000 к любому запросу, мы получим выдачу по нему, состоящую только из сайтов, зарегистрированных в Яндекс.Каталоге (будем называть это сужением на ЯК). А каждый из этих сайтов уже проклассифицирован редакторами сайта как коммерческий или некоммерческий. Коммерческие сайты характеризуются наличием поля «Сектор: Коммерческие» в ответе скрипта Яндекс-бара, например: http://bar-navig.yandex.ru/u?ver=4.0&show=32&url=http://money.yandex.ru:
Подсчитав количество коммерческих сайтов в первых N результатах выдачи, суженной на ЯК, и разделив это число на N, можно получить оценку доли коммерческих сайтов в выдаче по запросу, которую и использовать в качестве коэффициента коммерческости запроса, имеющего значения в отрезке от 0 до 1. Конечно, точность оценки снижается из-за того, что коммерческие сайты могут содержать некоммерческие страницы (например, информационные статьи, обзоры моделей, форумы и т.п.), но, тем не менее, по моим оценкам, остается достаточно высокой. Главное, что для проверки требуется всего один запрос в Яндекс, что существенно расширяет возможности для проверки большого числа запросов.
Но в любом случае тот факт, что документированные смещения применимы только к сайтам, зарегистрированным в Яндекс.Каталоге, существенно снижает возможности их применения. Так, например, определение географической принадлежности сайта к определенному региону требуется для решения определенных задач, и далеко не всегда выборка сайтов ограничивается сайтами из Яндекс.Каталога.
Так вот, оказывается, что существует непустая выдача не только для документированных смещений, но и для других, недокументированных, которые можно составить модификацией первых. Например, Чукотский Автономный Округ, lr=10251, имеет одно из наименьших значений количества сайтов в Яндекс.Каталоге – всего: https://yaca.yandex.ru/yca/geo/Russia/East/Chukotska/. Если использовать документированное смещение 11000000 для этого региона, то есть зададим в Яндекс запрос cat:11010251, то в выдаче мы увидим порядка 20 сайтов (зарегистрированные в Яндекс.Каталоге плюс сайты из так называемой скрытой части Яндекс.Каталога – проклассифицированные редакторами, но по какой-то причине в каталоге не показываемые) с примерно 21 тыс. страниц:
Однако, изменив первую цифру смещения с 1 на 2, мы получим в выдаче уже гораздо большее количество сайтов, визуально в своей массе имеющих отношение к Чукотке (около тысячи сайтов в примерно 212 тысячью страниц):
Судя, по всему, это недокументированное смещение работает для источников географической классификации документов, отличных от Яндекс.Каталога. Похоже, одним из источников является автоматический классификатор по содержимому документа, так на представленном выше скриншоте, среди результатов выдачи, мы видим страницу англо-русского онлайн-словаря с переводом слова “Anadyr” (город Анадырь – столица Чукотского Автономного Округа).
Продолжая менять первую цифру смещения, мы также непустую выдачу (и отличную от выдачи с документированным смещением 11000000) с документами, имеющими отношение к заданному региону, и для смещений 31000000, 51000000, 61000000 и 71000000. Не так давно была непустой выдача также и для смещения 81000000, но на данный момент выдача для этого смещения уже результатов нет.
Таким образом, используя недокументированные смещения, образованные от документированного, мы можем классифицировать на принадлежность к конкретному региону уже гораздо большее число документов, нежели это возможно для документированного смещения.
Вообще, методом простого перебора цифр для восьмизначных смещений можно убедиться, что непустая выдача существует для некоторого количества вариантов идентификаторов оператора cat:. Основная сложность заключается в интерпретации получаемых результатов – какой принцип классификации используется в каждом конкретном случае? Так, например, идентификатор 12000002 выдает сайты, содержащие сборники литературных произведений:
Идентификатор 13000002 выдает сайты, явно имеющие отношение к средствам массовой информации:
А идентификатор 18000004, похоже, классифицирует персональные сайты:
В общем, у пытливого исследователя есть возможность поразбираться в особенностях классификации результатов выдачи.
Ну и в заключение, хотелось бы обратить внимание на явный баг в результатах выдачи для документированного семизначного смещения 9000000. Кроме каталожных сайтов, принадлежащих в задаваемой рубрике, в выдачу попадают и результаты, релевантные числу-идентификатору оператора cat:, как таковому. Так например, применяя это смещение к рубрике Яндекс.Каталога «Словари украинского языка», имеющей код 4047, получаем для оператора cat: значение идентификатора 9004047. В выдаче поначалу действительно идут украинские словари:
Но затем выдачу заполоняют сайты, содержащие цифры числа 9004047, например, в виде номера телефона или артикула:
В этом плане предпочтительнее смотрится использование недокументированного восьмизначного смещения 24000000, выдача для которого подобного мусора не содержит: