1

Как бы вы решили эту проблему?Карта RSS-записей в HTML-корпус w. неточный поиск

Вы очищаете HTML-блоги. Некоторые из HTML-блога - это сообщения в блогах, некоторые из них - форматирование, боковые панели и т. Д. Вы хотите, чтобы узнать, какой текст в HTML принадлежит какому сообщению (т. Е. Постоянная ссылка), если таковая имеется.

Я знаю, что вы думаете: вы можете просто взглянуть на RSS и вообще проигнорировать HTML! Тем не менее, RSS очень часто содержит только очень короткие отрывки или полосы ссылок, которые могут вас заинтересовать. Вы хотите по существу победить выдержку RSS, используя HTML и RSS одной и той же страницы вместе.

RSS-запись выглядит следующим образом:

 
title 
excerpt of post body 
permalink 

Столб блог в HTML выглядит следующим образом:

 
title (surrounded by permalink, maybe) 
... 
permalink, maybe 
... 
post body 
... 
permalink, maybe

Так страница HTML содержит те же поля, но размещение Permalink не известно а поля будут разделены каким-то шумовым текстом, который в основном представляет собой HTML и пробел, но также может содержать некоторые дополнительные метаданные, такие как «отправленный Джонни» или дата или что-то в этом роде. Текст также может быть немного отличающимся в HTML и RSS, как описано ниже.

Дополнительные правила/предостережения:

  • Название не может быть уникальным. Это происходит чаще, чем вы думаете. Примеры, которые я видел: «Monday roundup», «TGIF» и т. Д.
  • Названия могут быть пустыми.
  • Выдержки из RSS также являются необязательными, но предполагается, что должно быть по крайней мере либо не пустое отрывок, либо непустое название
  • RSS-фрагмент может содержать полный контент, но скорее всего содержит краткий отрывок из начало почтового тела
  • Предположим, что постоянные ссылки должны быть уникальными и должны быть одинаковыми как в HTML, так и в RSS.
  • Название и выдержка и тело сообщения могут быть отформатированы несколько иначе в RSS и в HTML. Например:
    • RSS может содержать HTML внутри заголовка или тела, а на HTML-странице может быть добавлен HTML-код (например, вокруг первой буквы тела сообщения) или может быть отформатирован несколько иначе
    • Текст может быть закодирован несколько иначе, например, utf8 в RSS, а символы не-ascii в HTML всегда кодируются с использованием амперсандовой кодировки. Однако предположим, что это текст на английском языке, где символы не-ascii встречаются редко.
    • Возможно, была ужасно ужасная ошибка Windows-1252. Это часто случается для символьных символов, таких как фигурные кавычки. Однако можно с уверенностью предположить, что большая часть текста является ascii.
    • В любом направлении может быть свертывание в футляре, особенно в названии. Таким образом, они могли бы полностью загладить заголовок на странице HTML, но не в RSS.
  • Количество записей в канале RSS и HTML-странице не предполагается одинаковым. Либо может быть больше или меньше старых записей. Мы можем только ожидать получить только те сообщения, которые появляются в обоих.
  • RSS может быть отложен.На странице HTML может появиться новая запись, которая пока не отображается в ленте RSS. Это может произойти, если RSS синдицируется через Feedburner. Опять же, мы можем только ожидать разрешения тех сообщений, которые появляются как в RSS, так и в HTML.
  • Тело сообщения может быть очень коротким или очень длинным.

100% точность не ограничение. Однако, чем точнее, тем лучше.

Хорошо, что бы вы сделали?

+0

проблема с грубыми парами первой пары. Редактировать? – Triptych 2008-12-19 16:11:01

ответ

0

RSS на самом деле довольно прост для анализа с помощью XPath любой XML-анализатор (или регулярных выражений, но это не recpmmended), вы собираетесь через < пункта > теги, ищет < заголовка >, < ссылка >, < описание >.

Затем вы можете публиковать их в виде разных полей в базе данных или сразу же объединять их в HTML. В случае отсутствия < > вы можете очистить ссылку (в одном случае можно было бы сравнить несколько страниц с отсечением частей макета HTML).

1

Я бы создал скребок для каждого из основных движков блога. Начните с основного текста для отдельного сообщения на странице.

Если вам повезет, то двигатель предоставит разумный XHTML, поэтому вы можете найти несколько полезных выражений XPath, чтобы получить узел, соответствующий этой статье. Если нет, то я боюсь, что это TagSoup или Tidy, чтобы заставить его сформировать XML.

Оттуда вы можете найти метаданные и полный текст. Это должно безопасно удалить верхние и нижние колонтитулы/боковые панели/виджеты/объявления, хотя может оставить встроенные объекты и т. Д.

Также должно быть довольно легко (TM) сегментировать страницу в метаданных, тексте, комментариях и т. Д. И т. Д. положите его в довольно разумный элемент RSS/Atom.

Это будет основой для подачи RSS-канала (неполного текста) и превращения его в полнотекстовый текст (с учетом постоянных ссылок, приведенных в официальном RSS).

После того, как у вас есть скребок для движка блога, вы можете начать искать запись детектора - что-то, что станет основой «данной страницы, какой механизм блога был опубликован».

С достаточным количеством скребок и детекторов должно быть возможно указать данный канал RSS/Atom и преобразовать его в полный текстовый канал.

Однако этот подход имеет целый ряд вопросов:

  • в то время как вы можете быть в состоянии предназначаться большие 5 блога двигатели, могут быть некоторые блоги, которые вы просто должны иметь, которые не охвачены их: например есть 61 engines listed on Wikipedia; люди, которые пишут свои own блогов, нуждаются в собственном скребке.
  • каждый раз, когда движок блога меняет версии, вам необходимо сменить свои детекторы и скребки. Точнее, вам нужно добавить новый скребок и детектор. Детекторы должны становиться все более суетливыми, чтобы различать одну версию одного и того же двигателя и следующего (например,каждый раз slashcode меняется, он обычно меняет HTML, но differentsites использует разные версии косой черты).

Я пытаюсь думать о приличном отступлении, но я отредактирую, как только у меня есть.

 Смежные вопросы

  • Нет связанных вопросов^_^