人気ブログランキング | 話題のタグを見る
さくらレンタルサーバーにCaboChaを入れてみる
■デモ
http://needtec.sakura.ne.jp/serif/main.py?AnalyzeCaboCha

■前提
 UTF8でコンパイルしたMeCab0.98がインストール済みであること。
 インストールしている場所は$HOME/usr/local/とする

■手順
1、CRF++をインストールする

wget http://crfpp.googlecode.com/files/CRF%2B%2B-0.58.tar.gz
tar xzvf CRF++-0.58.tar.gz
cd CRF++-0.58
./configure --prefix=$HOME/usr/local
make install


2. CaboChaをインストールする
MeCab0.98がどうさするCaboCha0.60をUTF8でインストールする

wget http://cabocha.googlecode.com/files/cabocha-0.60.tar.gz
tar xzvf cabocha-0.60.tar.gz
cd cabocha-0.60
./configure --prefix=$HOME/usr/local --with-charset=utf8 --enable-utf8-only LDFLAGS="-L$HOME/usr/local/lib" CPPFLAGS="-I$HOME/usr/local/include" --with-mecab-config=$HOME/usr/local/bin/mecab-config
make


3. ~/.cshrcを編集して環境変数を修正してインストール先にパスが通るようにする
例:

setenv PATH $HOME/local/bin:$HOME/usr/local/bin:$PATH
setenv LD_LIBRARY_PATH $HOME/local/lib:$HOME/usr/local/lib


4.cabocha-0.60/python のsetup.pyを実行してPythonから使用できるようにする


python setup.py install


★インストール先にパスが通っていればcabocha-configを用いてビルド~インストールが行なわれる
Windowsと違ってSetup.pyを修正する必要はない。

5.Pythonで使用する
もし、import CaboChaでこけるばあいは、LD_LIBRARY_PATH が設定されていない。


TODO:
MeCabは-uでユーザー辞書を指定できたが、Cabochaはetc\cabocharcで指定したユーザー辞書しか使えない???

コード
main.py
★ LD_LIBRARY_PATHにcabochaのライブラリへのパスを指定しないと動作しない

#! /usr/bin/env -S LD_LIBRARY_PATH=/home/needtec/usr/local/lib:/home/needtec/local/lib /usr/local/bin/python
# coding=utf-8
import simplefw

simplefw.doRequest()



AnalyzeCaboCha.py
0.60だと、Tokenのsurfaceに2回アクセスすると落ちる
 normalized_surface を使用すること。


# coding=utf-8
from simplefw import Controller
import cgi
import MeCab
import CaboCha
import os
import re


class AnalyzeCaboCha(Controller):
def index(self):
form = cgi.FieldStorage()
data = []
if form.has_key("serif") :
data = self.get_morpheme( form["serif"].value )

tmpl = self.template_loader.load('AnalyzeCaboCha.tmpl')
stream = tmpl.generate(data = data)
html = stream.render("html")
print html

def get_morpheme(self,sentence):

try:
c = CaboCha.Parser("")
tree = c.parse(sentence)

data = []
for i in range(tree.chunk_size()):
row=[]
chunk = tree.chunk(i)
s = ""
for j in range(chunk.token_pos,chunk.token_pos + chunk.token_size):
t = tree.token(j)
# 0.60だとt.surfaceだと2回アクセス時に落ちる
s = s + t.normalized_surface

r = ""
if chunk.link != -1:
rchunk = tree.chunk(chunk.link)
for j in range(rchunk.token_pos,rchunk.token_pos + rchunk.token_size):
t = tree.token(j)
# 0.60だとt.surfaceだと2回アクセス時に落ちる
r = r + t.normalized_surface

row.append(str(i))
row.append(s)
row.append(r)
row.append(str(chunk.score))
data.append(row)
except RuntimeError, e:
print "RuntimeError:", e;

return data



by mima_ita | 2013-06-06 06:26 | 実験
<< CaboChaを使ってツイート... WindowsにCabocha... >>



実験ですお

by mima_ita
検索
カテゴリ
最新の記事
.NET4.5におけるasy..
at 2014-07-02 00:46
.NETでTwitterを検..
at 2014-06-29 00:49
Redmineのプラグインで..
at 2014-06-28 03:29
IO.popenのwrite..
at 2014-06-28 03:25
RedmineのWikiでU..
at 2014-06-28 03:16
以前の記事
最新のトラックバック
その他のジャンル
ブログパーツ