ノート/テキストマイニング
訪問者数 1700      最終更新 2009-02-28 (土) 18:56:36

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

テキストマイニング@Oreganoの設定

2009/02/22-24

nkf

漢字コードのごたごたが結構あるので(後で必要になったので)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

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.htmlhttp://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から使ってみる

いろいろなやり方が考えられる(ラッパーを作る〜例えばこれ参照、シェル経由で使う)が、ここではシェル経由で使ってみた。

シェル経由での使い方は、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
Last-modified: 2009-02-28 (土) 18:56:36 (3065d)