お題目
作業場所
Rustを書く機会が皆無なのでとりあえずやるぞ!ということで始めました。3ヶ月ほどチマチマ進めてようやく進捗が40%に到達したので各章の簡単なまとめもとい感想を。
環境さえ整っていれば、cargo run --bin 0XX で大体実行できます。
また、Qiitaにある多くの先達の記事を参考にしました、多謝。
1章 準備運動
タイトルの通り、簡単な文字列操作から。
この章ではstd::env::args()からgetしてmatchしたものを簡単な関数に投げるという定型でひたすら処理。Vecに生えている関数を使ったくらいしか特筆することがなさそう。
2章 UNIXコマンド
スキップ、ここはやらないかも…
3章 正規表現
この辺からiteratorに生えているメソッドを使い始めOption, Resultを気にし始めました。
29. 国旗画像のURLを取得する ではhttpリクエストを投げることになりhyperを導入。
まだif letを覚えていなかったらしくunwrapも頻発しており、行儀の良くないコードが多い。
4章 形態素解析
Mecabです。https://github.com/tsurai/mecab-rs お世話になりました。
この辺からgzをdecodeしたりjsonを読んだりgnuplotでグラフを書いたりとcratesを使うことが増えてきて、Rustのモジュールシステムを使って共通部分を外出しするようになり、fetchやmecab_utilsなどの簡単な関数を作り始めました。
せっかくですし、いずれは品詞なんかもEnumで表現してみたいです。
5章 係り受け解析
Cabochaです。まずはcabocha-rsの作成から https://github.com/Yasu-umi/cabocha-rs
ここでもmecab-rsは参考になりました。結局cabochaに渡す文字列のポインタを持っておくべき場合とそうでない場合の違いをほとんど理解しないまま、とりあえず必要な部分が動くようになるところまで。cabocha.hがシンプルだったので助かりました。
何かお気づきの点あればissueをいただけると大変喜びます。
44. 係り受け木の可視化 では https://crates.io/crates/dot を使おうとしたのですが、日本語が表示できず仕方なくDOT言語のテキストファイルを作成するということでお茶を濁しました。
今後
次の6章は後半がStanford Core NLPを使ったもので、これまたrustバインディングはないので、ひとまず7章に進もうと思います。
読み返してみると、とにかくVecを多用しておりIteratorで書ければ良いのではとか、cloneは本当に必要なのかとか、try!早期リターンしろとかまだまだRust自体に慣れていない部分が見受けられます。後半は扱うデータも複雑になっていくようなので、その辺りの理解も深まれば…