気がついたら年度末。
週1で更新していた習慣を取り戻さないと。
今回のメインである
tf-idf
文章中の単語に関する重みの一種です。
wikipediaの説明ページはコチラ
数式アレルギーが若干あると泣きたくなりますけど、噛み砕いてしまえば簡単。
色々計算方法はありますが、今回はPythonのライブラリーであるnltkを基準にしています。
tf.
Term Frequency:多く出現する単語を重視します
tf(t,d)=ある単語tの文章d内での出現回数÷文章d内の単語の出現総数
例.
文章A:[リンゴ, レモン, レモン]
文章B:[リンゴ, ミカン],
文章C:[リンゴ,ミカン,スイカ]
tf(リンゴ,A)=1/3
tf(レモン,A)=2/3
tf(ミカン,B)=1/2
tf(ミカン,C)=1/3
tf(スイカ,C)=1/3
idf.
IDF(Inverse Documents Frequency):横断的に使われている単語は重要視しません
idf(t)=log(全文章数÷単語tが出現する文章数)
単なる逆数だけでidfを設定すると、特殊な表現の値が異常になってしまいます。
例えば1000個の文章で1文でしか使われていない単語のidfは1000。
1000個の文章で500文で使われている単語のidfは2。
これだと比較ができない。
log(1000,10)=3
log(2,10)= 0.3
または
log(1000)= 6.90
log(2)= 0.69
これなら感覚的に分かりやすい。
常用対数・自然対数で数字を抑えるらしいです。考えた人は本当に頭が良い。
先ほどの文章を自然対数で処理すると
文章A:[リンゴ, レモン, レモン]
文章B:[リンゴ, ミカン],
文章C:[リンゴ,ミカン,スイカ]
idf(リンゴ)=log(3/3)=0
idf(レモン)=log(3/1)=1.10
idf(ミカン)=log(3/2)=0.41
idf(スイカ)=log(3/1)=1.10
これで最後に掛ければtf-idfができます。
tf(リンゴ,A)×idf(リンゴ)=0
tf(レモン,A)×idf(レモン)=0.73
tf(ミカン,B)×idf(ミカン)=0.20
tf(ミカン,C)×idf(ミカン)=0.14
tf(スイカ,C)×idf(スイカ)=0.37
リンゴは全ての文章に出てきているので数値が0になりました。
idfが0にならないように結果に1を足す方法もありますが、今回は無視します。
同じミカンでも、文章B(単語総数2)のほうが文章C(単語総数3)より値が高くなっているのが分かります。
文章Cでは、スイカ(文章Cのみで使用)よりもミカン(文章Bと文章Cで使用)の値が高くなっています。
本題.
綺麗な文章で比較できそうなもの…ということで政党綱領が思い浮かびました。
これを使って各政党の綱領を解析してみます。
政党への綱領を解析していますが、
どこの政党を貶めてやろう
どこの政党を褒め称えよう
といった趣旨は一斉含んでおりません。
1.使用するデータ
各政党の綱領またはそれに属すると考えられるページの文章。
複数ある場合は最新のものを使いました。
これらをMecabで分かち書きにして、名詞・動詞・形容詞・形容動詞をnltkのtf-idf分析にかけます。
自民党(https://www.jimin.jp/aboutus/declaration/)
民主党(http://www.dpj.or.jp/about/dpj/principles)
公明党(https://www.komei.or.jp/komei/platform/)
維新の党(https://ishinnotoh.jp/about/outline/)
日本共産党(http://www.jcp.or.jp/web_jcp/html/Koryo/)
次世代の党(http://www.jisedai.jp/outline)
社民党(http://www5.sdp.or.jp/vision/vision.htm)
2.結果
数値の高い順に10位まで表示します。
7つの政党の綱領を読み比べた時、特徴的な言葉になっています。
・自民党
自民党と民主党の綱領では、党名に重みがあまりないようです。
10位までに政党名が出現しませんでした。
何かを「護る」ようです。
護る : 0.018741
我々 : 0.012065
努力 : 0.009520
義務 : 0.009370
立党 : 0.009370
共助 : 0.009370
地域社会 : 0.008043
恵まれる : 0.006247
帰属 : 0.006247
温かい : 0.006247
・民主党
「正義」と少し強めな言葉がありました。
「持続可能な社会」を目指しているようです。
私 : 0.034244
たち : 0.015297
正義 : 0.008865
具現 : 0.008865
歩む : 0.008865
持続可能な社会 : 0.008865
直す : 0.008865
十分 : 0.008561
合う : 0.005790
もたらす : 0.005790
・公明党
「人間」「地球」とスケールが大きいようです。
「べ」は「~すべき」の部分を抜き出しているようです。
われわれ : 0.023063
人間 : 0.013180
わが国 : 0.010208
公明党 : 0.010090
ベ : 0.010090
地球 : 0.009280
庶民 : 0.007207
ところ : 0.007207
暮らし : 0.005766
生活者 : 0.005649
・維新の党
中央集権から「自治・分権」「自立」「民権」がテーマのようです。
維新の党 : 0.027407
リベラル : 0.013704
抱える : 0.013704
民権 : 0.013704
我が国 : 0.011934
勢力 : 0.008950
分権 : 0.008822
結集 : 0.008822
統治機構 : 0.008822
国家 : 0.007882
・日本共産党
他の党とは雰囲気が明らかに違います。
ただこれだけの情報だと
「アメリカ」の「資本主義」に基づいて「大企業」を応援している党
とも読み取れてしまうので、文章に対するある程度の予備知識は必要になりそうです。
アメリカ : 0.013627
資本主義 : 0.012264
日本共産党 : 0.009539
たたかう : 0.008176
統一戦線 : 0.007495
めざす : 0.007457
重大 : 0.006132
面 : 0.006132
大企業 : 0.005702
支持 : 0.005451
・次世代の党
次世代の名前が示すように「孫」「引き継ぐ」「子供」に重みがあります。
我々 : 0.022660
次世代の党 : 0.015085
他方 : 0.010056
新保守 : 0.010056
孫 : 0.010056
引き継ぐ : 0.010056
永遠 : 0.010056
子供 : 0.010056
創る : 0.010056
独立 : 0.009711
・社民党
他の等にはない「自然環境」が出現。
私 : 0.012275
社会民主主義 : 0.011652
人々 : 0.009748
自然環境 : 0.008474
共生 : 0.006820
誰 : 0.006356
所得 : 0.006356
働く : 0.006138
たち : 0.005788
拡充 : 0.005296
今後.
簡単な操作で文章の特徴語を抜き出すことが出来ました。
綱領だけあって固めの表現が多く、tf-idfには少し向かなかったかもしれません。
もう少し高い値が出てくる予想でしたが・・・文章の方向性がある程度似通っているほうが良い結果が出そうです。
今回は文章数が7つと少なかったので、今度は100個以上の文章で試してみたいですね。
ツイート文とかにも使えるようになると面白そうです。