[[ノート/テキストマイニング]]~
訪問者数 &counter();      最終更新 &lastmod();~

>>[[ノート/テキストマイニング/oregano2]]
>>[[ノート/テキストマイニング/oregano2]]~
>>[[ノート/テキストマイニング/oregano3]]

**テキストマイニング@Oreganoの設定 [#t2ae5bfa]
2009/02/22-24

***nkf [#cb743bfa]
漢字コードのごたごたが結構あるので(後で必要になったので)nkfをインストール。~
http://sourceforge.jp/projects/nkf/を参照

 wget http://iij.dl.sourceforge.jp/nkf/37177/nkf-2.0.9.tar.gz
 make
 Makefileのinstallの時マニュアル類のインストール先を/usr/share/local/manに変更して
 make install

***chasen [#i30b4b00]
Chasenは元のホームページは古いので、http://chasen-legacy.sourceforge.jp/を参照すること。

まず、iconvとdartsをインストール~
iconfはhttp://www.gnu.org/software/libiconv/を参照
 wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.12.tar.gz
 tar -zxvf libiconv-1.12.tar.gz
 cd libiconv-1.12
 ./configure
 make
 make check
 make install

次に、dartsをインストール~
dartsはhttp://chasen.org/~taku/software/darts/参照
 wget http://chasen.org/~taku/software/darts/src/darts-0.32.tar.gz
 tar -zxvf darts-0.32.tar.gz
 cd darts-0.32
 ./configure
 make
 make check
 make install

最後にchasenをインストール~
chasenはhttp://sourceforge.jp/projects/chasen-legacy/参照~
古い方http://chasen.naist.jp/hiki/ChaSen/はだめ。
 wget http://jaist.dl.sourceforge.jp/chasen-legacy/32224/chasen-2.4.4.tar.gz
 tar -zxvf chasen-2.4.4.tar.gz
 cd chasen-2.4.4
 ./configure
 make
 make check
 make install

辞書として、ipadic-2.7.0を入れてみよう。http://sourceforge.jp/projects/ipadic/参照。~
候補としてはUniDicというのもあるらしい。~
 wget http://jaist.dl.sourceforge.jp/ipadic/24435/ipadic-2.7.0.tar.gz
 tar -zxvf ipadic-2.7.0.tar.gz
 cd ipadic-2.7.0
 ./configure
 make
 make check
 make install

これだと、EUCベースなので、UTF-8に変更する必要がある。~
 参照 http://www.crimson-snow.net/hmsvr/centos/memo/chasen_utf8.html、http://blog.nomadscafe.jp/archives/000482.html~
 要するに、ipadicをmakeしたあと、インストール(make install)する前に、EUCコードをUTF-8に変換する。スクリプトファイルconv_utf-8.shをipadicを展開したディレクトリに
 !/bin/sh
 for file in $*
 do
 if [ -f $file ]; then
     nkf --utf8 $file > tmpfile
     mv tmpfile $file
 fi
 done
 exit
のように作っておいて、次のように実行する。
 chmod 755 conv_utf-8.sh <= スクリプトファイルに実行権限付加
 ./conv_utf-8.sh *.dic *.cha
このようにしてすべてのdic, chaファイルをUTF8へ変換後、辞書を(再?)生成する。
 `chasen-config --mkchadic`/makemat -i w
 `chasen-config --mkchadic`/makeda -i w chadic *.dic
こうしておいてから、インストールする。
 make install

それから、起動時設定ファイルの /usr/local/etc/chasenrc もUTF8対応に変換する。
 cd /usr/local/etc
 nkf --utf8 chasenrc > chasenrc.tmp
 mv chasenrc.tmp chasenrc

こうしておいて、テストすればよい。
 echo "私は昨日学校へ行きました" | cat > tempfile
 chasen -i w tempfile
結果が
 私      ワタシ  私      名詞-代名詞-一般
 は      ハ      は      助詞-係助詞
 昨日    キノウ  昨日    名詞-副詞可能
 学校    ガッコウ        学校    名詞-一般
 へ      ヘ      へ      助詞-格助詞-一般
 行き    イキ    行く    動詞-自立       五段・カ行促音便        連用形
 まし    マシ    ます    助動詞  特殊・マス      連用形
 た      タ      た      助動詞  特殊・タ        基本形
 EOS
のようになればよい。

最後に、chasenをいつも-i wを付けるのが面倒なので、($HOME)/.bash_profileに
 alias chasen='chasen -i w'
を定義してしまうと、
 chasen tempfile
だけでよくなる。

***09/02/25 chasenをpythonから使ってみる [#u4dfdc79]
いろいろなやり方が考えられる([[ラッパーを作る〜例えばこれ参照:http://owa.as.wakwak.ne.jp/zope/docs/Python/BindingC/]]、シェル経由で使う)が、ここではシェル経由で使ってみた。

シェル経由での使い方は、sysのpopen2などを使うのが古いやり方らしく、公式のお勧めはsubprocessのPopenを使うことらしい。~
subprocessについては、ライブラリマニュアルの17.1を参照。http://www.python.jp/doc/release/lib/node530.html

プログラム例が少ないが、たとえばhttp://d.hatena.ne.jp/kakurasan/20080413/p1

それを元にして書換えたのが以下である。あまりよい出来ではないが、とにかく。
 #!/usr/bin/env python
 # encoding: utf-8
 # -*- coding: utf-8 -*-
 # coding: utf-8
 ##
 
 import sys
 import codecs
 import subprocess
 import os
 
 ### A magic for printing UTF-8 characters
 sys.stdout = codecs.getwriter('utf_8')(sys.stdout)
 
 fin = open("myinput", "r")
 
 cwd = "/"  # 作業ディレクトリ
 cmdline = "chasen -i w"  # chasenコマンド。-i wが必要。
  
 p = subprocess.Popen(cmdline, shell=True, cwd=cwd, stdin=fin,
                      stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
                      close_fds=True)
 stdouterr = p.stdout  # 文字列オブジェクト〜パイプをつなぐ
 
 # ここからphthon内の処理開始。
 # chasen出力パイプを拾って(下でreadline)好きなように整形してpythonとして出力。 
 print "-" * 80  # 区切り表示(開始)
 while True:
   line = stdouterr.readline()  # 改行を含んで行を読み込む
 
 print "-" * 80  # 区切り表示(開始)
 while True:
   line = stdouterr.readline()  # 改行を含んで行を読み込む
   if not line:
     break
   print line.rstrip()  # 後ろの改行を消して出力
 print "-" * 80  # 区切り表示(終了)
 ret = p.wait()  # 戻り値が入る
 print "Return code: %d" % ret

chasenに直接ファイル出力させることも出来る(subprocess.Popen(... stdout=ファイルオブジェクト ...)にすればよいが、今回は余り意味がない。

一応これで、chasenに入る前の入力をpythonで処理してから渡すことと、chasenから出てきた出力をpythonで受け取って処理することが、できるはず。

但し、出力については、chasenの端末出力の形式なので、別の出し方のほうが良いかもしれない。こんな形なので、始末は悪い。やはりラッパーにしようか。
 --------------------------------------------------------------------------------
 私      ワタシ  私      名詞-代名詞-一般
 は      ハ      は      助詞-係助詞
 昨日    キノウ  昨日    名詞-副詞可能
 学校    ガッコウ        学校    名詞-一般
 へ      ヘ      へ      助詞-格助詞-一般
 行き    イキ    行く    動詞-自立       五段・カ行促音便        連用形
 まし    マシ    ます    助動詞  特殊・マス      連用形
 た      タ      た      助動詞  特殊・タ        基本形
 EOS
 --------------------------------------------------------------------------------
 Return code: 0
>>[[ノート/テキストマイニング/oregano2]]~
>>[[ノート/テキストマイニング/oregano3]]



トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS