旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

[Python] Webstemmerを試してみた

2009年5月22日

Webstemmerという
サイトをクロール&スクレイピングして記事を抽出するツール を試してみました。

ドキュメントを読むと、以下の特徴があるよう。

(1) 自動で本文抽出を行う
 レイアウトを学習してくれる仕組みなので、どんなサイトでも自動的に解析できる。

(2) Pure Python製なので、インストールが楽!
 ソースをDLして解凍するだけで完了、yumで入っているpythonで動く。

(3) 出来が良い
 オプション等も細かく整備されており、丁寧に作りこまれている感じがする。

おおー、良さそうだ! 試してみよう。

プロセスが、(1)クロール (2)レイアウト解析 (3)記事抽出 に分かれており、
それぞれ別のPythonバッチを叩く必要がある。

(1) クロール

python ./textcrawler.py -o kjirou -m1 -c utf-8 http://kjirou.sakura.ne.jp/mt/archives.html

記事の索引ページとなるURLを指定して、その1階層下が記事である
・・・というように、抽出対象の記事リストを指定します。
(索引URLは当サイトのアーカイブページ、階層は-mオプションで指定)
実行結果として、kjirou.YYYYMMDDHHIISS.zip という、その記事情報の詰まったファイルが生成されます。

(2) レイアウト解析

python ./analyze.py kjirou.200905211722.zip > kjirou.pat

クロールした記事情報から、レイアウトを解析します。
解析結果をリダイレクトで保存する必要があり、今回は kjirou.pat として保存しています。

(3) 記事抽出

python ./extract.py -c utf-8 kjirou.pat kjirou.200905211722.zip > kjirou-result.txt

クロール記事とレイアウト解析結果を引数に入れて、目的である記事抽出を行います。
kjirou-result.txtは例えばこのような内容です。

!UNMATCHED: 200905211722/kjirou.sakura.ne.jp/mt/2007/08/
!MATCHED: 200905211722/kjirou.sakura.ne.jp/mt/2009/05/good_by_lingr.html
PATTERN: 200905211722/kjirou.sakura.ne.jp/mt/2007/09/vpsror.html
SUB-3: « [正規表現] ややこしい例に遭遇 | メイン
SUB-5: good_by_lingr_mod posted by (C)kjirou
SUB-5: お世話になりました。
SUB-5: 俺がエンジニアリングで成果を出せたら、
SUB-5: Special Thanks の欄に "Lingr" と入れざるを得ない。

“kjirou.sakura.ne.jp/mt/2007/08/”のページは、記事ではないと判断されて解析されていません。
“kjirou.sakura.ne.jp/mt/2009/05/good_by_lingr.html” は記事だと認識され、本文抽出が成功しています。
・・・すげぇ! 俺より賢い!!
(タイトルの抽出に失敗しているけど・・・多分オプションでどうにかなるはず)

ただし、いくつか弱点もあります。

(1) 遅い
 割と各処理に時間が掛かる。
 また、計算量が記事数の二乗で増加してゆく部分があり、そこを調整しないと大変なことになる。

(2) メンテが止まっている
 2007/9を最後に更新が止まっている。

ですが、ハマればちゃんと動くので、
自作クローラの前に試すのはいいと思います。

それでは、素晴らしきチュルチュル人生を!