青空文庫のホームページにアクセスして、作品をダウンロードしようとすると、「テキストファイル(ルビあり)」とか書いてあります。ルビ付きなんですね。ということは、テキスト処理するときは、それを取り除かないといけないですね。で、RMeCabにはまたまた便利な機能があるんです。青空文庫の作品を読み込んでくれて、しかもルビを削除してくれる関数が。以下のようにコマンドを打ちこんで下さい。
> source("http://rmecab.jp/R/Aozora.R")
> kaze <- Aozora(url = "https://www.aozora.gr.jp/cards/000081/files/462_ruby_716.zip")
> kaze
[1] "./NORUBY/kazeno_matasaburo2.txt"
>
ルビのないテキストファイルが、NORUBYというディレクトリに作られました。このkazeno_matasaburo2.txtというファイルをテキストエディタで開いて、確認してみて下さい。ここで形態素解析をして、各単語の出現頻度を求めてみましょう。
> library(RMeCab)
> freqapp <- RMeCabFreq(kaze)
file = ./NORUBY/kazeno_matasaburo2.txt
length = 2025
> head(freqapp)
Term Info1 Info2 Freq
1 あ フィラー * 28
2 あの フィラー * 3
3 うんと フィラー * 1
4 え フィラー * 4
5 なんか フィラー * 1
6 ま フィラー * 4
>
Termというのが形態素で、Info1が品詞(大分類)、Info2が品詞細分類、Freqが出現頻度を表しています。フィラーというのは、デジタル大辞泉によれば、「埋めるもの」「詰め物」の意です。こういう語句は必要なかったりしますので、subsetという関数を使って、抽出したい品詞や除外したい品詞を指定します。で、大分類から「形容詞」を残して、細分類から数、非自立、接尾にあたる用語を除外します。
> freqapp1 <- subset(freqapp, Info1 %in% c("形容詞"))
> freqapp2 <- subset(freqapp1, !Info2 %in% c("数", "非自立", "接尾"))
> freqapp3 <- freqapp2[order(freqapp2$Freq, decreasing = T),]
(上のコマンドは、単語を出現頻度順に並べ直しているだけです。)
> head(freqapp3)
Term Info1 Info2 Freq
65 ない 形容詞 自立 43
114 白い 形容詞 自立 19
101 青い 形容詞 自立 15
38 いい 形容詞 自立 14
79 悪い 形容詞 自立 13
104 赤い 形容詞 自立 13
>
で、1列目(Term)と4列目(Freq)を抜き出してデータフレームを作った上で、上位20個に絞り込みます。
> freqapp1.df <- data.frame(word=as.character(freqapp3[,1]), freq=freqapp3[,4])
> freqapp2.df <- subset(freqapp1.df, rank(-freq)<20)
barplotを使って、ヒストグラムを表示してみましょう。「風の又三郎」は、不思議な物語です。それが、文章表現に表れているでしょうか。
> x <- freqapp2.df$freq
> names(x) <- freqapp2.df$word
> barplot(x, ylab = "Freq", las = 2)
0 件のコメント:
コメントを投稿