先日、ブログの本文抽出をしたいと思ってちょっと調べてみました。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.
AUTHORINA Lintaro
COPYRIGHTCopyright (C) 2008 INA Lintaro / Hatena. All rights reserved.
Copyright of the original implementationCopyright (c) 2007/2008 Nakatani Shuyo / Cybozu Labs Inc. All rights reserved.
LICENCEThis 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のトップページのようなものは苦手なようです。(そりゃそうですね)