Ответ 1
Нет никакого способа сделать это, что гарантировано для работы, но одна стратегия, которую вы можете использовать, - попытаться найти элемент с наиболее видимым текстом внутри него.
Учитывая веб-страницу новостей (из любого основного источника новостей, такого как times или bloomberg), я хочу определить основной контент статьи на этой странице и выбросить другие разные элементы, такие как объявления, меню, боковые панели, комментарии пользователей.
Какой общий способ сделать это, который будет работать на большинстве крупных новостных сайтах?
Какие хорошие инструменты или библиотеки для интеллектуального анализа данных? (предпочтительно на основе python)
Нет никакого способа сделать это, что гарантировано для работы, но одна стратегия, которую вы можете использовать, - попытаться найти элемент с наиболее видимым текстом внутри него.
Существует несколько способов сделать это, но никто не будет работать. Вот два самых простых:
Некоторое время назад я написал простой Python script для этой задачи. Он использует эвристику для группировки текстовых блоков вместе на основе их глубины в DOM. Тогда группа с наибольшим текстом считается основным содержанием. Это не идеально, но хорошо работает для новостных сайтов, где статья, как правило, является самой большой группировкой текста, даже если она разбита на несколько тегов div/p.
Вы использовали бы script как: python webarticle2text.py <url>
Diffbot предлагает бесплатный (10.000 URL) API для этого, не знаю, является ли этот подход тем, что вы ищете, но он может помочь кому-то http://www.diffbot.com/
Для решения в Java обратите внимание на https://code.google.com/p/boilerpipe/:
Библиотека котлов предлагает алгоритмы для обнаружения и удаления избыточного "беспорядка" (шаблона, шаблонов) вокруг основного текстового содержимого веб-страницы.
Библиотека уже предоставляет определенные стратегии для общих задач (например, извлечение статьи новостей), а также может быть легко расширена для отдельных параметров проблемы.
Но здесь есть также оболочка python:
Возможно, было бы более полезно извлечь RSS-ленты (<link type="application/rss+xml" href="..."/>
) на этой странице и проанализировать данные в фиде, чтобы получить основной контент.
Другая возможность ветки "реального" контента от шума - измерение плотности HTML частей страницы HTML.
Вам потребуется немного экспериментировать с порогами, чтобы извлечь "настоящий" контент, и я думаю, вы могли бы улучшить алгоритм, применив эвристику, чтобы указать точные границы сегмента HTML после определения интересного контента.
Обновление: только что обнаруженный URL-адрес выше не работает прямо сейчас; вот альтернативная ссылка в кешированную версию archive.org.
Я бы не пытался очистить его от веб-страницы - слишком много вещей может испортить его, но вместо этого посмотрите, какие веб-сайты публикуют RSS-каналы. Например, RSS-канал Guardian имеет большую часть текста из своих ведущих статей:
http://feeds.guardian.co.uk/theguardian/rss
Я не знаю, имеет ли The Times (The London Times, а не Нью-Йорк), потому что это за платной. Удачи вам в этом...