INPUTしたらOUTPUT!

忘れっぽいんでメモっとく

第72回R勉強会@東京でLTしてきた

以下メモ



前回の第71回R勉強会@東京のじゃん献本でオライリー・ジャパン様より以下の書籍を頂きました。

Rによるテキストマイニング ―tidytextを活用したデータ分析と可視化の基礎

Rによるテキストマイニング ―tidytextを活用したデータ分析と可視化の基礎


ということで本書のニーズはあまり高くはないかもしれませんがtidyなテキストデータの概念とその処理方法を日本語で学ぶには良いのではないでしょうか。 日本語テキストデータを分析するにあたり{RMeCab}の結果をtidyにしようとするとハマった箇所があったため、飛び込みLTで発表させていただきました。

www.slideshare.net

  • RMeCab::RMeCabDF()はtibbleの場合、最初の1行しか処理されないから注意
  • RMeCab::RMeCabDF()は結果を名前付きベクトルのリストで返すためpurrr:pmap_df()でtidyにする
    • もっとスマートな方法があればご教示ください
  • RMeCab::docDF()でNグラムを作成すると重い&扱いづらいのでdplyr::lead()で作成すると楽

というのがお伝えしたかった内容です。


本書の第1章ではストップワードの除去に{tidytext}に含まれているstop_wordsデータを使用していますが、日本語テキストデータの場合は京都大学が公開しているSlothLibストップワードが利用できます。

Rで読み込むには以下のようにします。

> library(readr)
> stop_words <- readr::read_lines("http://svn.sourceforge.jp/svnroot/slothlib/CSharp/Version1/SlothLib/NLP/Filter/StopWord/word/Japanese.txt") %>% 
+   tibble(word = .)
> stop_words
# A tibble: 330 x 1
   word  
   <chr> 
 1 あそこ
 2 あたり
 3 あちら
 4 あっち
 5 あと  
 6 あな  
 7 あなた
 8 あれ  
 9 いくつ
10 いつ  
# ... with 320 more rows


また本書の第2章ではセンチメント分析が取り上げられていますがtidytext::get_sentiments()で取得できる感情辞書は英文データのみのため日本語の感情辞書は別に準備する必要があります。 日本語の感情辞書は

などがあり、それぞれRで読み込むには以下のようにします。

> # 日本語評価極性辞書(名詞編)の場合
> dic <- read_delim("http://www.cl.ecei.tohoku.ac.jp/resources/sent_lex/pn.csv.m3.120408.trim", 
+                   delim="\t", col_names = FALSE, locale = locale(encoding = 'UTF8')) %>% 
+   rename(word = X1, sentiment = X2, vp = X3)
Parsed with column specification:
cols(
  X1 = col_character(),
  X2 = col_character(),
  X3 = col_character()
)

> dic
# A tibble: 13,314 x 3
   word       sentiment vp                          
   <chr>      <chr>     <chr>                       
 1 2,3日   e         〜である・になる(状態)客観
 2 10%        e         〜である・になる(状態)客観
 3 100%       e         〜である・になる(状態)客観
 4 25%        e         〜である・になる(状態)客観
 5 80%        e         〜である・になる(状態)客観
 6 10カ月   e         〜である・になる(状態)客観
 7 10時間   e         〜である・になる(状態)客観
 8 10数年   e         〜である・になる(状態)客観
 9 10年以上 e         〜である・になる(状態)客観
10 10年近く e         〜である・になる(状態)客観

> # PN Tableの場合
> dic <- read_delim("http://www.lr.pi.titech.ac.jp/~takamura/pubs/pn_ja.dic", 
+                   delim=":", col_names = FALSE, locale = locale(encoding = 'CP932')) %>% 
+   rename(word = X1, yomi = X2, hinshi = X3, sentiment = X4)
Parsed with column specification:
cols(
  X1 = col_character(),
  X2 = col_character(),
  X3 = col_character(),
  X4 = col_double()
)
> 
> dic
# A tibble: 55,125 x 4
   word     yomi     hinshi sentiment
   <chr>    <chr>    <chr>      <dbl>
 1 優れる   すぐれる 動詞       1    
 2 良い     よい     形容詞     1.000
 3 喜ぶ     よろこぶ 動詞       1.000
 4 褒める   ほめる   動詞       1.000
 5 めでたい めでたい 形容詞     1.000
 6 賢い     かしこい 形容詞     0.999
 7 善い     いい     形容詞     0.999
 8 適す     てきす   動詞       0.999
 9 天晴     あっぱれ 名詞       0.999
10 祝う     いわう   動詞       0.999
# ... with 55,115 more rows


あとは本書の内容に従ってセンチメント分析やトピックモデリングを行うだけです。


というわけで本書の内容を日本語テキストデータで行う際に参考になれば幸いです。 また{RMeCab}の作者である石田基広氏の以下の著作も対応分析やクラスター分析が説明されておりおすすめです。

Rによるテキストマイニング入門

Rによるテキストマイニング入門