このスクリプトは、ポスター発表の内容をテキストマイニング技術で解析し、要旨の内容を利用してポスターの内容が似ているかどうか、その相関度合いをスコアとして計算するのに作成したものです。
さらに、内容の近いポスター同士を線で結んだネットワーク図も出力できるよう、描画プログラムGraphvizと、それのインターフェースライブラリGvizを利用したスクリプトも作成しました。
このスクリプトがエントリーポイントです。
- ポスター発表の内容をまとめたCSVファイルがあったので、そこから「タイトル」「要旨」などの要素を順番に取り出して、ハッシュ「posters」に読み込みます。
- 次に作成したハッシュpostersを、MecabFreqクラスのeachFreqメソッドに渡し、全ポスター要旨から、それらに出現した単語と出現頻度のリスト「freq」を取得します
- 次にPosterCorrelationクラスにpostersとfreqを渡し、各ポスターごとに、そのポスターとの内容の近さを残り全てのポスターについて計算し、スコア順に返却された2次元リスト「correlation」を取得します。
- 最後にPosterGraphクラスにPosterCorrelationオブジェクトのposterDistanceメンバ変数を渡し、得たいネットワーク図の形に対応したメソッドを呼び出して、ネットワーク図を出力します。
形態素解析プログラムMeCabを利用して、ポスター要旨を解析します。
- initializeでは、MeCabの使用準備と、事前に用意した使用しない単語リストを読込みます。
- addWordFromMecabでは、textの内容をMeCabに渡して形態素解析させ、得られた形態素から単語を抜き出して、freqに単語を追加・または出現頻度値を更新します。
- correctFreqでは、頻度値リストfreqの中身を見て、値を補正します。
- eachFreqでは、全ポスターの要旨について、一つずつaddWordFromMecabに渡し、そこから得られた出現頻度値リストをcorrectFreqに渡します。全てのポスター要旨についての出現頻度値リストが得られたら、最後にそれらを一つにマージして、改めてそれをcorrectFreqに渡して補正します。
全ポスターについて、よく出現する単語のリストを利用して、内容の相関度合いを計算します。
- @@lowerFreqと@@upperPostersはパラメータです。
- 出現頻度値が@@lowerFreqの値以上で、かつ、ある単語を含むポスター数が@@upperPosters以下である単語のみを、相関の計算に用います。
- initializeでは、単語ごとに、その単語を含むポスターのリストを作成します。
- その後ポスターごとに、同じ単語を共有するポスターをまとめたリストを作り、共有単語数が多い順に並べかえます。
ポスターの相関リストから、発表者名をノード、相関をエッジで表したネットワーク図を出力します。
- initializeでは、ネットワーク図作成のための各種パラメータを設定します。
- @rankは、各ポスターの相関先で、共有単語数の多い順で上位いくつまでを図に出力するか決めます。
- @depthは、ポスターの相関先のさらに相関先を、いくつまで図に出力するか決めます。
- @nodesは、各ポスターの相関先をいくつまで図に出力するか決めます。
- @fontsは、相関先の発表者名を表示するのに使用するフォントサイズを決めます。
- makeScoreEdgesでは、posterSearchで指定したポスターからみた相関先を出力するように、Gvizのメソッドを呼び出します。
- allPosterGraphでは、全てのポスターについて、それぞれそれを中心にしたネットワーク図を、上記のパラメータにそって作成します。