MecabのPythonバインディングの改良高速版です。
SWIGを使わず、Mecabの最低限の機能だけをPython-C APIで実装しました。
mecab-pythonバインディングの以下のメソッドを実装しています。
ayu@~/work/cmecab% ./benchmark.py < testtext.txt
cmecabでのベンチマーク。
3 function calls in 14.117 CPU seconds
Ordered by: internal time, call count
ncalls tottime percall cumtime percall filename:lineno(function)
1 14.112 14.112 14.116 14.116 benchmark.py:34(main)
1 0.004 0.004 0.004 0.004 __init__.py:1()
1 0.001 0.001 14.117 14.117 benchmark.py:72()
0 0.000 0.000 profile:0(profiler)
ayu@~/work/cmecab% ./benchmark.py -o< testtext.txt
オリジナルのmecab-pythonバインディングでのベンチマーク。
10015 function calls in 22.668 CPU seconds
Ordered by: internal time, call count
ncalls tottime percall cumtime percall filename:lineno(function)
1 12.971 12.971 22.667 22.667 benchmark.py:20(original)
10000 9.669 0.001 9.669 0.001 MeCab.py:178(parseToNode)
1 0.025 0.025 0.025 0.025 MeCab.py:7()
1 0.001 0.001 0.001 0.001 MeCab.py:192(__init__)
1 0.001 0.001 22.668 22.668 benchmark.py:70()
1 0.000 0.000 0.000 0.000 MeCab.py:105(Node)
1 0.000 0.000 0.000 0.000 MeCab.py:51(DictionaryInfo)
1 0.000 0.000 0.000 0.000 new.py:5()
1 0.000 0.000 0.000 0.000 MeCab.py:171(Tagger)
1 0.000 0.000 0.000 0.000 MeCab.py:14(_swig_setattr_nondynamic)
1 0.000 0.000 0.000 0.000 MeCab.py:82(Path)
1 0.000 0.000 0.000 0.000 MeCab.py:30(_swig_getattr)
1 0.000 0.000 0.000 0.000 MeCab.py:175()
1 0.000 0.000 0.000 0.000 MeCab.py:173()
1 0.000 0.000 0.000 0.000 MeCab.py:27(_swig_setattr)
1 0.000 0.000 0.000 0.000 MeCab.py:187()
0 0.000 0.000 profile:0(profiler)
% python setup.py install
cmecab(["mecabコマンドラインオプション"])
import cmecab
# cmecabを用意。
c = cmecab.cmecab()
# 解析
res = c.parse(body) # この変数 body に、解析したテキスト(EUC)が入っているとする。
# 結果取得
SURFACE = "surface"
FEATURE = "feature"
POSID = "posid"
for item in res:
s = item[SURFACE]
f = item[FEATURE]
p = item[POSID]
print "%s %d %s" % (s, p, f)
上記サンプルでは、surface, feature, posidしか取得していませんが、他に、stat, char_type も同様に格納されていますので解析結果としてそれらも利用できます。