サイト内のリンク構造からPageRankを計算してみる

Posted by
ぴろり
Posted at
2008/03/31 20:57
Trackbacks
関連記事 (0)
Post Comment
コメントできます
Category
開発メモ カテゴリ

 サイト内の構造を基にしてサイト内に限った各ページの を計算から求めるプログラムを書いてみました。最終的な とは,外部から張られたを加味した上で決定されるわけですが,サイト内でどのようなページが高い を獲得しやすいのか,その傾向を知ることは,サイトの を考える上でも無駄ではないと思います。

この記事をはてなブックマークに追加する この記事のはてなブックマーク数 | この記事をlivedoorクリップに追加する この記事のlivedoorクリップ数 | この記事をYahooブックマークに追加する この記事のYahoo!ブックマーク数 | この記事をdel.icio.usに追加する | Twitterにポストする

概要

 Google の秘密 - PageRank 徹底解説を参考にして, を求めるプログラムを書いてみました。プログラムは 2 つに分かれていて,1 つ目は指定されたサイトを総舐めして構造を取得するためのプログラムで,2 つ目は取得された構造から各ページの を求めるプログラムになります。
 外部を考慮しない の計算では,まず各ページが 1 を持つ状態から計算を始めます。関係を表した隣接行列の固有ベクトルを求めることと同じであり,今回は外部のライブラリなどを利用せずに プログラム単体で動作するようにしました。計算方法にべき乗法を用いたため,計算速度は恐ろしく遅いです。ここのサイト規模では 780 近い内部があり,64bit デュアルコアの AMD Opteron 1210 プロセッサを搭載したマシンで概ね 30 分程度を要しました。

構造の取得

  を用いて簡単なクローラを作成し,それを用いて対象となるサイト内を全て取得します(ダウンロード) このプログラムによって,どのページからどのページへが貼られているかを示す隣接行列を得ることができます。別のプログラムを使用して,当サイトの隣接行列を図示したものが次になります。

links_matrix.png

 上の図からだけでも興味深い点が幾つか見られますので簡単に解説してみます。図の黒い部分ががあるところで,横方向の直線は多くのページからされていることを示しています。反対に縦方向の直線は他のページに多くしていることを示しています。

(A1)記事間の参照
 個別記事アーカイブページの領域で,記事内から別の記事を参照のためにしている場合に密になります。”この記事を読んだ人はこんな記事も読んでいます”機能や,タグの関連度から"その他の関連する記事"を表示する機能によって貼られたも含まれます。自サイト内への記事の言及が活発になると,この領域が密になります。斜めに横断している直線は,link タグの rel="prev"rel="next" によるものです。また,横に伸びる直線は,左サイドバーにある"ショートカット"や"勝手におすすめ"コーナーのように,全てのページで共通に表示されているによるものとわかります。
(A2)この記事のアーカイブ→キーワード
 記事ページの末端にある"この記事のアーカイブ"-"キーワード"によるです。
(A3)自動された記事内のタグ
 このサイトでは記事内にタグを発見すると自動的にリンクを生成するようになっています。その機能によって,個別記事からタグのページにが自動的に生成されています。
(B1)キーワード結果
 キーワードの結果ページから,そのキーワードを含む個別記事アーカイブページへのが生成されています。
(B2)関連するキーワード
 キーワードの結果から,結果に含まれるエントリで多く使われているタグを抽出して,関連するキーワードとしてを提示しているためです。
(B3)空白地帯
 自由入力が可能なキーワードからタグページへのは難しい,または意味がないと考えたため,キーワードからタグへの移動ルートは用意されていないのがわかります。
(C1)タグ結果
 タグが指定された記事の一覧です。タグは手作業によって記事毎に指定されるため,機械的にが生成される(B1)の領域と比べるとが疎になります。
(C2)タグをキーワードする
 各タグの結果ページには,タグをフリー入力のキーワードとしてキーワードするためのがあります。つまり(C3)の領域に居るユーザは,(C2)のを介して(B2)の領域に移動できるということです。
(C3)関連するタグ
  の機能で,現在のタグと関連するタグを求めることができます。タグ結果ページには,この機能を利用して,他のタグ結果ページに移動できるようになっています。

サイト内に限った 計算

 先のクローラによって得られたサイト内の隣接行列を用いて,サイト内に限っての を求めることができます(ダウンロード) 最終的な は,外部から張られたなどによって決定されますが,それでも現在のサイト内の構造によって,どのページが高い を持つかを知ることは重要です(このサイトでの計算結果の例) サイトの内部を幾ら増やしても,サイト全体のページランクの総和は変わりません。サイトの内部については,ウェブサイト内で関係に基づき, が再配分されているだけと考えられます。それ故に,もしもサイト管理者があまり重要と考えていないページが高い を持つ場合には,サイト内の構造を見直す必要があると云えます。

rel="nofollow" を活用しよう

 属性の一つである rel="nofollow" は,などによるサイトの宣伝的な アップを防止するために使用されることが殆どです。しかし,この属性の与えられた先には が流れないという効果を上手く利用することで,サイト内のページの をある程度コントロールすることができると考えられます。ページナビゲーション上,どうしてもは必要であるが,そのされたページには特に を必要としない場合(例えば,全ての記事ページ)などには,rel="nofollow" と追加することで の流出を防ぐことができると考えられます。そして,本当に を必要としているページに対して,適切に が流れるようにを調整すればよいのです。

参考


この記事を読んだ人はこんな記事も読んでいます 記事リコメンデーションについて

その他の関連する記事


関連記事/トラックバック

関連記事/トラックバックはまだありません

この記事にトラックバックを送るには?

コメントを投稿する

 
 (匿名可/必須/公開)
 (匿名可/必須/非公開)
 (必須)
コメントスパム防止のため投稿前に ランダムな数字 CAPTCHAについて を入力してから投稿してください。お手数ですがご協力のほど宜しくお願いいたします。