sudachi 0.6 を julia から動かしてみた。
「SudachiPy 0.5.4より早い」と言われる Sucachi 0.6 を PyCall 経由で julia から動かしてみました。
例によって与謝野晶子さん訳「源氏物語」の「桐壺」を青空文庫から落して丸ごと入れてみます。
例によってとは、2020年3月に行った sudachiPy を、python から使うのと、PyCall 経由の julia で使うのはどちらが早いのか と同じ処理です。2020年3月の sudachi は version を、書いてなかったので不明です。ターミナルからの操作でダウンロードとエンコーディングの変換を行います。MacBook Pro (Retina, 13-inch, Early 2015; 2.9 GHz デュアルコアIntel Core i5; メモリ 16 G) で測定しています。
[ターミナル] % wget https://www.aozora.gr.jp/cards/000052/files/5016_ruby_9746.zip % unzip 5016_ruby_9746.zip % nkf -Lu -w --overwrite 01kiritsubo.txt;
続いて julia からの操作です。生のまま読ませたら `Input is too long, it can't be more than 49149 bytes, was 53316` と怒られましたので、ルビを取り除いています。
julia> using PyCall, Dates julia> sudachipy = pyimport("sudachipy"); julia> dictionary = pyimport("sudachipy.dictionary"); julia> tokenizer = pyimport("sudachipy.tokenizer"); julia> tokenizer_obj = dictionary.Dictionary().create(); julia> mode = tokenizer.Tokenizer.SplitMode.C; julia> text1 = read("さっきダウンロードしたフォルダー/01kiritsubo.txt", String); julia> text2 = replace(text1, r"《.*?》" => ""); julia> function main(text::String) start = now() textToken = tokenizer_obj.tokenize(text, mode) println(now() - start) return textToken end julia> foo = main(text2); 316 milliseconds julia> foo = main(text2); #2回目 42 milliseconds
2020年3月は、4668 milliseconds で、 2020年6月に 0.4.6 で 1049 milliseconds でした。ただし、今回はルビ無しでの測定です。恐らく、早くなっているのは間違いなさそうです。新しいマシンなら、もっと効果が出るのかもしれません。
[おまけ] Sudachi 0.6 のインストールで、`cargo install --path ./sudachi-cli/` で、"error: binary `sudachi` already exists in destination as part of `sudachi v0.1.0 (/Users/xx/sudachi.rs)`"の意味を読みまちがえて、`cargo install --path ./sudachi-cli/ --force to overwrite ` とやって詰ったのはナイショです。正しくは、`cargo install --path ./sudachi-cli/ --force ` ですね。