« 2006年06月17日 | メイン | 2006年06月19日 »

2006年06月18日

ブログの本文抽出にチャレンジ

zuzara.com を読んでいると、ブログの本文抽出にチャレンジしているのを見つけました。

tdかdivで囲まれた文字列で、文章と比べてHTMLのタグがあまり多くないもののうち、一番文字数が多いのが本文だろう、というアルゴリズム。

PHP で書かれたコードを Perl に移植しながら、もっと効率的なアルゴリズムが無いかを考えていました。

まずは、『タグの数』ではなく、比率をで判定するように改良(?)しました。

スコア = タグ除去後(length) / タグ除去前(length)

タグが含まれていないときが最大値になるので、スコアは 1 が最大となります。タグの数よりもこっちの方が良さそうだったのだけど、コメント部分を抽出してしまう可能性が非常に高い。だめぽ。

牛乳を飲みつつ考えていると(カルシウムを摂取して身長を伸ばす)、ひらめきましたよ!要は、長い文章を取り出せればいいのだから、句読点の多いブロックを取り出せばよくね?とね。

日本語の句読点がたくさん含まれる部分を本文とするプログラムを作ってみた。適当に作ったので、カウント部分がかなり手抜き。

句読点の数を見てブログの本文を抽出する (Perl)

それなりに上手くいってるかも。もう少し考えてみると、上部のブロックほどスコア(句読点の数)を高めにするようにしても良いかも。上部にあるものほど重要ということで。どちらかというと、コメントが抽出されないようにする感じ。

前から考えていたのは、こんなのが。

・直前のエントリと diff を取る
・RSS の description と比較する

どちらも定期的にクロールしていることが前提ですね。任意のページを渡したときに本文抽出してくれないのでいまいち。人間ってすごいよね。

今回は、判定するための文字列(ブロック)を zuzara.com に倣って『tdかdivで囲まれた文字列』としたのだけど、もっと良い方法が無いかな。ニュース記事のように、途中に table で画像を入れられるとどうしようもない。

【関連情報】
・ブログの記事本文を抽出するスクリプトをつくってみた
 http://blog.zuzara.com/2006/06/06/84/

20:41 | コメント (2) | トラックバック | Programming

飯記録日記化しております

原点だけどね :p ということで、昨日(17日)の食事内容です。

夜は、くぼやで飲んでました。本部企画の打ち合わせというかなんというか。某エリート(自称)のキャラクターが非常に面白くって、6時間も居座ってた。良く間がもったものだと。実施できれば、面白い企画になるかもしれない。

くぼや (夜)
 いろいろ

20:33 | コメント (0) | トラックバック | Meal