{rjumanpp} ver0.0.0.9993 サーバーモードに対応しました & vignetteを公開しました
はじめに
これまで
形態素解析器JUMAN++をRから操作するパッケージを作り始めました - ★データ解析備忘録★
【R】{rjumanpp}ver0.0.0.9991の変更点とパッケージの構想について - ★データ解析備忘録★
{rjumanpp} ver0.0.0.9992 表層形ではなく活用の原形を出力できるようになりました - ★データ解析備忘録★
GitHub
ver0.0.0.9993
そろそろ0.0.1にしてもいいかなあと思ってるくらいには形になってきました。今回のアップデートではサーバーモードをサポートする関数をつけました。
JUMAN++のサーバーモードに関しては以下の記事が分かりやすいです。
サーバーモードについて
JUMAN++ はサーバーモードとして常に起動しておくことができます。これにより、新しい入力のたびにJUMAN++ を呼び出すオーバーヘッドを回避し、結果を高速に得ることができます。
JUMAN++のサーバーモードはもともと、「ターミナルでRubyスクリプトを使ってローカルサーバーで起動しておいて、その状態でクライアント用の別のRubyスクリプトを使ってJUMAN++を動かす」、という大変面倒くさい手順で使います。
# ホストネーム、ポート番号は必要であればつける ruby script/server.rb --cmd "jumanpp --force-single-path" --host host.name --port 1234
でサーバーを起動して、
echo "新しいスマートフォンを買った" | ruby script/client.rb --host host.name --port 1234
のようにクライアントで形態素解析。
でも、これってかなり面倒くさいです。せっかくパッケージ化してるんだからサーバーの起動も形態素解析も全部Rでやりたい。
というわけで{rjumanpp}パッケージに全部組み込みました。
使い方
全部Rからやるといっても操作をRからやるだけで、Rubyは入ってなければ入れておいてください。
{rjumanpp}パッケージからサーバーモードを使うためには、まず jum_start_server()
関数でサーバーを起動します。そして、形態素解析の関数で server = TRUE を指定します。
# JUMAN++サーバーを起動 jum_start_server() # 関数内でserver=TRUEを指定 jum_wakati("新しいスマートフォンを買った", server = TRUE) #> [1] "新しい スマートフォン を 買った"
jum_start_server()
関数は、必要に応じてサーバーの名前とポート番号を指定することができます。デフォルトではlocalhostの12000ポートにつなぎます。
jum_start_server(host.name = "hoge", port = 1234)
速いの?
サーバーモードで JUMAN++ を利用することで、どの程度実行が速くなるのか見てみましょう。検証環境はMac OS , 3Ghz Corei7, メモリ16GBです。
# サーバーを利用しない system.time(jum_wakati("新しいスマートフォンを買った", server = FALSE)) #> ユーザ システム 経過 #> 0.114 0.178 0.325 # サーバーを利用する system.time(jum_wakati("新しいスマートフォンを買った", server = TRUE)) #> ユーザ システム 経過 #> 0.032 0.008 0.078
約4倍と、実行時間に明らかに差が出ていることが分かります。
何回か試しましたが、だいたい2〜4倍速くなります。
解析が終了したら、 JUMAN++ のサーバーを停止します。
jum_close_server()
vignette
今まで更新のたびにブログを更新していたのですが、やはり機能をまとめたものが欲しかったのでvignetteを書きました。