1. 何をしている
python の言語処理ライブラリ nagisa を R で使えるか試してみた。環境は、Google Colaboratory を利用した。
言語処理ライブラリ nagisa を Python で使ってみた感想は、
-
pip install nagisa
のみでインストールできるので簡単 - シンプルなコードで単語分割と品詞タグ付けができるので憶えやすい
- ユーザー辞書の追加が簡単にできるので便利
この nagisa が、R でも使えたら便利だと考えたので、挑戦してみた。
2. 環境作成
(1) Google Colaboratory で、Rのノートブックを作成
Google Colaboratory で、次のリンクからRのノートブックを作成する。
https://colab.research.google.com/notebook#create=true&language=r
(2) nagisaのインストール
Colab のコードセルで、
system('pip install nagisa', intern=TRUE)
(3) reticulate パッケージのインストール
reticulate パッケージは、PythonとRの間で相互運用するためのツールを提供するパッケージである。
install.packages("reticulate")
library(reticulate)
(4) Colab では必要ないが、Python の Path の指定方法
python のパス確認
system('which python', intern=TRUE)
出力結果
'/usr/local/bin/python'
上の出力結果をコピーして、use_python()
関数の引数に貼り付ける。
use_python("/usr/local/bin/python")
3. 基本的な使い方
https://github.com/taishi-i/nagisa で紹介されている Python のコードを R のコードに変換。
(1) 単語分割と品詞タグ付け
nagisa <- import("nagisa")
text <- 'Pythonで簡単に使えるツールです'
words <- nagisa$tagging(text)
print(py_str(words), quote=FALSE)
# [1] Python/名詞 で/助詞 簡単/形状詞 に/助動詞 使える/動詞 ツール/名詞 です/助動詞
# 単語列のリストを取得
print(words$words)
# [1] "Python" "で" "簡単" "に" "使える" "ツール" "です"
# 品詞タグのリストを取得
print(words$postags)
# [1] "名詞" "助詞" "形状詞" "助動詞" "動詞" "名詞" "助動詞"
-
Python で
nagisa.tagging(text)
と.
を使っているのを、R ではnagisa$tagging(text)
と$
を使う。 -
print(words)
では、<nagisa.tagger.Tagger._Token object at 0x7fa6bee39f50>
と出力されるので、reticulate パッケージのpy_str()
関数を使う。
(2) 単語をフィルタリングして抽出
# 特定の品詞タグの単語をフィルタリングする
words <- nagisa$filter(text, filter_postags=list('助詞', '助動詞'))
print(py_str(words), quote=FALSE)
# [1] Python/名詞 簡単/形状詞 使える/動詞 ツール/名詞
# 名詞のみを抽出する
words <- nagisa$extract(text, extract_postags=list('名詞'))
print(py_str(words), quote=FALSE)
# [1] Python/名詞 ツール/名詞
# nagisaで利用可能な品詞タグの一覧
print(nagisa$tagger$postags)
# [1] "oov" "補助記号" "名詞" "空白" "助詞"
# [6] "接尾辞" "動詞" "連体詞" "助動詞" "形容詞"
# [11] "感動詞" "接頭辞" "記号" "接続詞" "副詞"
# [16] "代名詞" "形状詞" "web誤脱" "URL" "英単語"
# [21] "漢文" "未知語" "言いよどみ" "ローマ字文"
- R から Python にリストを渡すとき
- 要素が複数あるとき、
c()
、list()
どちらで Python に渡しても、Python でリストとして認識される。 - 要素が1個のときは、
c()
で Python に渡すと、Python ではリストとして認識されない。
- 要素が複数あるとき、
print(r_to_py(c('助詞', '助動詞')))
# ['助詞', '助動詞']
print(r_to_py(list('助詞', '助動詞')))
# ['助詞', '助動詞']
print(r_to_py(c('名詞')))
# '名詞'
print(r_to_py(list('名詞')))
# ['名詞']
(3) ユーザー辞書の追加
# 既定
text <- "3月に見た「3月のライオン」"
print(py_str(nagisa$tagging(text)), quote=FALSE)
# [1] 3/名詞 月/名詞 に/助詞 見/動詞 た/助動詞 「/補助記号 3/名詞 月/名詞 の/助詞 ライオン/名詞 」/補助記号
# single_word_listに単語リストを指定すると、1つの単語として認識される
new_tagger <- nagisa$Tagger(single_word_list=list("3月のライオン"))
print(py_str(new_tagger$tagging(text)), quote=FALSE)
# [1] 3/名詞 月/名詞 に/助詞 見/動詞 た/助動詞 「/補助記号 3月のライオン/名詞 」/補助記号