2008年9月12日金曜日

テキストノード比

ある仕事でいくつかのニュースサイトの許可を得て、記事ページを収集するというのをやってるんですけど、記事ページだけ機械的により分けるのが結構難しいんです。

今は収集先の記事インデックスページのマークアップをしらべて、ここからここまでに含まれるリンクが記事ページのURL、なんてやってるんですが、レイアウトやマークアップのしかたの変化を捕捉して範囲指定をメンテナンスしていくのに相当骨が折れますし、最近では記事ページへのリンクに続けて、カテゴリ別、キーワード別のインデックスページへのリンクが並ぶようになったりして、そもそも方法自体が破綻しつつあるんですよね。

それで、どうしようかってところなんですけど、たとえば、収集したページのテキストノードの数 tn と、テキストノードのバイト数 tb をしらべて、tb/tn がしきい値よりも大きければ記事ページとみなすっていうのはどうでしょうね。テキストノード比とかいって。さらにアンカーのテキストノードの tb を除けば、結構いいかんじでインデックスページと記事ページを識別できるような気がします。

って、まだなんにも検証していない、たんなる思いつきですけど。

あと、もうひとつ、収集した記事ページから本文だけを抽出するってのがまた困難。結局、マークアップに基づいたスクレイピングをやるしかないんですけど、やっぱりここにも相当のメンテナンスコストがかかります。

ブラウザのレンダリング結果をみれば、人にはそれとわかるように、本文部分は他の部分にくらべてテキストが密集しているわけなんですけど、でも、HTML レベルでみれば、いろんなタグがはさまっちゃって、そうでもなかったり。

ひとつのサイトから収集した複数の記事ページのテキストノードで、他のページと完全に重複する部分を取り除いて残った部分がそのページ固有の情報じゃないか、っていうアイディアもあるんですけど、どうでしょうね。

ほかに、どんな手があるかな。

いや、ほんとは、全部の収集先が全部入りの RSS を配信してくれればいいんですけどね。

-----------------
sent from W-ZERO3

0 件のコメント: