knitr::opts_chunk$set(echo = TRUE, collapse = TRUE, comment = "#>", message = FALSE)
rjumanpp パッケージは、表記ゆれや話し言葉に強いと言われる日本語形態素解析器 JUMAN++ を R から操作するためのパッケージです。
現在、JUMAN++ は Windows には対応していないようです。
Homebrew でインストールできます。
```{bash, eval=FALSE} $ brew install jumanpp
#### Linux(例: Ubuntu) ```{bash, eval=FALSE} $ wget http://lotus.kuee.kyoto-u.ac.jp/nl-resource/jumanpp/jumanpp-1.01.tar.xz $ tar xJvf jumanpp-1.01.tar.xz $ cd jumanpp-1.01/ $ ./configure $ make $ sudo make install
githubinstall::githubinstall()
関数または devtools::install_github()
関数でインストールします。
# if you have not installed "githubinstall" and "devtools" packages install.packages(c("githubinstall", "devtools")) # using githuninstall githubinstall::githubinstall("rjumanpp") # usingdevtools devtools::install_github("ymattu/rjumanpp")
rjumanpp パッケージのソースコードは以下のGitHubレポジトリで公開しています。
https://github.com/ymattu/rjumanpp
rjumanpp パッケージは形態素解析に関する基本的な関数を提供します。
jum_c()
jum_wakati()
jum_text()
jum_file()
また、JUMAN++ をサーバーモードで動かすための関数もサポートしています。
jum_start_server()
jum_close_server()
関数には jum
という共通のプレフィックスをつけています。関数を使うためには、 rjumanpp パッケージを以下のように読み込む必要があります。
library(rjumanpp)
文字列を引数として単純な形態素解析をしたい場合は、jum_c()
関数を使います。 RMeCab::RMeCabC()
のように、品詞が names 属性のリストを返します。
jum_c("私はミルクティを飲みました")
単純に文章を入力して分かち書きを得たい場合は jum_wakati()
関数を使います。オプションを何も指定しない場合は、入力した文字列の表層形を返します。
jum_wakati("私はミルクティを飲みました")
品詞を指定して分かち書きを得ることもできます。
jum_wakati("私はミルクティを飲みました", pos = "名詞")
pos
引数は ICU 正規表現による指定が可能で、pos = "名詞|形容詞"
のように書くこともできます。
第二引数(mypref
)を1にすると、活用のある品詞に関してはその原形を返します。
# 活用形は原形で jum_wakati("私はミルクティを飲みました", 1)
redirect
オプションを TRUE
にすることで、表記ゆれ(JUMAN++ の Wikipedia リダイレクトで取得)を置き換えることができます。
jum_wakati("私はけんさくえんじんぐーぐるを使う", redirect = TRUE) jum_wakati("私はけんさくえんじんぐーぐるを使う", pos = "名詞", redirect = TRUE)
pos
, redirect
, mypref
, 後述する server
引数は現在以下の関数で使うことができます。
jum_c()
jum_wakati()
また、以下の関数では server
引数のみをサポートしています。
jum_text()
jum_file()
実際にデータ解析をする場合、データフレームの特定の列に対して形態素解析をしたいことがしばしばあります。そのような時は、 dplyr::rowwise()
関数で1行ごとに区切って jum_wakati()
関数に渡します。
library(dplyr) library(knitr) # 出力のため a <- data_frame(id = c(1:3), text = c("新しいスマートフォンを買った", "今夜はミルクティを飲む", "私には外国人参政権がある")) a %>% rowwise() %>% mutate(wakati = jum_wakati(text)) %>% kable()
jum_text()
関数JUMAN++に文字列を渡して、素の結果を出力します。
jum_text("新しいスマートフォンを買った")
jum_file()
関数jum_text()
関数の入力をテキストファイルにしたバージョンです。
JUMAN++ はサーバーモードとして常に起動しておくことができます。これにより、新しい入力のたびにJUMAN++ を呼び出すオーバーヘッドを回避し、結果を高速に得ることができます。
サーバーモードを使うためには、Ruby
がインストールされている必要があるため、インストールされていない場合は適宜インストールをしてください。
rjumanppパッケージからサーバーモードを使うためには、まず jum_start_server()
関数でサーバーを起動します。そして、形態素解析の関数で server = TRUE
を指定します。
# JUMAN++サーバーを起動 jum_start_server() # 関数内でserver=TRUEを指定 jum_wakati("新しいスマートフォンを買った", server = TRUE)
jum_start_server()
関数は、必要に応じてサーバーの名前とポート番号を指定することができます。デフォルトではlocalhostの12000ポートにつなぎます。
jum_start_server(host.name = "hoge", port = 1234)
サーバーモードで JUMAN++ を利用することで、どの程度実行が速くなるのか見てみましょう。
# サーバーを利用しない system.time(jum_wakati("新しいスマートフォンを買った", server = FALSE)) # サーバーを利用する system.time(jum_wakati("新しいスマートフォンを買った", server = TRUE))
実行時間に明らかに差が出ていることが分かります。
解析が終了したら、 JUMAN++ のサーバーを停止します。
jum_close_server()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.