入門自然言語処理を読み進めるためのPython&NLTKインストール
興味があったオライリーの入門自然言語処理を購入。pythonの勉強にもなるだろう。
ぱらっと読みだけではなく、せっかくなので手を動かしてお勉強ということで本書で必要なプログラミング言語pythonと言語処理用ライブラリのNLTKを使えるようにする。
pythonのインストール
サーバーはCentOS5.5 32bit使用
pythonは標準で入っている2.4でもいけるようだが、2.5以上にはしたいので、2.6の最新をいれる.既存環境を汚さないようにmake altinstall&virtualenv.
yum install python-setuptools easy_install virtualenv wget http://www.python.org/ftp/python/2.6.6/Python-2.6.6.tgz tar xvzf Python-2.6.6.tgz cd Python-2.6.6 less README ./configure make make altinstall su - shin $ python -V Python 2.4.3
このままだと2.4がデフォルトpythonのままなので、virtualenvさんの出番
$ mkdir python26 $ virtualenv --python=/usr/local/bin/python2.6 ~/python26 $ source python26/bin/activate (python26)[shin@lua ~]$ $ python -V Python 2.6.6
NLTKのインストール
本の中や公式サイト自体にインストール必要なものはあるのでいれていく。
$ pip install PyYAML $ pip install nltk Downloading/unpacking nltk Downloading nltk-2.0b9.tar.gz (941Kb): 941Kb downloaded Running setup.py egg_info for package nltk Traceback (most recent call last): File "<string>", line 14, in <module> IOError: [Errno 2] No such file or directory: '/home/shin/python26/build/nltk/setup.py' Complete output from command python setup.py egg_info: Traceback (most recent call last): File "<string>", line 14, in <module> IOError: [Errno 2] No such file or directory: '/home/shin/python26/build/nltk/setup.py' ---------------------------------------- Command python setup.py egg_info failed with error code 1 Storing complete log in /home/shin/.pip/pip.log
あぁなぜなのと思ったらズバリ解答が見つかった。build/nltk下にあることをpipは期待しているが、実際はnltkのさらに下にバージョン番号付きでディレクトリが掘られているので、中のファイルを一階層上げろや!ということ。ぐぐらんでも解決出来たなこれ。
http://code.google.com/p/nltk/issues/detail?id=534
$ cd ~/python26/build/nltk/ $ ls $ cd nltk-2.0b9 $ mv ./* ../ $ pip install nltk $ pip freeze PyYAML==3.09 nltk==2.0b9 wsgiref==0.1.2
本書1.1.2 NLTKを使ってみよう
はい使ってみます。
$ python >>> import nltk >>> nltk.download() NLTK Downloader --------------------------------------------------------------------------- d) Download l) List c) Config h) Help q) Quit --------------------------------------------------------------------------- Downloader> l
ずらっと色々でる、せっかくなので眺める。しかしなんて至れり尽くせりインターフェースなんだ。さすが教育用途を考えているだけのことはあって、とっつきやすい。
Downloader> d book Downloading collection 'book' | | Downloading package 'brown' to /home/shin/nltk_data... | Unzipping corpora/brown.zip. ...省略 Done downloading collection 'book' Downloader> q True >>>
あとは本の通りちょこちょこやり。
プロット画像生成のためのMatplotlib
数学用ライブラリNumPyとMatplotlibが必要ということで入れる
pip install numpy pip install matplotlib > >gcc: error trying to exec 'cc1plus': execvp: No such file or directory > >error: command 'gcc' failed with exit status 1 >
はいエラー。gccはあるけれど何がイカンのか。cc1plusてなんだろうか。gccとかを使うことがないので名前を見ても必要なものがさっぱりだな。こういう時のgoogle先生
http://www.linuxquestions.org/questions/linux-newbie-8/gcc-error-trying-to-exec-cc1plus-execvp-no-such-file-or-directory-fedora-10-a-716507/
c++用のライブラリがなかったようだ。gcc-c++なんて単語を初めて見た
$ sudo yum install gcc-c++ $ pip install matplotlib
はい、エラーエラー。公式のドキュメントには目を通しましょう。
http://matplotlib.sourceforge.net/users/installing.html
$sudo yum install freetype freetype-devel libpng libpng-devel $ pip install matplotlib
ようやく成功したけれども、肝心のコマンドがエラー
>>> text4.dispersion_plot(["citizens", "democracy", "freedom", "duties", "America"]) /home/shin/python26/lib/python2.6/site-packages/nltk/draw/__init__.py:16: UserWarning: nltk.draw package not loaded (please install Tkinter library). warnings.warn("nltk.draw package not loaded " Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/shin/python26/lib/python2.6/site-packages/nltk/text.py", line 451, in dispersion_plot from nltk.draw import dispersion_plot ImportError: cannot import name dispersion_plot
Tkinterてなんだろということで調べて入れることに。
http://wiki.python.org/moin/TkInter
# yum install tk tk-devel tcl tcl-devel # cd /usr/local/src/Python-2.6.6 # make # make altintall
tkinterが使用できることの確認
>>> import _tkinter >>> import Tkinter >>> text4.dispersion_plot(["citizens", "democracy", "freedom", "duties", "America"]) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/shin/python26/lib/python2.6/site-packages/nltk/text.py", line 452, in dispersion_plot dispersion_plot(self, words) File "/home/shin/python26/lib/python2.6/site-packages/nltk/draw/dispersion.py", line 25, in dispersion_plot raise ValueError('The plot function requires the matplotlib package.' ValueError: The plot function requires the matplotlib package.See http://matplotlib.sourceforge.net/
まだなにかあるんかい orz。matplotlibはインストール済みなのにmatplotlibがない?なぜ?ということでエラーはいてるソースを確認
$ vim -R "/home/shin/python26/lib/python2.6/site-packages/nltk/draw/dispersion.py" 22 try: 23 import pylab 24 except ImportError: 25 raise ValueError('The plot function requires the matplotlib package.' 26 'See http://matplotlib.sourceforge.net/')
なん…だと。matplotlibじゃなくてpylabのimport時の例外をキャッチしてる。試す
>>> import pylab Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/shin/python26/lib/python2.6/site-packages/pylab.py", line 1, in <module> from matplotlib.pylab import * File "/home/shin/python26/lib/python2.6/site-packages/matplotlib/pylab.py", line 206, in <module> from matplotlib.numerix import npyma as ma File "/home/shin/python26/lib/python2.6/site-packages/matplotlib/numerix/npyma/__init__.py", line 7, in <module> from numpy.core.ma import * ImportError: No module named ma
そんなこと言われましても困りますぜ…うーんと、ぐぐったら正に同じ問題を見つけた。この対応はツライ.こういう場合の正しいimport処理はどうすべきなのだろうか。
http://www.saiweb.co.uk/mac/matplotlib-importerror-no-module-named-ma
$vi /home/shin/python26/lib/python2.6/site-packages/matplotlib/numerix/ma/__init__.py > 15 else: > 16 #from numpy.core.ma import * > 17 from numpy.ma import * > 18 #print "using ma" $vi /home/shin/python26/lib/python2.6/site-packages/matplotlib/numerix/npyma/__init__.py > 6 else: > 7 #from numpy.core.ma import * > 8 from numpy.ma import * > 9 #print "using ma"
このエラーを引き起こしたのはnumpyのバージョンが新し過ぎたことなのだろう。
>>> print numpy.__version__ 1.5.1
http://matplotlib.sourceforge.net/users/installing.html
numpy 1.1 (or later)
公式サイトだとnumpy 1.1以上が必要ってなっているけれども、途中でpathが変わったようだ。まさかcoreなんて名前が付いているもののpathが変わるとは思ってなかったんだろう。なぜ構造を変えたんだnumpy。ちなみにnumpy.coreがなくなったのかと思ったけどまだあった。
>>> text4.dispersion_plot(["citizens", "democracy", "freedom", "duties", "America"]) >>>
よし出来た。しかしCUIなので何も表示されず。画像ファイルがカレントディレクトリに出来ているかなと思ったけれど、何も出来ておらず。dispersion.pyを見てみるがもちろんファイル出力処理なんてものはなく…
どう見ても徒労です。本当に(ry
画像出力する方法はあるんだろうけれども後回し。基本環境は整ったと思いたい。