CETR による HTML 文書からのテキスト抽出

n-yo さんに教えていただいてから随分と経ってしまいましたが,CETR を実装してウェブサービス化してみました.

CETR というのは "Content Extraction via Tag Ratios" の略で,HTML 文書の各行に含まれるタグの割合を利用してコンテンツを抽出する手法です.簡単な内容は以下のようになっています.

  1. コメント,スクリプト,スタイルを取り除きます.
  2. 文書が 1 行のみで構成されている場合,65 文字ずつに分割します.修正(2010-11-10)
  3. 各行に含まれるタグの割合(Ti)を求めます.
  4. タグの割合(Ti)を平滑化します(Ti').
  5. Ti' における近傍との差(Gi)を求めます.
  6. Gi を平滑化します(Gi').
  7. (Ti', |Gi'|) を k-Means により 3 分割します.このとき,1 つのクラスタについては,重心を原点に固定しておきます.
  8. 原点を重心とするクラスタ以外に属する行をコンテンツとして抽出します.

書かれている内容は一切考慮しないという思い切りの良い手法で,学習の必要もありません.Core 2 Duo 1.6GHz でも 280 文書/秒くらいの処理速度なので,時間もそれほどかかりません.

精度については「何もしないよりはマシ」くらいに思っておいた方がよいと思います.特定のサイトに特化したコンテンツ抽出とは比較になりません.ただし,改善の余地はあります.

追記(2010-11-10):行を分割する条件を論文通りに修正しました.精度は良くなったり悪くなったりです.

追記(2010-11-10):Ti や Gi を含め,途中経過も表示するように修正しました.空白のみで構成されている行は非表示になっています.また,背景の明るい行がコンテンツと判定された部分,青字が取り除かれた部分,緑字がタグを示しています.