2009/02/01からのアクセス回数 10865
集合知の3章(一部欠損)をGoogleのブック検索 から閲覧することができます。
また、なぜか原書のPDF がアップされています。
オリジナルのソースは、原書著者TobesのページからPCI_Code.zipと してダウンロードできます。
ブロガーのフィードの単語を処理するには、日本語の形態素解析を行う必要があり、 まずはchasenを使うことにします。
chasenは、MacPortを使って
$ sudo port install chasen
でインストールしました。
chasenの起動オプション
を指定します。*1
動作確認のため、1.txtというファイル(文字コードはShift_JIS)に
オリジナルのソースは、原書著者TobesのページからPCI_Code.zipと してダウンロードできます。
を入れ、chasenを実行
$ chasen -i s <1.txt >1.out
とすると1.outには、以下のような出力がでます。
オリジナル オリジナル オリジナル 名詞-一般 の ノ の 助詞-連体化 ソース ソース ソース 名詞-一般 は ハ は 助詞-係助詞 、 、 、 記号-読点 原書 ゲンショ 原書 名詞-一般 著者 チョシャ 著者 名詞-一般 T ティー T 記号-アルファベット o オー o 記号-アルファベット ... 途中省略 ... でき デキ できる 動詞-自立 一段 連用形 ます マス ます 助動詞 特殊・マス 基本形 。 。 。 記号-句点 EOS
python_chasen-0.2を使ってPythonからchasenを使います。ダウンロードして、~/localに展開します。
$ cd local $ tar xzvf python_chasen-0.2.tar.gz $ cd python_chasen
Tigetでは、-i sオプションが必要なので、chasen.cを変更します。52行を
char *opt[] = { "chasen", "-i", "s", NULL};
とします。
次に、以下の手順でbuild, installをします。
$ python setup.py build_ext --include-dirs=/opt/local/include --library-dirs=/opt/local/lib/ $ sudo python setup.py install
準備ができたので、分かち書き処理を行うpy_chasen.pyを作成します。 日本語の処理をスムーズに行うために以下のPythonスクリプトはすべてUTF-8でencodeされたファイルに記述し、先頭に以下のコードを追加します。
# -*- coding: utf-8 -*- import japanese
japanese.pyは、
import sys import codecs # if you use the jython, comment out next line. sys.stdout = codecs.getwriter('utf_8')(sys.stdout)
分かち書き処理では、
split.pyは、以下のようになります。
# -*- coding: utf-8 -*- import japanese import re from chasen import sparse def split(txt): text = sparse(txt.encode('shift_jis', 'replace')).decode('shift_jis', 'replace') ret = [] lines = text.splitlines() parts = [u'^形容詞.*', u'^形容動詞.*', u'^副詞.*', u'^連体詞.*', u'^名詞.*', u'^動詞.*', u'^未知語.*'] for line in lines: words = line.split('\t') if len(words) >= 4: if len(words[2]) > 0: surface = words[2] else: surface = words[0] feature = words[3] for part in parts: pat = re.compile(part) if pat.match(feature): ret.append(surface) return ret # テスト用のコード txt = 'オリジナルのソースは、原書著者TobesのページからPCI_Code.zipと してダウンロードできます。' for word in split(txt): print word
chasenのsparseに渡すときに、コードをshift_jisにencodeし、戻り値は、shift_jisからdecodeとして処理します。
未知語の場合、オリジナル形がないので、surfaceは単語そのものとしました。
テスト用のコードを実行すると以下の出力がでます。
オリジナル ソース 原書 著者 ページ から する ダウンロード できる
英語の単語がすべて消えていることにお気づきでしょうか。 これは、chasenを使った場合の欠点ですが、後述する方法にこの問題を回避しました。
この記事は、
皆様のご意見、ご希望をお待ちしております。