Rustを勉強し始めたのだけど、作るものが決まっていない。 ひとまず形態素解析を動かしてみる。
いくつかライブラリがあるみたいだが、以下の記事を見るとLinderaならWasmで問題なく動きそうな気配だったので、Linderaにする。
Rust×WASMに入門する(Linderaでブラウザから形態素解析)
※ 以下の手順はwasm-packのドキュメントで言うManual Setupで非推奨な手順。wasm-pack new
( cargo generate
) を使うのを推奨
https://rustwasm.github.io/docs/wasm-pack/tutorials/npm-browser-packages/getting-started/manual-setup.html
1
2
$ cargo new hello_lindera_wasm --lib
$ cd hello_lindera_wasm
Cargo.toml
1
2
3
4
5
6
[lib]
crate-type = ["cdylib", "rlib"]
[dependencies]
lindera = { version = "0.13", features = ["ipadic"] }
wasm-bindgen = { version = "0.2", features = ["serde-serialize"] }
src/lib.rs
1
2
3
4
5
6
#[wasm_bindgen]
pub fn tokenize(text: &str) -> JsValue {
let tokenizer = Tokenizer::new().unwrap();
let tokens = tokenizer.tokenize(text).unwrap();
JsValue::from_serde(&tokens).unwrap()
}
wasm-packでビルドする。
1
$ wasm-pack build --target web
これでJSから呼べる。
1
2
3
4
import init, { tokenize } from '/pkg/hello_lindera_wasm.js';
init().then(() => {
console.log(tokenize('すもももももももものうち'));
});
HTML/JSを少し整えるなどして無事動いた。
サイズ
hello_lindera_wasm_bg.wasm
が 70MBなのだけど、ChromeのDevToolsだと12.2MBになる謎。
1
2
3
4
5
6
7
$ ls -lh pkg
total 164408
-rw-r--r-- 1 tnantoka staff 818B Apr 24 16:04 hello_lindera_wasm.d.ts
-rw-r--r-- 1 tnantoka staff 4.4K Apr 24 16:04 hello_lindera_wasm.js
-rw-r--r-- 1 tnantoka staff 70M Apr 24 16:04 hello_lindera_wasm_bg.wasm
-rw-r--r-- 1 tnantoka staff 270B Apr 24 16:04 hello_lindera_wasm_bg.wasm.d.ts
-rw-r--r-- 1 tnantoka staff 266B Apr 24 16:04 package.json
Safariだと70MBまでカウントアップされて、ダウンロードが終わると同じく12.2MB表示になった。
12.2MBだったら許容範囲なんだけどなぁ。
コード
https://github.com/tnantoka/my_rust_sandbox/tree/main/hello_lindera_wasm