Сопоставить записи 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-страница содержит те же поля, но размещение постоянной ссылки заранее не известно, и поля будут разделены некоторым шумовым текстом, который в основном состоит из HTML и пробелов, но также может содержать некоторые дополнительные метаданные, такие как «опубликовано Джонни. "или дату, или что-то в этом роде. Текст также может быть представлен немного иначе в HTML и RSS, как описано ниже.

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

  • Названия не могут быть уникальными. Это случается чаще, чем вы думаете. Примеры, которые я видел: «Сводка новостей по понедельникам», «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% точность - это ограничение нет. Однако чем точнее, тем лучше.

Что бы ты сделал?

возникли проблемы с поиском тех первых пара абзацев. Редактировать?

Triptych 19.12.2008 19:11

переписал вступление, надеюсь, оно чуточку понятнее

ʞɔıu 21.12.2008 06:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
229
2

Ответы 2

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

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

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

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

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

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

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

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

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

Однако у этого подхода есть ряд проблем:

  • Хотя вы можете настроить таргетинг на пять больших блог-движков, могут быть некоторые блоги, которые вам просто нужно иметь, но они ими не охвачены: например, есть 61 двигатель указан в Википедии; Людям, которые пишут свои системы ведения блогов собственный, нужен свой собственный скребок.
  • Каждый раз, когда движок блога меняет версии, вам нужно менять детекторы и скребки. Точнее, нужно добавить новый скребок и детектор. Детекторы должны стать более суетливыми, чтобы отличать одну версию одного и того же движка от другой (например, каждый раз, когда изменяется слэшкод, обычно изменяется HTML, но разныеместа использует разные версии косой черты).

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

Другие вопросы по теме