woothee-rustを書きました

wootheeRust 実装であるところの woothee-rust を書きました。

woothee プロジェクトというのが存在するというのを知ったのが去年末くらいで、 Rustの勉強にちょうど良さそうと考えてやっと手をつけて3日くらいかけて実装しました。 実装に際しては woothee-gowoothee-python を参考にさせていただきました。

使い方

Cargo.toml

[dependencies]
woothee = "*"

example.rs

extern crate woothee;

use woothee::parse;

fn main() {
    let result = parse("Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)");
    println!("{:?}", result);
    println!("{:?}", result.unwrap().name);
}

実行結果

$ cargo run
Some(WootheeResult { name: "Internet Explorer", category: "pc", os: "Windows 7", os_version: "NT 6.1", browser_type: "UNKNOWN", version: "8.0", vendor: "Microsoft" })
"Internet Explorer"

パフォーマンス

同じような用途のクレイトに uap-rust があるのでそれと比べてみます。 ソースはこちら です。(コメントアウトを外してください。) rustcのnightlyを使って cargo bench した結果が以下です。

$ multirust nightly
$ cargo bench
    :
running 2 tests
test bench_uap     ... bench: 204,584,510 ns/iter (+/- 4,739,819)
test bench_woothee ... bench:     542,426 ns/iter (+/- 24,330)

test result: ok. 0 passed; 0 failed; 0 ignored; 2 measured
$

woothee-rust 速いです。というより uap-rust がなぜかかなり遅いです。

最後に

2016年はRust学ぶぞ、と決意して一つプロジェクト進めれたので少し前進したかなと思ってます。

データセットやテストの生成が woothee-goのツール に手を加えたものに依存しているので、 そこをRustのみで完結するようにはしたいです。

Rust勉強中でいけてない部分が多々ありそうなので、Rustaceanのツッコミをお待ちしております。 プルリク等もお待ちしています。

では。