別名を見破る。

違うURLなのに、同じコンテンツを指している場合がある。たとえばasahi.comだとRSSが指している記事のURLはこんなふうに、

 http://www.asahi.com/(なんとか).html?ref=rss

と末尾に?ref=rssと付く。おそらくはRSSからのアクセス検出用。無くても同じ記事を指すURL。
こうやって、一つの記事に2つのURLが存在するわけだけど、はてなブックマークは末尾の不要なクエリ文字列を落として、両者を同じURLの同じページとして登録する。これ、よく考えてみると難しそうな処理。
何も考えずにクエリ文字列を落とすと、全く別のコンテンツを指してしまう危険がある。たとえばGIGAZINEのように、

http://gigazine.net/index.php?/news/comments/(なんとか)/

というURLだとクエリ文字列を落とすと

http://gigazine.net/index.php

となり、全く別のコンテンツ(この場合はトップページ)を指してしまう。
はてなブックマークはどうやってこの問題を始末しているんだろ?一番簡単に思いつくのは、とにかくヒューリスティックに落としていい物、落としちゃ拙いもののパターンをため込んで、それに従ってURLを加工する方法。ただしこれだと、そのルール群を人力でメンテナンスしなきゃいけない。ユーザ自身の定義に任せるのも考えられるけど、そのような仕組みはまだありません、もとい、見当たらない。
もう少し自動化すると、

http://example.com/content.html?foo=bar
http://example.com/content.html

と二つのURLが与えられたとして、両方の内容をまず取得する。その後、両者を比較して内容が同じならURLの差分、この場合は?foo=barを落としてもいい物として学習、記憶して以後使う。広告などアクセスごとに内容が変わる部分のことを考えると、現実的にはdiffを取って差分量が一定比率以下なら同じと見なす、と言う処理を噛ませれば良さそうだけど、誤検知の可能性はある。


この問題、どうすれば上手くいくかな。