先達の記事
[Rustによる自然言語処理ツールの実装: 形態素解析器「sudachi.rs」]
(https://qiita.com/sorami/items/7934fec2074c493c0f7d)
成果物
https://github.com/Yasu-umi/sudachiclone-rs
https://crates.io/crates/sudachiclone
やったこと
- SudachiPyの中身を読んでRustで再実装した。
- sudachi.rsとのdiffは再現度。テスト含めSudachiPyにある機能は大体実装済み。
まだやってないこと
- いくつかの機能の実装。数字のnormalizeのためのpluginとか。
- パフォーマンス改善。辞書読み込みがpythonより遅いとかどうなっているんだ。
そもそもやりたかったこと
- wasm使ってブラウザでtokenizerを動かす。
雑感
Rustを書くこと自体が久々だったので構文を結構忘れていた。しかしやはりこんなに親切なコンパイラは他にないのではなかろうかというくらいには優しいコンパイラだ、とにかくコードを書くのが楽しい。
pythonからの素朴な移植をやったのでRc<RefCell<T>>
を使わざるを得なかったのがつらい。しかしこれは内部の構造を大幅に変更しないとなくせないだろう。
以前100本ノックをやっていた時にも感じたが、RustでNLPする上での(python比較での)一番のハードルはやはり文字列の扱いで、Stringに良い感じにutf8でsliceする機能がstdで欲しくなった。(unicode_segmentationの存在にはたった今気付いたのでこれを使うコードに書き直そう)