「吾輩は猫である」のテキストを分析してみる (3)
「吾輩は猫である」のテキストを分析してみる (1)
「吾輩は猫である」のテキストを分析してみる (2)
前回までで、「吾輩は猫である」を形態素分析にかけたセル配列が手に入りました。今回は、単語の出現頻度を調べてみようと思います。前回のコードで、
in = txt(1:1000);
として、最初の1000文字だけを取り出し、下のコードで出現頻度をプロットしてみました。
% セル配列からカテゴリカル配列を作成 cat_array = categorical(result(:,1)); % 単語カテゴリーを作成 category = categories(cat_array); % 各カテゴリの出現回数 counts = countcats(cat_array); % 出現回数を出現パーセントに変換 prct = counts/sum(counts)*100; % 出現パーセントに従って降順でソート [~,I] = sort(prct,'descend'); prct_sorted = prct(I); category_sorted = category(I); % データを保存 save('neko.mat','result','category_sorted','prct_sorted') % グラフ表示 figure(1); clf x = 1:length(prct_sorted); y = prct_sorted; plot(x,y) title('「吾輩は猫である」形態素分析') xlabel('出現ランク') ylabel('出現パーセント') xmax = max(x); axis([0 xmax 0 prct_sorted(1)+1])
結果は下のようになりました。もとの単語数が少ないのでグラフがガタガタしています。
次に、全文を突っ込んでみると次のようになりました。軸に張りついていて分かりにくいですが、単語数が増えてグラフが滑らかになりました。
同じデータを、両対数グラフでプロットしてみると、下のように広い範囲でほぼ直線になりました。
loglog(x,y)
両対数グラフ上で直線になる関係を冪乗則 (べきじょうそく) といいます。これは、単語の出現頻度分布をふくめて、自然界のさまざまな状況で現れる関係性だそうです。「吾輩は猫である」の文章も例外ではなく、冪乗則に従うことがわかります。
さて、上位に出現するのはどんな言葉でしょうか?下のようにトップ50位を表示してみました。
plot(x,y,'o-') xmax = 50; axis([0 xmax 0 prct_sorted(1)+1]) text(x(1:xmax),y(1:xmax)+0.5,category_sorted(1:xmax))
すると、当然と言えば当然ですが、最上位は「の」「。」「て」「、」「は」…となっていて、文章に必ず登場するような助詞・助動詞や記号ばかりです。意味のある名詞としては「吾輩」がかなり多いはずと思い見てみたら、47位にランクインしていました。
xlim([45 50])
文章を特徴付ける単語を抽出してこようと思うと、記号・助詞・助動詞などは除いて名詞などに焦点を当てたほうが良さそうです。次回以降、やってみようと思います。
- 作者: 夏目漱石
- 出版社/メーカー: 新潮社
- 発売日: 2003/06
- メディア: 文庫
- 購入: 5人 クリック: 55回
- この商品を含むブログ (85件) を見る