Контекстные головоломки

Сейчас ломаю голову как показывать баннеры в контекстной сети. Вопрос делится на два возможных варианта: показ рекламы в контекстной сети на подобии Adsense, бегун или директ (где выбирается заданное количество объявлений подходящих по ключевым словам для данной страницы) и показ в контекстной сети на подобии videoclick или автоконтекста бегуна (где линкуются ключевые фразы на странице, при наведении на которые, показывается реклама).

В обоих вариантах есть общие вещи, но есть и различия. В первом варианте кампании не конфликтуют друг с другом, а просто выбираются на основе каких-то приоритетов (скорее всего по ECPM, количеству заработанных денег за тысячу показов), а во втором легко может произойти конфликт, когда одна или более кампаний “дерутся” за одно слово или фразу.

Как бы я реализовал первый вариант. При поступлении запроса от пользователя, по URL получаем “карту слов” страницы. У меня эта “карта слов” представляет собой словарь (map), ключами которой являются основы слов, а значениями — другие словари, в которых ключами являются позиции слов в документе, а значениеми — непосредственно сами слова. Далее мы строим пересечение ключевых слов кампаний с “картой слов” страницы. В результате пересечения мы получаем список кампаний, подходящих для данной страницы. Строим некоторую приоритетную очередь и кешируем эти данные. После чего выбираем кампании согласно приоритетам и отдаём их в ответ на запрос пользователя. Ничего особо сложного тут не вижу :)

Несколько иначе обстоят дела со вторым вариантом. Слова и фразы могут конфликтовать. Как тут быть. Пока я придумал только один вариант решения задачи. Мы так же получаем “карту слов”, строим пересечение с ключевыми словами кампаний, но этого нам мало для определение какие кампании показать. Нам нужно знать какие слова и фразы “залинковать” и избежать при этом конфликтов. Как я предполагаю это сделать? Во время пересечения, помимо прочего, мы для каждой кампании запоминаем все позиции подходящих слов и фраз в документе. После так же строится приоритетная очередь. При выборе какие кампании показать, мы последовательно двигаемся по очереди. Если кампания подходит по ограничениям, мы берём первое слово/фразу в документе, запоминаем позицию слова/фразы которую мы выбрали (для фразы это будет набор позиций) ипереходим к следующей кампании в очереди. Снова проверяем ограничения и, выбираем первое слово/фразу которое подходит, но не пересекается теми позициями, которые мы запомнили на предыдущем шаге. Таким образом мы двигаемся по очереди и выбираем то количество кампаний, которое нам необходимо. Очередь, полагаю, должна быть циклической и мы должны запоминать, какую последнюю кампанию мы показали, чтобы при следующем запросе начать со следующего элемента.

Вот такие у меня мысли. За кадром осталось множество неосвещённых вопросов: откуда берётся “карта слов”, как мы синхронизируем наполнение кеша между потоками, как построить приоритетную очередь по ECPM и т.п. Всё это будущие мысли, а пока я изложил то о чём думаю сейчас. Скорее даже систематизировал для себя :)

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Tags: , ,

Ответь!

CAPTCHA image

можно использовать: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>