y-matsui::weblog

電子楽器、音楽、コンピュータ、プログラミング、雑感。面倒くさいオヤジの独り言

自己組織化するタグクラウドの実現に向けて(設計・・・らしきもの)

JoltMarkみたいなタグクラウド(意味ネットワーク)を構築する場合の手順(設計らしきもの)をメモしてみる。
■システムイメージ
登録時処理
・文書登録時・保存時に件名やコメント欄などの自由文を”形態素解析
形態素解析した結果(単語、単語間のつながり)を別テーブルに書き込み
タグクラウド生成時処理
・特定のキーワードの関連ノードを検索し、重み、キーワードのカテゴリ、ネットワークをグラフ化
※単語の出現頻度が中心からの距離、カテゴリが色、ノード間距離は二つの語句間の定数
タグクラウド上の単語をクリックすると、その単語の関連語句を再検索しネットワークグラフ化
タグクラウドの単語をダブルクリックすると、その単語を使って全文検索実行or検索条件に追加(AND検索)

■モデル
件名やサマリー、そしてタグとして表現される以上、これらはまとまった意味空間に属するはずだという”思い込み”を基本的な考え方とする。
・単語間のつながりは、厳密に意味のつながりを意味するものではない。
・a〜dという単語が含まれる場合、a-b,a-c,a-d,b-c,b-d,c-dはすべて等価の結びつきを持つものとする。
・複数の文書内で同様の結びつきがあった場合には、結合度が評価される(よりその2つの単語間の関係が補強される)

■制限事項
(一画面に描画できる単語数やCPUパワーを考慮して)一度に表現するノードは最大100などに定める。
語の重み順でソートし、語の配列が100になった時点でネットワーク図の描画を開始する。

■テーブル構成
[ tbl_word ]
ID(numeric):単語のユニークID
ワード(varchar):単語(形態素解析された品詞)
回数(numeric):出現回数←中心からの距離として表現される
グループ値(int): ←タグクラウドの色として表現される

[ tbl_node ]
ID(numeric):ノードのID
始点ワードID(numeric):
終点ワードID(numeric):
回数(numeric):←単語間の距離を表す。多重に結ばれた場合にカウントアップする(より強固に結びつきあう)


■プログラム構成
・保存処理(形態素解析
・ワードレコード登録処理
・ノードレコード登録処理
・タグ検索処理
・ネットワーク図描画処理


■クエリ
検索実行時:
・単語を指定すると、tbl_wordから一致するワードのIDを特定
・始点ワードIDが合致するノードと連結されたワードのIDをtbl_nodeから取得
・ワードのグループを色に、出現頻度を中心からの距離として2点分のグラフ生成
・2点のワードを指定し、ノードの”回数(多重度)”をEdgeWeightとしてノードの描画
・連結されたワードIDの上位から、下位ワードを再帰的に処理する
・総ワード数が上限に達したらループを抜ける。


文書登録時:
・自然文を形態素解析して、複数の単語に分割
・おのおのの単語に対して、tbl_wordに検索をかける。すでに存在していれば回数を+1する。存在していない単語なら新規に登録。
・おのおのの単語に対してノードレコードを生成する。始点ID/終点IDで検索し、存在していれば”回数”を+1する。存在しないノードであれば新規に登録。

※削除時や更新時の処理は考慮していない(=カウントは増えっぱなし)