LoginSignup
3
0

More than 1 year has passed since last update.

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月のライオン/名詞 」/補助記号

4. 参考URL

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0