SITEINFOのないページをAutoPagerizeするSITEINFO speculator for AutoPagerize version 0.0.2
Pagerization version 0.2.2 – ?D of Kに触発されてちょっと自分でも書いてみた。
AutoPagerizeよりもあとに実行されるようにインストールしておくと、AutoPagerizeでSITEINFOにマッチしなかったとき自動的にnextLinkとpageElementを推測してAutoPagerizeを再実行します。
インストール
つかいどころ
全部のページで使うとちょっと重たいので、Greasemonkeyの設定でincludeを*.tumblr.comで使ったりするといいとおもいます。tumblrのAutoPagerizeされてないテーマも、だいたい正しくAutoPagerizeできるかんじです。
フィードバック
SITEINFO speculatorでAutopagerizeが起動されたときは、右上の緑色がほんもののSITEINFOで起動されたときよりも暗くなります。マウスを持っていくと、自動生成されたSITEINFOの質がどうだったかのフィードバックを送るためのリンクが出てくるので、今後の開発の参考になるので、ひどいSITEINFOができてむかついたというときはmessyを、完璧で感動したというときはperfect, 一応動いてるけどみためがおかしくなるとかのときはokを押してもらえると助かります。

SITEINFOのレイティングと一緒に、ページのURLと使っているブラウザのUserAgentと生成されたXPathが送信されます。送られたデータはRatingsからみることができます。もし間違っておくって消したい、というときにはここで削除してください。
アルゴリズム
nextLinkの検出は適当です。単純なOperaのFast Forwardアプローチで、”»”, “次”, “Older”, “older”, “Next”, “next”, “→”, “←”, “>”, “<”, “«”, “前”, “Prev”, “prev” をキーワードにして引っかかったテキストリンクだけを探しています。なのでnextLinkが画像だと機能しません。(version 0.0.2で画像もいちおう対応しました)
前にSITEINFOで調べたかんじでは、nextLinkは時系列の向きに関わらず右向きの矢印で示されることが多かったので、そういう並び方に変えたほうがよさそう。今はマッチしたキーワードのリンクを、テキストの長さに反比例するコスト関数で評価して、コストの小さいものをnextLinkにしてます。前のページ
のほうが10 年前の今日、Netscape Communications 社が mozilla.org を設立
よりも優先されるように、という小細工。
pageElementはXML::Diffのアルゴリズムをベースにしてます。Diffは正確に差分を出す必要があるけど、今回は差異があることだけわかればいいので、かなり簡略化して差異がある部分だけをみつけて、ツリーを下から上に差異を足しこんでいって、終わったところで、今度は上から差異の変化を見ていって差異のほとんどが含まれている要素を見つけてそれをpageElementにしています。0.5~1.0秒くらいブロックしちゃうかんじだけど、そこはyieldで書き直せば解決。
精度のほうはあんまり試してないけど、nextLinkが見つかったものに関しては5~6割くらい正しくpageElementを出せそう。
Pagerization version 0.2.2 – ?D of Kのリストを参考にいくつか試した結果は
- http://1470.net/list/memo/recent
- ok
- http://2ch.ru/g/
nextLinkが見つけられない- http://www.adiumxtras.com/index.php?a=search&cat_id=3
- ok
- http://allabout.co.jp/relationship/secondmarriage/closeup/CU20071006A/index.htm
- ok
- http://www.altphotos.com/Gallery.aspx?browseby=toprated
- ok(でも2ページしか出ない。AutoPagerizeのSITEINFOがあっても2ページしか出ないけど偶然?)
- http://jp.techcrunch.com/
- ok(アルゴリズム的には正しいけどレイアウトが乱れる)
- http://mozillazine.jp/
- ok
- http://coderepos.org/share/changeset/
- ok(ただしレイアウトが大きく異なっているChangeset 8044 – CodeRepos::Share – Tracで止まる)
かんそう
nextLinkを見つけるようなアルゴリズムがない。たくさんデータを集めて統計的に解決するしかなさそう。
Greasemonkeyが実行されてから実際にAutoPagerizeで次のページがロードされるまで時間があるので、Greasemonkeyでページの解析をしなくても、リモートのサーバにリクエストを送って差分を解析してもらうこともできる。これは基本的にブラウザで新しいページをロードするたびにリクエストが送られることになる。サーバ側はpathtraqと同じデータを得ることができる。だから今のpathtraqに欠けているインストールすることのインセンティブ
として、nextLinkとpageElementを返してくれるAPIとかどうかなーと思ったり。pageElementの検出はWebページの本文抽出にも似ているところがあって、ますますpathtraqと相性いいなと感じました。
検出精度を高めていくには自動でテストをまわしてカバレッジを出してくれる何かがないとつらいです。perlのWWW::Mechanize::AutoPagerとHTML::TreeBuilder::XPathでSITEINFOをパースしてみたらXPathの評価で例外が出まくってだめでした。PHPのXMLまわりはクソでwell-formedにするのも一苦労なので、ruby, pythonをまともに使えない自分には手詰まり。
About this entry
You’re currently reading “SITEINFOのないページをAutoPagerizeするSITEINFO speculator for AutoPagerize version 0.0.2,” an entry on ku
- Published:
- 2008.03.18 / 1am
- Category:
- AutoPagerize, Firefox, greasemonkey

2 Comments
Jump to comment form | comments rss [?] | trackback uri [?]