FrontPage
2009/02/01からのアクセス回数
集合知の3章(一部欠損)をhttp://books.google.com/books?id=-SqPR4iFWD8C&pg=PA49&lpg=PA49&source=web&ots=8u31im4WnN&sig=lp1mG2ZyAGCZ5pGf3EIofR9F8OU&hl=ja&sa=X&oi=book_result&resnum=8&ct=result#PPA31,M1 から閲覧することができます。
また、なぜかhttp://1a26.com/pdf/Programming/Programming%20Collective%20Intelligence.pdf がアップされています。
オリジナルのソースは、http://blog.kiwitobes.com/?p=44からhttp://kiwitobes.com/PCI_Code.zipと してダウンロードできます。
ブロガーのフィードの単語を処理するには、日本語の形態素解析を行う必要があり、 まずはchasenを使うことにします。
chasenは、MacPortを使って
$ sudo port install chasen }} でインストールしました。
python_chasenで、Shift_JISと想定しているため、/opt/local/etc/chasenrcをchasenrc-Shift_JISの内容で 上書きします。
$ cd /opt/local/etc $ cp chasenrc-Shift_JIS chasenrc }}
chasenの起動オプション
を指定します。
動作確認のため、1.txtというファイル(文字コードはShift_JIS)に
オリジナルのソースは、原書著者TobesのページからPCI_Code.zipと してダウンロードできます。 }} を入れ、chasenを実行
$ chasen -i s <1.txt >1.out }} とすると1.outには、以下のような出力がでます。
オリジナル オリジナル オリジナル 名詞-一般 の ノ の 助詞-連体化 ソース ソース ソース 名詞-一般 は ハ は 助詞-係助詞 、 、 、 記号-読点 原書 ゲンショ 原書 名詞-一般 著者 チョシャ 著者 名詞-一般 T ティー T 記号-アルファベット o オー o 記号-アルファベット ... 途中省略 ... でき デキ できる 動詞-自立 一段 連用形 ます マス ます 助動詞 特殊・マス 基本形 。 。 。 記号-句点 EOS }}
画面に表示するには、nkfでシステムの文字コードに変換します。
を指定します。
$ chasen -i s <1.txt | nkf -w }}
http://www.domen.cx/yusei/pub/python_chasen-0.2.tar.gzを使って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 }}
準備ができたので、分かち書き処理を行うsplit.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):
# テスト用のコード
txt = 'オリジナルのソースは、原書著者TobesのページからPCI_Code.zipと してダウンロードできます。' for word in split(txt):
}}
chasenのsparseに渡すときに、コードをshift_jisにencodeし、戻り値は、shift_jisからdecodeとして処理します。
未知語の場合、オリジナル形がないので、surfaceは単語そのものとしました。
テスト用のコードを実行すると以下の出力がでます。
オリジナル ソース 原書 著者 ページ から する ダウンロード できる }}
英語の単語がすべて消えていることにお気づきでしょうか。 これは、chasenを使った場合の欠点ですが、後述する方法にこの問題を回避しました。
ブログのフィードとして、多岐にわたる有名人のブログを見つけるのに苦労しました。 http://memoryocean.la.coocan.jp/wiki/blog/index.phpから有名人の フィードを使わせてもらいました。
getwordは、オリジナルのままでは、日本語を処理できないので、以下のように修正しました。
# -*- coding: utf-8 -*-
import japanese import feedparser import re from split import split
def getwords(html):
}}
します。
これに、getwordcounts, feedlistの処理、 wordlistの処理を追加し、test_ch3-1.pyとしました。
以下に「フィードの単語を数える」に使用したファイルをリストアップします。
test_ch3-1.pyの結果には、1カ所問題があります。 原因は定かではありませんが、先頭にフィードタイトルが空文字のページがあるのです。 これを除いたファイルをとして使用します。
次にデンドログラムを表示する部分ですが、ここも日本語の文字化けが発生しました。
そこで、以下の処理を先頭に追加します。
# -*- coding: utf-8 -*-
import japanese from PIL import Image,ImageDraw,ImageFont
font = ImageFont.truetype('/Users/take/Library/Fonts/MS Mincho.ttf', 14) }} これで、日本語を処理するfontがセットされますので、drawnodeのテキスト表示を 以下のように修正します。
}}
また、私の環境の問題でjpegで画像を保存できなかったので、PNGで処理するように変更 しました。
最終のソースは、です。
作成されたデンドグラムは、以下の通りです。
意図したわけではありませんが、お堅いページが
とアイドル系のページ
に別れています。うまくいったのかと思ったら、アイドル系は同じサイトのブログなので、「著作権保護のため、記事の一部のみ表示されております。」が強調されているみたです。残念!
この記事は、
皆様のご意見、ご希望をお待ちしております。