ただのウェッブ系エンジニアが言語処理100本ノックをPythonで解いてみた

先月、先々月あたりに、空き時間に少しずつ言語処理100本ノックを解いてみた。

github.com

基本的には全部Python3.6.0(Anaconda 4.3.0)で動作を確認している。

Pythonについての感想

普段Rubyに慣れてるせいで、以下のようなところは面倒に感じる。

  • map, sort, filterなどをメソッドチェーンで繋いでいけないのが面倒
  • ラムダ式に単一の式しか書けないのは面倒(ネストしていけば何でもできそうではあるけど…)
  • selfの意義について熱く語られるかもしれないがにわかにとっては面倒
  • if が文なのが面倒

まあ慣れれば普通に使える。リスト内包表記はやたら使いたくなる。

問題を解いていっての感想

1章~3章あたり

単純な文字列処理に関しては、PythonよりRubyのほうが慣れてるのでRubyで書きたくなる感じだった。 ウェッブエンジニアなので正規表現は苦手ではないけれど、MediaWikiの処理は少々面倒で、全部合ってる保証はない。ちゃんとやるならparser書くべきなんだろうか。

4章~6章

ようやく言語処理らしくなってきた。分からない時は他の人がどうやってるかカンニングしたりしながら。 6章はstemmingモジュールを使うと良いと書いてあったけどnltkのLancasterStemmerを使用した。 CoreNLPの出力形式や問題の用語について色々調べながら解いていく必要がありまあまあ大変だった。

7章

普段の仕事とそんなに変わらないのでまあ適当に。webアプリはgui書くの面倒なのでjsonで。

8章~10章

機械学習、ベクトル空間法について。 とにかく欲しいものはだいたいPythonで使える実装が存在するため、そりゃあみんなPython使うよなーというのを感じた。 10章は8章の単語ベクトルでやるのが時間かかりすぎて面倒になりword2vecの方だけで済ませてしまった。

全体の感想

順番にステップアップしていくことができていい問題集だったなと思いました。まあ研究やデータ分析の業務が務まるような知識も能力もないし、今の自分の仕事では言語処理も機械学習も特に使うことは無いんだけど、そのうち多少関係のある商品の担当に変わる可能性があるのでその時役に立てばと思います。