プログラマでありたい

おっさんになっても、プログラマでありつづけたい

HTML::ExtractContentを使って本文抽出

 先日、ブログの本文抽出をしたいと思ってちょっと調べてみました。rubyベースの実装のExtractContent.rbが良さげと思い色々試してみました。実際、良かったです。 ただ私の方が、あまりrubyに詳しくないことと、既にあるPerlのプログラムに組み込みたい制約があるので、別のものを探しました。それで見つけたのが、HTML::ExtractContent。その名もずばりの物がありました。よくよく見てみると、ExtractContent.rbを元に作っているようですね。

ACKNOWLEDGEMENT

Hiromichi Kishi contributed towards development of this module as a partner of pair programming.

Implementation of this module is based on the Ruby module ExtractContent by Nakatani Shuyo.
AUTHOR

INA Lintaro
COPYRIGHT

Copyright (C) 2008 INA Lintaro / Hatena. All rights reserved.
Copyright of the original implementation

Copyright (c) 2007/2008 Nakatani Shuyo / Cybozu Labs Inc. All rights reserved.
LICENCE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

 で、実際に触ってみました。下記のソースで抽出できます。

use strict;
use warnings;
use HTML::ExtractContent;
use LWP::UserAgent;

my $url = shift @ARGV;
my $ua = LWP::UserAgent->new;
$ua->agent('Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)');
my $res = $ua->get($url);

my $extractor = HTML::ExtractContent->new;
$extractor->extract($res->decoded_content);
print $extractor->as_text,"\n";


ブログの本文抽出の結果

$ ./call.pl http://d.hatena.ne.jp/dkfj/20081128/1227832594
■[自然言語処理]ブログの本文抽出
必要に迫られて、ブログの本文抽出をしたいと思います。2年前くらいにも少し試みたことがあるのですが、ソース消失。。。
アプローチとして、2つの方法があると思います。
・各ブログサービス(livedoor、ameba、hatena等々)ごとの構造を解析して、それぞれ専用のモジュールを作る
長所としては、抽出の精度が高くなる。
短所としては、ブログの構成が変わる度にバージョンアップの必要がある。
作成するモジュールが多い。対応外のブログはお手上げ。
・RSSのdescription等を活用して本文部分を推定する、汎用モジュールを作る
長所としては、一つのモジュールのみ保守すれば良い。対象のブログサービスの構成が変わっても影響がない(はず)
短所としては、抽出精度の限界がある。おそらく90%くらいが限界か
世の中の事例を見ていると、2番目のアプローチが多いようです。有名どころをピックアップ
Ceekz Logs:ブログの本文抽出にチャレンジ
zuzara:ブログの記事本文を抽出するスクリプトをつくってみた
MOONGIFT:タイトル・本文抽出クローラー「Webstemmer」
nakatani @ cybozu labs:Webページの本文抽出
nakataniさんが、Rubyの抽出プログラムを公開してくださっているので、そちらから試そうかと思います。また、経過を報告したいと思います。
Permalink | コメント(0) | トラックバック(0) | 09:36

 素晴らしいです。逆に、HTML Extractとなっていますが、Yahooのトップページのようなものは苦手なようです。(そりゃそうですね)