からくりインターネット

からくりインターネット アレクサンドリア図書館から次世代ウェブ技術まで [丸善ライブラリー]

からくりインターネット アレクサンドリア図書館から次世代ウェブ技術まで [丸善ライブラリー]

という本を読んだ。webでの自然言語処理について平易な文章でその概要が説明されていました。数式とかプログラムに気を取られずに、易しいレベルで分野を俯瞰するのはなかなか良いことのように思います。

本日借りた本と買った本

大学の図書館で目についたので借りてみた。

ツイッターノミクス TwitterNomics

ツイッターノミクス TwitterNomics

そして駅の本屋にて。せっかくPythonを身につけようとしているので、なにかこれで面白いものが作れないかなと購入。Google App Engineっていったい何が凄いのか、というところから勉強しようと思っております。
Google App Engineプログラミング入門

Google App Engineプログラミング入門

nltkとMeCabとpython

というわけでMeCabをPython2.7でなら使えるようになりました。ということはnltkも2.7で使いたい!しかしnltkの公式ではどうも2.4~2.6しか対応していないというような旨が書かれています。

しかし2.7でなんとか行けないものか、と思い、以下のサイトを参考に2.7でnltkを使える環境を整えました。しばらく使ってみて不都合がなければ良いのですが。

http://www.richard-careaga.com/archives/3474
2.7ではインタラクティブシェルで日本語が入力できなかったので、以下を参考に修正。
http://yogi.bz/~suzu/wp3/?p=110

MeCab Pythonバインディングのインストール

かなりはまってしましました。。
mecabを入れるところまでは良かったのでですが、Pythonバインディングを入れるところにて、mecab-python-0.98をダウンロードし、

% python setup.py build
% sudo python setup.py install

これで大丈夫よし、と思いましたが、

% python
>>> import MeCab
Traceback (most recent call last):
File "", line 1, in
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/MeCab.py", line 25, in
_MeCab = swig_import_helper()
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/MeCab.py", line 21, in swig_import_helper
_mod = imp.load_module('_MeCab', fp, pathname, description)
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/_MeCab.so, 2): Symbol not found: __ZN5MeCab12createTaggerEPKc
Referenced from: /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/_MeCab.so
Expected in: flat namespace
in /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/_MeCab.so
>>>

うーむエラー。どうやら_MeCab.soというバイナリファイルをうまく読み込んでくれていないといってようなことが原因かな、という程度までは分かったのですが、いくらググっても同じ状況の方が見つからず、途方に暮れました。

macab-python-0.98/buildというディレクトリをふと覗くと、

lib.macosx-10.3-fat-2.6

というディレクトリが。自分は今macosx 10.6なので、osのヴァージョンに対応したコンパイルがされていない??
 その後さまよい、pythonの2.7を入れて、再度mecab-python-0.98のインストールを試みると、先ほどのディレクトリにて、

lib.macosx-10.6-intel-2.7

が作られた!
その後、python27を使えばちゃんとMeCabをimportして使えるようになりました。
良かったー。

集合知プログラミング

集合知プログラミング」を購入しました。「言語処理のための機械学習入門」を読み進める中、クラスタリングや分類のアルゴリズムなど、「実装。。果たして自分にできるのか。。?」と不安でしたが、様々なデータ処理方法の実装が沢山載っている本書は、永遠のプログラミング素人の自分に大いに役立ってくれそうな気がします。何より目次見て、パラパラページをめくってなんだか楽しそう!とわくわくしたのが最大の購入理由ですね。しかもPython

集合知プログラミング

集合知プログラミング

やはりMacが欲しい

今日は入門自然言語処理、p490のあたり、Mecabを使ってみよう♪の箇所を進めました。自分は今Windows環境なのですが、以下のサイト
http://d.hatena.ne.jp/aidiary/20101121/1290339360
を参考にしてpythonからMecabをimportして使えるようになりました。

がしかし、Mecabをshift-jisで入れ、一方トークン分けのためにimport するjptokenizerではどうやらMecabutf-8で使われることを想定している?っぽくて、p492のprint ' '.join(reader.words()[20:80]とするところで

File "C:\Python26\lib\site-packages\jptokenizer.py", line 15, in tokenize
return result.decode('utf-8').strip().split(' ')
File "C:\Python26\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 33-35: invalid d
ata

このようなエラー。まあ、何から何まで文字コードutf-8にすればこういうことに悩まないで済むような気はするのですが、Windows環境では標準出力の時とかshift-jisに変換するのがまた面倒そうだし。。

やはりMacを買おう、という考えに至ります。



追記
集中力切れの頭でjptokenizer.pyのコードを見ると

def tokenize(self, text):
result = self.mecab.parse(text.encode('utf-8'))
return result.decode('utf-8').strip().split(' ')

という処理があり、やはりmecabutf-8で渡し、返ってきたものをutf-8だと見なしてdecodeするという処理ですね。この箇所をshift-jisに変えれば良いとは思うのですが、、面倒なのでMacを買います。

形態素解析にて、コスト最小法

今日は全然何も進んだ気がしない。。以下一応やったことをメモしとこうとは思います。

「入門自然言語処理」,12章のp.477のコスト最小法による形態素解析のところをプログラムを理解しながらよいしょよいしょと打ち込み、本の通りの結果が出力されることを確かめ、終了。単語単体での出現頻度のコストと、品詞と品詞の接続におけるコストの両方を合計して、最小のものを出力するという。なるほどなるほど。

ここでメインに働いているanalyze関数は、与える2つの「function型の引数」を調整することで、「形態素最小法」や「文節数最小法」といったヒューリスティックが実現できるようになっています。これは便利だしいろいろと試して結果を比べてみると良さそう。

さて、どこかで夕飯食べて電車で本読みながら帰ろう。昨日買ったのは以下の「検索エンジンはなぜ見つけるのか」という本です。webマイニングに関することもこれから行う研究テーマの一部分にしたいので、基本事項をしっかり勉強するのみです。

検索エンジンはなぜ見つけるのか

検索エンジンはなぜ見つけるのか