NLang

単語の出現頻度

人工知能の話題となっているテーマの一つに「Webの情報をうまく利用しよう」というものがあります.Webには,文章・画像・動画など膨大な情報があります.しかし,それらの信頼のレベルは様々だったり,どこに必要な情報があるのか分かりません.それらを,うまく取捨選択し整理してやり,必要な情報を利用しやすいようにユーザーに提供するシステムというのが求められています.例えば検索システムなんかがその一つです.

特に,文章を解析して情報を得る技術は面白いです.実は,私個人の興味は別のところにあるのですが,入門編として,以下では単語の出現頻度を調べてみました.



ツール

用いたツールを簡単に紹介します.まず,オープンソースの形態素解析エンジンであるMeCab(和布蕪)です.そして,言語処理を行うプログラム言語Perl,出力結果をグラフィカルに表示するためのProcessingです.



形態素解析

処理のはじめとして,形態素解析を行います.MeCabは優れた形態素解析エンジンなので信頼して中身も見ないで使います.インストールの仕方,使い方など詳しくは外部サイトを参考にしてください.



出現頻度の解析

次に,perlのハッシュを使って単語の出現頻度を調べます.プログラム例は検索するといくらでも出てきますので検索してみてください.最終的には,それぞれの単語の出現頻度を最大のもので割った値を指標として用いました(つまり,0から1の間で正規化したということ).



結果

結果は,上位100個だけ,単語の出現頻度が高ければ大きい文字かつはっきりと出力することにしました(単語の出現頻度に対して,文字の透明度は線形ですが,大きさはシグモイド的に変化するようにしています).ただし,単語の色や位置はランダムです.

(1)それでは,ウィキペディアで“ドラえもん”を検索し,その文章の単語出現頻度を調べます.


図:文章『ドラえもん』の結果


ついでなので,英語版でも調べてみます.




図:文章『DORAEMON』の結果


まず,当然のことですが,“ドラえもん”や“のび太”,英語なら``Doraemon"や``Nobita""という単語が多く出てきています.しかし,同時に`the""や``and""というどんな文章にも多いであろう単語も含まれてしまっています.

(2)さらに,色々な文章を解析してみます.単語の出現頻度を表すの出力から元の文章の内容が推測できるでしょうか?何となくできそうですが,難しい気もします.

キーワードとなる単語を一つ見つけてしまえば簡単な場合がありますが,そのキーワードとなる単語が大きくはっきりと出力されるとは限りません.もしくは,一つのキーワードではなくて,組み合わせでその文章の内容が何となく分かることもあります.


図:WebページAの結果



図:WebページA'の結果



図:論文Bの結果



図:論文B'の結果



図:文章Cの結果



図:文章C'の結果