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 ` ですね。

B! LINE