★データ解析備忘録★

ゆる〜い技術メモ

【R】{rjumanpp}ver0.0.0.9991の変更点とパッケージの構想について

はじめに

現在開発中のJUMAN++をRから操作するパッケージ{rjumanpp}ですが、まだ完成には程遠いもののベースになる部分はほぼできており、前回からいくつか基本的な変更があります。

ver 0.0.9991

関数名について

rjumanppパッケージでは、解析に関係する主要関数名のプレフィックスを jum_* で統一しようと考えています。これは、関数名になるべく統一性をもたせることで関数名を思い出す手間を省くためと、あとはRStudioではデフォルトでは3文字入力すると自動で補完がスタートするので、プレフィックスは3文字にしたほうが自分も(もしいれば)ユーザーも使いやすいだろうと考えたからです。

関数

現時点で、関数は4種類あります。よく使うであろう順に紹介します。

jum_wakati()

文字列に対して分かち書きを返す関数です。

jum_wakati("私には外国人参政権がある。")
#> [1] "私 に は 外国 人 参政 権 が ある 。"

データフレームに対して使うときは、 dplyr::rowwise() をかませます。

library(dplyr)

a <- data_frame(id = c(1:3),
                text = c("新しいスマートフォンを買った", "今夜はミルクティを飲む", "私には外国人参政権がある"))

a %>%
  rowwise() %>%
  mutate(wakati = jum_wakati(text))

#> Source: local data frame [3 x 3]
#> Groups: <by row>
#> 
#> # A tibble: 3 x 3
#>      id                         text                           wakati
#>   <int>                        <chr>                            <chr>
#> 1     1 新しいスマートフォンを買った  新しい スマートフォン を 買った
#> 2     2       今夜はミルクティを飲む       今夜 は ミルクティ を 飲む
#> 3     3     私には外国人参政権がある 私 に は 外国 人 参政 権 が ある
jum_c()

文字列に対して、形態素解析をして名前付きリストとして返す関数です。 RMeCab::RMeCabC() にあたる関数です。

jum_c("私には外国人参政権がある。")
#> [[1]]
#> 名詞 
#> "私" 
#> 
#> [[2]]
#> 助詞 
#> "に" 
#> 
#> [[3]]
#> 助詞 
#> "は" 
#> 
#> [[4]]
#>   名詞 
#> "外国" 
#> 
#> [[5]]
#> 名詞 
#> "人" 
#> 
#> [[6]]
#>   名詞 
#> "参政" 
#> 
#> [[7]]
#> 名詞 
#> "権" 
#> 
#> [[8]]
#> 助詞 
#> "が" 
#> 
#> [[9]]
#>   動詞 
#> "ある" 
#> 
#> [[10]]
#> 特殊 
#> "。"
jum_text()

JUMAN++に文字列を渡して、素の結果を出力します。

rjumanpp::jum_text("新しいスマートフォンを買った")
#> [1]]
#> [1] "新しい"                       "あたらしい"                   "新しい"                      
#> [4] "形容詞"                       "3"                            "*"                           
#> [7] "0"                            "イ形容詞イ段"                 "19"                          
#> [10] "基本形"                       "2"                            "\"代表表記:新しい/あたらしい"
#> [13] "反義:形容詞:古い/ふるい\""   

#> [[2]]
#> [1] "スマートフォン"                "スマートフォン"                "スマートフォン"               
#> [4] "名詞"                          "6"                             "普通名詞"                     
#> [7] "1"                             "*"                             "0"                            
#> [10] "*"                             "0"                             "\"自動獲得:Wikipedia"         
#> [13] "Wikipedia上位語:用語/ようご\""

#> [[3]]
#> [1] "を"     "を"     "を"     "助詞"   "9"      "格助詞" "1"      "*"      "0"      "*"      "0"     
#> 12] "NIL"   

#> [[4]]
#> [1] "買った"                         "かった"                         "買う"                          
#> [4] "動詞"                           "2"                              "*"                             
#> [7] "0"                              "子音動詞ワ行"                   "12"                            
#> [10] "タ形"                           "10"                             "\"代表表記:買う/かう"          
#> [13] "ドメイン:家庭・暮らし;ビジネス" "反義:動詞:売る/うる\""  
jum_file()

jum_text() の入力がファイルになったバージョンです。

オプションについて

jum_text()jum_file() は素の結果を返すだけなのですが、 jum_c(), jum_wakati() はデータ分析を念頭に置いて作ったので、引数が設定できるようにしました。現在は二つの引数が設定できます。

pos

指定した品詞のみを出力することができます。 pos と言う名前は{RMeCab}がそうだったからです。ただし、指定のしかたはこちらは違っていて、 pos = "名詞" 、複数の場合は pos = "名詞|形容詞" のように指定します。正規表現になってるのは内部的に{stringr} パッケージで動かしているためです。

以下のような感じになります。

jum_wakati("私には外国人参政権がある。", pos = "名詞") 
#> [1] "私 外国 人 参政 権"
redirect

JUMAN++の特徴の一つとして、表記揺れに対応してることがあげられます。 redirect = TRUE と設定すると、出力の際に表記揺れとして予測された単語に置き換えることができます。この引数はデフォルトでは FALSE になっています。

jum_wakati("私はけんさくえんじんぐーぐるを使う", redirect = TRUE) 
#> [1] "私 は けんさく えんじん GOOGLE を 使う"

jum_wakati("私はけんさくえんじんぐーぐるを使う", pos = "名詞", redirect = TRUE) 
#> [1] "私 けんさく えんじん GOOGLE"

これから

現在、表層形(文中に出てきてる活用された形)の取り出ししか対応してないので、まずは活用語は原型を返すオプションをつけたいと思います。

あとはTF-IDFやBag Of Wordsは簡単に出せるようにしたいですね。

こんな機能が欲しいとかあれば、ぜひGitHubのissueにお願いします。もちろん日本語で大丈夫です。

Enjoy!!