はてなダイアリーキーワード連想語API + グラフ理論

id:ya_ken:20060625:1151238191で書いた通り、何か勉強したらそれを形にすることに積極的に体力を使う事にした。

今日は復習がてらグラフ理論の入門書を読んでて面白いアイディアを思いついたので、試しに実装してみた。

なにをやったか

あるキーワードのリストがある時に、それらのリストから少し離れたところにあるキーワードを見つけるツール。って書いても分かりづらいと思うから、例をあげる。

これは線が繋がっているときは連想出来ることを意味する。つまりキーワードAからCとDが連想された事が分かる。最初の入力をAとBとした時に2段階連想するとF, G, H, Iの4キーワードが出てくるが、これらの中で最もA, Bから強く連想されたのはどれだろうか?

これを導くためにGoogleページランクのような考え方が使える。この例で言えば最初のA, Bにはそれぞれスコア1を与える。

A: 1.0
B: 1.0

AとBは自分から連想されたキーワードに自分のスコアを均等に分け与える。例えばAはCとDを連想しているからそれぞれに0.5点ずつ与える。同様にBからの連想語も処理すると下記のようになる。

C: 0.5
D: 1.0
E: 0.5

さらに続けると…

F: 0.75
G: 0.25
H: 0.5
I: 0.5

となる。よって、キーワードFがもっとも強く連想されたキーワードであることが分かる。

この仕組みで実際のキーワードを処理してみたので、幾つか例を書いて締めくくる。

Ajax」から3ステップ連想したベスト10

ウェブサイト, プロトコル,との,TrackBack,DMonkey,BLINK,Netscape,オブジェクト指向,恵文社一乗寺店,マイクロソフト

Perl」から3ステップ連想したベスト10

シリーズ, アメリカ, メーカー,ザウルス, PDA,情報,Linux,trackback,Becky!,weblog,MovableType,SL,

Perl + Ajax」から2ステップ連想したベスト10

日本, ホンダ, オライリー, ロサンゼルス, カリフォルニア大学, 言語学, コンサルタント, 志村貴子, WWW, World Wide Web,サジェスト


ちなみに、このスクリプト公開してもいいのだけど、凄い数のリクエストを投げるから、ちょっとはてなに対して後ろめたいので、公開しません。今のところは。