Rで良いSudachi Life（wordcloud編）

# 前回までの記事
https://qiita.com/Mitz-TADA/items/ade1806dd4644bfa5a37

https://qiita.com/Mitz-TADA/items/760675cd7502d09a3542

# 今回
　wordcloudに挑戦です。SudachiPy、nagisa、MeCabで比較してみました。Google Colaboratoryを使います。

# R環境の作成
　まず、次のリンクからRのノートブックを新規作成します。
https://colab.research.google.com/notebook#create=true&language=r

# wordcloudの準備
```r
# 日本語IPAフォントをインストール、wordcloudで日本語表示に必要
system("apt-get install -y fonts-ipafont")

# wordcloudをインストール
install.packages("wordcloud")
library(wordcloud)
```

# PythonとRの間で相互運用するためのパッケージreticulateをインストール
```r
install.packages("reticulate")
library(reticulate)
```

# 青空文庫「ごんぎつね　新見南吉」のテキストの前処理
```r
# 青空文庫のテキスト整形関数
aozora <- function(url){
  zip_file_name <- basename(url)
  if (!file.exists(zip_file_name)) download.file(url, destfile=zip_file_name)
  unzip_file_name <- unzip(zip_file_name)
  is_delete <- FALSE
  unzip_file_name |>
    scan(what=character(), fileEncoding='CP932') |>
    lapply(function(txt) {
        if (grepl('^------', txt)) {is_delete <<- !is_delete; return()}
        if (grepl('^底本|［＃本文終わり］', txt)) is_delete <<- TRUE
        if (is_delete) return()
        gsub('［＃[^］]*］|《[^》]*》|｜|　', '', txt)
      }) |>
    unlist() ->
    no_ruby_text
  unzip_file_name |> strsplit('.txt') |> paste0('2.txt') -> no_ruby_file_name
  write(no_ruby_text, no_ruby_file_name)
  # no_ruby_text
  no_ruby_file_name
}


# テキスト整形後のファイル名
gongitsune <- aozora("https://www.aozora.gr.jp/cards/000121/files/628_ruby_649.zip")
```

# SudachiPyでwordcloudの作成
```r
# sudachipy と辞書 sudachidict_core をインストール
system('pip install sudachipy sudachidict_core')
sudachipy <- import("sudachipy")

dict <- sudachipy$Dictionary()  # まずは辞書を作る
tokenizer <- dict$create()  # 辞書から分割器を作る

# 分割する
gongitsune |>
  scan(what=character()) |>
  lapply(tokenizer$tokenize) |>
  sapply(iterate) |>
  unlist() |>
  sapply(function(m) c(m$surface(), unlist(m$part_of_speech())[1])) ->
  words

# 名詞だけ抽出し、頻度表を作成
words[1, words[2,] == "名詞"] |>
  table() ->
  gon

# wordcloudの作成
wordcloud(names(gon),gon,scale=c(10,1),random.order=FALSE,color=brewer.pal(8,"Dark2"),family="IPAMincho")
```

![gon_s.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1849635/6dc2f63e-47fc-27a7-2747-a9445d1558a5.png)

# nagisaでwordcloudの作成
 下記の記事で紹介したnagisaでもwordcloudを作ってみた。

https://qiita.com/Mitz-TADA/items/a5ab178bd13e8f393371

```r
# nagisa をインストール
system('pip install nagisa')
nagisa <- import("nagisa")

# 分割し名詞だけ抽出、頻度表を作成
gongitsune |>
  scan(what=character()) |>
  lapply(function(t) nagisa$extract(t, extract_postags=list('名詞'))$words) |>
  unlist() |>
  table() ->
  gon

# wordcloudの作成
wordcloud(names(gon),gon,scale=c(10,1),random.order=FALSE,color=brewer.pal(8,"Dark2"),family="IPAMincho")
```

![gon_n.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1849635/124b4a11-67ad-3a01-0884-5a790bae8af9.png)

　「兵十」がいない！

# MeCabでwordcloudの作成
```r
# MeCab本体や辞書等の必要なシステムライブラリをインストール
system("apt-get install -y mecab libmecab-dev mecab-ipadic-utf8")

# RMeCabをインストール
install.packages("RMeCab", repos = "https://​rmecab.jp/R")
library(RMeCab)

# 分割し頻度表を作成
words <- RMeCabFreq(gongitsune)

# 名詞だけ抽出
gon <- words[words$Info1 == "名詞", ]

# wordcloudの作成
wordcloud(gon$Term,gon$Freq,scale=c(10,1),random.order=FALSE,color=brewer.pal(8,"Dark2"),family="IPAMincho")
```

![gon_m.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1849635/349d96fa-940c-d7f4-f134-5e367c304f59.png)

　「ごん」もいなくなった！