Webページの本文抽出(主要コンテンツ抽出)

HTMLページからナビゲーション・広告・フッタなどのボイラープレートを除き、記事本文だけを機械的に取り出す技術。個別サイトのDOM構造をあらかじめ知らなくても、ヒューリスティックなスコアリングで「たぶん本文だろう」というブロックを当てる点が特徴。RSSを持たないサイトのフィード化(RSS-BridgeFiveFilters)や、部分フィードを全文フィードに変換する処理(Full-Text RSS)、ブラウザのリーダービュー機能の基盤になっている。

Arc90 Readabilityアルゴリズム

2010年にArc90社が開発したアルゴリズム。DOMツリーを走査し、p/divなどのタグやclass/id名(content/article/entryのような語には加点、footer/bannerのような語には減点)に基づいて各ノードにスコアを付与し、親ノードへスコアを伝播させて、最終的に最もスコアの高い領域を本文として抜き出すヒューリスティック手法。

このアルゴリズムはMozillaに引き継がれ、Readability.jsとしてFirefoxのリーダービュー機能の中核になっている。各種言語への移植も多い。

日本発の自作事例: ExtractContent

サイボウズ・ラボの中谷秀洋氏が、Webページの自動カテゴライズシステム「Pathtraq」のために2007年に公開したRuby実装。「本文を当てる」のではなく「本文以外を除外する」アプローチを取る点が特徴。

  • div/tdで囲まれた範囲を初期のテキストブロックとして分割。
  • 句読点の数をベーススコアとし、リンク以外のテキスト長の割合、ブロックの出現位置(前半ほど高スコア)、アフィリエイト/フォーム/フッタ特有の語といった素性でスコアを加減点。
  • リンクリストと判定されたブロックは除外方向に調整。
  • スコアの高い連続ブロックを「大ブロック」としてクラスタ化し、最もスコアの高いクラスタを本文とする。

はてなもこのアプローチをJavaScriptに移植したextract-content-javascriptを2009年に公開し、はてなブックマークのFirefox拡張内部で使っていた。ブログのテンプレート(サイト種別)に依存せず、HTML変更にも強い一方、構文解析ベースの手法に比べると精度は落ち、処理負荷も高めという特性がある。

現代の実装

  • Trafilatura(Python) — ベンチマークで高いF1/適合率を示す、汎用コンテンツ抽出パイプライン。ブラウザ不要で軽量。
  • readability-lxml(Python) — Firefox Reader View系譜のミニマルなHTMLクリーナー。再現率(recall)が高い。
  • Newspaper4k(Python) — NLP機能も持つニュース記事処理ライブラリ。
  • PostlightのMercury ParserはNTT DataによるPostlight買収後、事実上開発終了。

出典

#rss #self-hosted

作成日時: 2026-08-16 11:28 / 更新日時: 2026-08-16 11:28