人気ブログランキング | 話題のタグを見る
さくらレンタルサーバーでMeCabによる形態素解析をやってみた
実験結果
 http://needtec.sakura.ne.jp/serif/main.py?AnalyzeSentence

手順:
1. UTF-8のMeCab0.98を取得して自分のディレクトリ内にインストールする
 http://www.mwsoft.jp/programming/munou/mecab_sakura.html
 MeCabは0.9xってのが最新だが、gcc4.2でmakeできないので0.98を入れておく
強行するとundefined reference to `__sync_val_compare_and_swap_4' ってエラーがでる。

2.IPA 辞書の辞書をshつ置くしてUTF8でmakeする。
 http://sakuratan.biz/archives/1349
 ☆さくらサーバーにはMeCabとIPAの辞書は入っているがEUCなので色々めんどくさいので、UTF8のやついれとく。
 

3.mecab-python-0.98をいれとく
http://sourceforge.jp/frs/g_redir.php?m=jaist&f=%2Fmecab%2Fmecab-python%2F0.98%2Fmecab-python-0.98.tar.gz
こんなかんじでビルドしておく
$ tar -xzf mecab-python-0.98.tar.gz
$ cd mecab-python-0.98
$ python setup.py build
$ sudo python setup.py install

4.ユーザー辞書を作っておく
下のページ参考にutf-8のCSVファイルから任意のディレクトリにユーザー辞書を作っとく
http://blogs.yahoo.co.jp/igproj_fusion/14949865.html

5.Pythonで実装する。
・UTF-8でやらないとだめ。
・ MeCab.Tagger()をするさいに-uでユーザ辞書、-dでシステム辞書のパスを指定可能
・sys.path.append()で外部モジュールを追加しとかないとimportで認識しないかも。
・なるべく環境に依存しないように、iniファイルに切り出した。
 iniファイルとmain.pyのshebangのパスを直せばWindowsでも動く。

main.py

#!/usr/local/bin/python
#!C:\Python27\python.exe
# coding=utf-8
import simplefw

simplefw.doRequest()


simplefw.py

# coding=utf-8
import os
import sys
import codecs
import ConfigParser
reload(sys)

sys.setdefaultencoding('utf-8')
sys.stdout = codecs.getwriter('utf-8') (sys.stdout)

class Controller:
""" Controller
あらゆるコントローラの規定クラスになります

Attributes:
conf : 設定ファイルのConfigParserです
template_loader : genshiのテンプレートローダです。
"""
def __init__(self, conf,template_loader):
self.conf = conf
self.template_loader = template_loader

def doRequest():
conf = ConfigParser.SafeConfigParser()
conf.read("serif.ini")


try:
i = 0
path = conf.get('system', 'path' + str(i))
while path != "":
i = i + 1
sys.path.append(path)
path = conf.get('system', 'path' + str(i))
except ConfigParser.NoOptionError as e:
pass

from genshi.template import TemplateLoader
loader = TemplateLoader( os.path.dirname(__file__) )
print "Content-type: text/html\n"
#params=os.environ['PATH_INFO'].split('/')
module_name = os.environ['QUERY_STRING']
class_name = os.environ['QUERY_STRING']
module = __import__(module_name, globals(), locals(), [class_name], -1)
classtype = getattr(module, class_name)
main=classtype(conf,loader)
main.index()


AnalyzeSentence.py

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


class AnalyzeSentence(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('AnalyzeSentence.tmpl')
stream = tmpl.generate(data = data)
html = stream.render("html")
print html

def get_morpheme(self,sentence):
usrdicdir = os.path.expanduser(self.conf.get('MeCab', 'user_dict' ))
dicdir = os.path.expanduser(self.conf.get('MeCab', 'sys_dict' ))
if dicdir == "":
p = "-u%s" % (usrdicdir)
else:
p = " -d%s -u%s" % (dicdir ,usrdicdir)

try:
t = MeCab.Tagger(p)
m = t.parseToNode(sentence)
data = []
while m:
feature = m.feature.split(',')
row = []
row.append(m.surface)
for f in feature:
row.append(f)
data.append(row)
m = m.next

except RuntimeError, e:
print "RuntimeError:", e;

return data



AnalyzeSentence.tmpl

<!DOCTYPE html>
<html xmlns:py="http://genshi.edgewall.org/">
<head>
<title>Mecab</title>
<link rel="stylesheet" href="base.css" type="text/css" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<div id="contents">
<h1>セリフの解析</h1>
<form action="main.py?AnalyzeSentence" method="post">
<p>セリフ <input name="serif" size="50" value=""/></p>
<p><input type="submit" name="mecab" value="解析" /></p>
</form>


<table border='1'>
<tr>
<th>表層形</th><th>品詞</th><th>品詞細分類1</th><th>品詞細分類2</th><th>品詞細分類3</th><th>活用形</th><th>活用型</th><th>原形</th><th>読み</th><th>発音</th>
</tr>
<py:for each="tr in data">
<tr>
<py:for each="td in tr">
<td>
${td}
</td>
</py:for>
</tr>
</py:for>
</table>

</div>
</body>
</html>


serif.ini

[MeCab]
user_dict = ~/dev/serif/serif.dic
sys_dict =/home/needtec/lib/mecab/dic/ipadic-utf8

[system]
path0 = /home/needtec/local/lib/python/site-packages/Genshi-0.6-py2.7.egg
path1 = /home/needtec/local/lib/python2.7/site-packages


by mima_ita | 2013-06-04 20:43 | 実験
<< Twitterのタイムラインの... さくらレンタルサーバーにmsc... >>



実験ですお

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
以前の記事
最新のトラックバック
その他のジャンル
ブログパーツ