思い立って言語処理100本ノックに挑戦してとりあえず半分(第5章)まで動くようになったので感想
そもそも言語処理100本ノックってなに
ネットで無料で公開されている有名な自然言語処理プログラミングの問題集。サイト開いても一見説明がなくていきなり問題が始まる感じだが、下の方までスクロールして読むと東北大学の乾・鈴木研究室が公開しているらしい。。
なんでやろうと思ったか
- 自然言語処理とか機械学習の分野がよく話題になる割に全然知識がないので、身につけたかった
- 細かく問題が区切られているので続けやすそうだった
- 趣味(当面実務で言語処理の深い知識を求められることはない。業務とは違う言語、違う分野でプログラム書いて気晴らししたかった)
- (とはいえ、文字列処置とかは普通にweb開発でもよく使うので仕事でもやくに立ちそう。。)
自分のスキル
- 普段使ってるのはRubyとJS、あとは前の職場でawkとかsedでの文字列処理は結構やってた
- Pythonは使ったことないがこれに向けて軽く言語機能一通り勉強した。Rubyに似てる。。
- LPICのレベル1は持ってるのでUnixコマンドとか正規表現での文字列処理は一通りの前提知識はあるはず
- 形態素解析とか機械学習はちょっと本読んだり調べたりしたことはあるが踏み込んだことはほぼわからず。
で、実際やってみて
- 一応Python以外の言語でも対応できる。。とはなってるみたいだけど、実際問題の中でPythonのライブラリが推奨されているのでまあPython前提
- ブログとかで他の方の回答が出てるので解いた後に書き方比較したり全くわからないときは参考にさせていただきました。。
1章
準備運動として軽めの問題。RubyとかJSだとmapでループしてるが、Pythonだと for文でループするのでなかなかさくさく書けない。そのうち手が覚えるはず。。
2章
Pythonでテキスト解析してそれをUnixコマンドで確認する
Pythonの知識不足で詰まるのはともかく、意外とUnixコマンドも詰まるなと。。
uniq -c
とかsort --key
とかunixコマンドのオプションが充実していることを再認識。。
3章
正規表現での文字列切り出し。wikipediaの記事からマークアップ取り除いたりURL切り出したり結構大変。
4章
とりあえずmecabをインストールしてお題の文章をmecabで解析して結果をテキストファイルに書き出す。 で、そこから問題で支持された条件の文章を切り出していく。あとその結果をグラフで描画したりする。
解析結果のフォーマットの見方とかそもそも形態素解析とは何か知らなかったりしてwikiとかで調べる。
5章
cabochaを使った係り受け解析の問題
cabochaというライブラリを使って文節間の修飾関係を解析して(係り受け解析)結果をテキストファイルに書き出して、あとは問題で支持された通りの条件で修飾、被修飾関係にある文節を出力していく。
cabochaの解析結果の見方とか係り受け解析が何か。。と言う理解ももちろん大事だけど結果を処理するのにPython力もないと辛い感じ
この後
4、5章も難しかったけど後半も機械学習とか出てきて難易度高そうな雰囲気。
これ以外にも勉強したい分野が諸々出てきているし一旦ペース落としつつ続ける。焦らず地道に時間かけてやっていきたい。。