Программное обнаружение «самого важного контента» на странице - PullRequest
8 голосов
/ 17 июня 2009

Какая работа, если таковая вообще была сделана, была выполнена для автоматического определения наиболее важных данных в HTML-документе? Например, подумайте о вашем стандартном сайте новостей / блогов / журналов, содержащем навигацию (возможно с подменю), рекламу, комментарии и приз - нашу статью / блог / новостное тело.

Как бы вы определили, какая информация в новостях / блоге / журнале является первичными данными в автоматическом режиме?

Примечание. В идеале метод должен работать с правильно сформированной разметкой и ужасной разметкой. Использует ли кто-то теги абзаца для создания абзацев или серию разрывов.

Ответы [ 12 ]

11 голосов
/ 19 июня 2009

Читабельность делает достойную работу именно этого.

Это открытый исходный код и опубликовано в Google Code .


ОБНОВЛЕНИЕ: я вижу ( через HN ), что кто-то использовал Readability для манипулирования RSS-каналами в более полезный формат, автоматически .

11 голосов
/ 19 июня 2009

подумайте о вашем стандартном сайте новостей / блогов / журналов, содержащем навигацию (возможно с подменю), рекламу, комментарии и приз - нашу статью / блог / новостное тело.

Как бы вы определили, какая информация в новостях / блоге / журнале является первичными данными в автоматическом режиме?

Я бы, наверное, попробовал что-то вроде этого:

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

Такой подход кажется довольно многообещающим, потому что это было бы довольно просто сделать, но все же иметь хороший потенциал для адаптации даже к сложным страницам Web 2.0, которые чрезмерно используют шаблоны, потому что он идентифицировал бы подобные узлы HTML между всеми страницами на одном сайте.

Вероятно, это можно еще улучшить, упростив использование системы скоринга для отслеживания узлов DOM, которые ранее были идентифицированы как содержащие уникальное содержимое, так что эти узлы имеют приоритет для других страниц.

10 голосов
/ 17 июня 2009

Иногда есть раздел CSS Media, определяемый как «Печать». Он предназначен для ссылок «Нажмите здесь, чтобы распечатать эту страницу». Обычно люди используют это, чтобы раздеть много пуха и оставить только мясо информации.

http://www.w3.org/TR/CSS2/media.html

Я бы попытался прочитать этот стиль, а затем очистить все, что осталось видимым.

2 голосов
/ 19 июня 2009

Вы можете использовать опорные векторные машины для классификации текста. Одна идея состоит в том, чтобы разбить страницы на разные разделы (скажем, рассматривать каждый структурный элемент как div как документ), собрать некоторые его свойства и преобразовать его в вектор. (Как и другие люди предположили, что это может быть количество слов, количество ссылок, количество изображений, тем лучше.)

Сначала начните с большого набора документов (100-1000), который вы уже выбираете, какая часть является основной частью. Затем используйте этот набор для тренировки вашего SVM.

И для каждого нового документа вам просто нужно преобразовать его в вектор и передать его в SVM.

Эта векторная модель на самом деле весьма полезна при классификации текста, и вам не обязательно обязательно использовать SVM. Вы также можете использовать более простую байесовскую модель.

А если вам интересно, вы можете найти более подробную информацию в Введение в поиск информации . (Свободно доступен онлайн)

2 голосов
/ 19 июня 2009

Я думаю, что самым простым способом было бы найти самый большой блок текста без разметки. Затем, как только он будет найден, определите его границы и извлеките его. Возможно, вы захотите исключить некоторые теги из ссылок, не связанных с разметкой, например ссылки и изображения, в зависимости от того, на что вы ориентируетесь. Если это будет иметь интерфейс, возможно, включите список флажков тегов, которые нужно исключить из поиска.

Вы также можете найти самый низкий уровень в дереве DOM и выяснить, какой из этих элементов является самым большим, но это не сработает на плохо написанных страницах, так как дерево dom часто ломается на таких страницах. Если вы в конечном итоге воспользуетесь этим, я придумаю какой-нибудь способ узнать, не перешел ли браузер в режим причуд, прежде чем пытаться это сделать.

Вы также можете попытаться использовать несколько из этих проверок, а затем придумать метрику для выбора наилучшего. Например, все еще попробуйте использовать мой второй вариант выше, но дайте его результату более низкий «рейтинг», если браузер будет нормально переходить в режим причуд. Очевидно, что это повлияет на производительность.

1 голос
/ 17 июня 2009

Я думаю, что очень эффективным алгоритмом для этого может быть «Какой DIV содержит больше всего текста, содержащего несколько ссылок?»

Редко объявления имеют более двух или трех предложений текста. Посмотрите на правую сторону этой страницы, например.

Область содержимого - это почти всегда область с наибольшей шириной на странице.

0 голосов
/ 08 декабря 2017

Как удобочитаемость больше не доступна:

  • Если вас интересует только результат, вы используете преемника Readability Mercury , веб-сервис.
  • Если вас интересует какой-то код, как это можно сделать, и вы предпочитаете JavaScript, то есть Mozilla Readability.js , который используется для просмотра в Firefox Reader View.
  • Если вы предпочитаете Java, вы можете взглянуть на Crux , который тоже неплохо справляется.
  • Или, если Kotlin - больше ваш язык, вы можете взглянуть на Readability4J , порт выше Readability.js.
0 голосов
/ 19 июня 2009

Instapaper хорошо с этим справляется. Возможно, вы захотите проверить в блоге Марко Армента намеки о том, как он это сделал.

0 голосов
/ 19 июня 2009

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

Различия между статьями / публикациями / темами были бы хорошим фильтром, чтобы выяснить, какой контент отличает конкретную страницу (очевидно, это нужно было бы дополнить, чтобы отфильтровать случайную чушь, такую ​​как реклама, "цитата дня" или баннеры ). Структура содержимого может быть очень похожа на несколько страниц, поэтому не слишком полагайтесь на структурные различия.

0 голосов
/ 19 июня 2009

Сегодня большинство сайтов новостей / блогов используют платформу для блогов. Поэтому я бы создал набор правил, по которым я бы искал контент. Например, две самые популярные платформы для ведения блогов - это WordPress и Google Blogspot.

Сообщения WordPress отмечены:

<div class="entry">
    ...
</div>

Сообщения в Blogspot отмечены:

<div class="post-body">
    ...
</div>

Если поиск по классам CSS не удался, вы можете обратиться к другим решениям, определив самый большой фрагмент текста и т. Д.

...