У меня очень большая база данных статей различной длины. В статьях есть элементы HTML. Я должен вставить некоторые объявления (простые < скрипт > элементов) в теле каждой статьи, когда она отображается (я знаю, я ненавижу объявления, которые прерывают чтение).Алгоритм разделения статьи без нарушения потока чтения или кода HTML
Проблема заключается в том, что каждое объявление должно быть вставлено примерно в одну позицию в каждой статье. Самое простое решение - просто разбить статью на фиксированное количество символов (без разрыва слов) и вставить рекламный код. Это, однако, рискует вставить объявление в середине тега HTML.
Я мог бы пойти регулярки пути, но я думал о следующем решении, с помощью JS:
- Установить подсчитывать персонаж порога. Например, «добавление должно быть вставлено примерно в 200 слов».
- Установленные принятые отклонения в каждом направлении, скажем -20, +20 символов.
- Петля через каждый текстовый узел внутри статьи, и при этом, сохранить количество от общего количества символов до сих пор
После того, как счетчик превышает пороговое значение, сделайте следующее решение:
4.1 , Если счетчик превышает пороговое значение на значение ниже, чем положительное принятое отклонение (например, 17 символов), вставьте рекламный код сразу после текущего текстового узла.
4.2. Если счетчик больше суммы порога и отклонения, откат назад к предыдущему текстовому узлу и принятие того же решения, только на этот раз используйте предыдущий счетчик и проверьте, меньше ли это разницы между порогом и отклонением , а если нет, вставьте объявление между текущим узлом и предыдущим.
4.3. Если сбой 4.1 и 4.2 (что означает, что предыдущий узел достиг слишком низкого количества символов, а текущий узел - слишком высокий), вставьте объявление после любого количества символов, необходимого в текущем элементе.
Я знаю, что это запутанное, но это первая вещь из моего ума, и она имеет то преимущество, что, пытаясь вставить объявление между текстовыми узлами, возможно, он не будет нарушать поток статьи как плохо как это было бы, если бы я просто вставить его в (как конечного 4,3 случая)
Вот некоторые псевдо-код, который я поставил вместе, я не доверяю своим англо-объясняя навыки:
threshold = 200
deviation = 20
current_count = 0
for each node in article_nodes {
previous_count = current_count
current_count = current_count + node.length
if current_count < threshold {
continue // next interation
}
if current_count > threshold + deviation {
if previous_count < threshdold - deviation {
// insert ad in current node
} else {
// insert ad between the current and previous nodes
}
} else {
// insert ad after the current node
}
break;
}
Am Я слишком усложняю материал, или я пропускаю более простое и элегантное решение?
PS: на стороне сервера и на стороне клиента все в порядке.
Если объявления являются элементами сценария, действительно ли важно, где вы их размещаете? Может быть, вы можете привести пример? – 2010-06-16 19:17:25
Это важно, потому что то, что эти объявления в основном делают, - это вставлять содержимое в их местоположение на странице. У меня даже нет примера, потому что у меня нет никакого контроля над тем, какие объявления будут отображаться, откуда издатель и т. Д., Извините. –
Вероятно, вы должны определить свой «счет» символов как символы без пробелов. – gnarf