せっかくだから俺は各政党のホームページを解析するぜ

  • 17
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

目的

ネット選挙が解禁されて早一年、公職選挙法に反逆するような使い方がちらほらみられる、今日この頃いかがおすごしでしょうか。
さて、今回は、各政党のホームページを解析して、どんな単語が使われているかしらべ、似たような特徴のある政党を抽出してみようと思います。

手順

  1. 各政党のホームページをダウンロードしてくる。
  2. ダウンロードしたページをMecabで形態素解析する。
  3. tf-idfで各単語のスコアを求める
  4. コサイン類似度による文章の距離の測定を行い、政党間の距離を求める。
  5. GraphVizで、その関連を表示する。

結果

2014年の各政党のホームページ解析
http://needtec.sakura.ne.jp/analyze_election/page/analyzehp/2014

ソースコード
https://github.com/mima3/analyze_election/tree/master/script_comp_manifesto

ソースコードをダウロードしてきて以下のスクリプトを実行する。

# ホームページをダウンロードしてDBに格納
python create_parties_db.py parties_hp_2014.sqlite party_hp_json_2014.json

# 形態素解析して単語の数の集計
python create_parties_tokens.py parties_hp_2014.sqlite

# tf-idfとコサイン類似度の計算をして結果をJSONとPNGに記録する。
python create_tf_idf_report.py parties_hp_2014.sqlite party_hp_result_2014.json  party_hp_result_2014.png "ms ui gothic"

実行には下記のライブラリをインストールする必要があります。
・nltk
・lxml
・MeCab
・urllib2
・pydot

解説

tf-idfによる文章の解析

文章yにおいて単語xのtf-idfの値は以下のようになる。

tf = 文章y中に単語xが登場した数 / 文章中の単語数
idf = 1.0 + log( 文章の総数 / 単語xが登場する文章の数 )
tf-idf = tf × idf

多くのドキュメントに登場する単語は重要度が下がりスコアが低くなり、特定のドキュメントにしか登場しない単語は重要度があがりスコアが大きくなる

コサイン類似度による文章の距離の測定

文章1が単語(A,B,C)を持っており、その単語のTF-IDFの値が(0.1,0.2,0.3)とする。
文章2が単語(C,D,E)をもっており、その単語のTF-IDFの値が(0,4,0.5,0.6)とする。

文章に存在しない単語のTF-IDFを0とするとして、全ての単語についてのTF-IDFを作成する。

文章1の(A,B,C,D,E)は(0.1,0.2,0.3,0,0)となる。
文章2の(A,B,C,D,E)は(0,0,0.4,0.5,0.6)となる

この文章1と文章2のベクトルの角度のコサインは両者の類似度を表す。
まったく同じ文章の場合は文章1と文章2の角度は0度になる。

Pythonの場合は、nltk.cluster.util.cosine_distanceで計算してくれる。