(timesやbloombergなどの主要なニュースソースからの)ニュース記事のWebページを前提として、そのページのメイン記事のコンテンツを特定し、広告、メニュー、サイドバー、ユーザーコメントなど、その他のその他の要素を捨てたいと思います。
ほとんどの主要なニュースサイトで機能する一般的な方法は何ですか?
データマイニングに適したツールやライブラリは何ですか? (できればpythonベース)
動作することが保証されている方法はありませんが、使用できる戦略の1つは、内部に最も見やすいテキストがある要素を見つけようとすることです。
これを行う方法はいくつかありますが、常に機能する方法はありません。最も簡単な2つは次のとおりです。
Diffbotはそれを行うための無料の(10.000 urls)APIを提供しています。そのアプローチがあなたが探しているものかどうかはわかりませんが、誰かを助けるかもしれません http://www.diffbot.com/
少し前に私は simple Python script だけをこのタスクのために書きました。DOMの深さに基づいてテキストブロックをグループ化するためにヒューリスティックを使用します。その後、ほとんどのテキストがメインコンテンツであると見なされます。完璧ではありませんが、ニュースサイトでは一般的にうまく機能します。複数のdiv/pタグに分割されていても、記事は通常、テキストの最大のグループです。
次のようなスクリプトを使用します:python webarticle2text.py <url>
Javaの解決策については、 https://code.google.com/p/boilerpipe/ をご覧ください:
Boilerpipeライブラリは、Webページのメインのテキストコンテンツの周囲の余計な「クラッタ」(ボイラープレート、テンプレート)を検出して削除するアルゴリズムを提供します。
ライブラリは、一般的なタスク(例:ニュース記事の抽出)の特定の戦略をすでに提供しており、個々の問題の設定に合わせて簡単に拡張することもできます。
しかし、ここで利用できるpythonラッパーもあります:
RSSフィード(<link type="application/rss+xml" href="..."/>
)そのページで、フィードのデータを解析してメインコンテンツを取得します。
次のスクリプトを確認してください。それは本当に素晴らしいです:
from newspaper import Article
URL = "https://www.ksat.com/money/philippines-stops-sending-workers-to-qatar"
article = Article(URL)
article.download()
print(article.html)
article.parse()
print(article.authors)
print(article.publish_date)
#print(article.text)
print(article.top_image)
print(article.movies)
article.nlp()
print(article.keywords)
print(article.summary)
その他のドキュメントは http://newspaper.readthedocs.io/en/latest/ および https://github.com/codelucas/newspaper にあり、インストールする必要があります使用:
pip3 install newspaper3k
「実際の」コンテンツをノイズから分離する別の可能性は、HTMLページの一部の HTML密度の測定 によるものです。
「実際の」コンテンツを抽出するには、しきい値を少し試す必要があります。興味深いコンテンツを特定した後、ヒューリスティックを適用してHTMLセグメントの正確な境界を指定することで、アルゴリズムを改善できると思います。
更新:上記のURLを見つけただけでは現在機能しません。 ここに別のリンクがあります archive.orgのキャッシュバージョン。
私はWebページからそれをこすり取ろうとはしません-あまりにも多くのものがそれを台無しにする可能性があります-代わりにRSSフィードを公開しているWebサイトを確認してください。たとえば、GuardianのRSSフィードには、主要な記事のほとんどのテキストが含まれています。
http://feeds.guardian.co.uk/theguardian/rss
ペイウォールの裏側にあるため、ザタイムズ(ニューヨークではなくロンドンタイムズ)にあるかどうかはわかりません。頑張って...