第72回R勉強会@東京でLTしてきた
以下メモ
前回の第71回R勉強会@東京のじゃん献本でオライリー・ジャパン様より以下の書籍を頂きました。
Rによるテキストマイニング ―tidytextを活用したデータ分析と可視化の基礎
- 作者: Julia Silge,David Robinson,大橋真也,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2018/05/18
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
- 原著がGithubで公開されている
- {tidytext}のvignetteが@nakamichi氏によって翻訳されている
- 本書で扱うデータが英文テキストデータ
- サポートサイトに付録として日本語テキストデータの解説はある
ということで本書のニーズはあまり高くはないかもしれませんが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}
の作者である石田基広氏の以下の著作も対応分析やクラスター分析が説明されておりおすすめです。
- 作者: 石田基広
- 出版社/メーカー: 森北出版
- 発売日: 2017/06/28
- メディア: 単行本
- この商品を含むブログ (1件) を見る
- 次回は10/20@エウレカ、次次回は11/10@サイバーエージェント
- 素敵な会場を提供していただいたFiNC様ありがとうございました
- みんなで筋肉体操 - NHKで筋トレしてること話せば良かったなー無念