LoginSignup
26
28

More than 5 years have passed since last update.

PythonからMeCab

Last updated at Posted at 2014-03-05

課題

  • Python から MeCab の形態素解析の機能を利用可能にする。

手法

前提

内容

1. ビルド環境の構築

2. libmecab.lib と libmecab.dll の作成(MeCab のビルド)

  • mecab-0.996.tar.gz(MeCabのソース)をダウンロードする。
  • mecab-0.996\src\feature_index.cpp の 356 行目を修正する。
feature_index.cpp.patch
--- mecab-0.996.org/src/feature_index.cpp   Sun Nov 25 14:35:33 2012
+++ mecab-0.996/src/feature_index.cpp   Sat Mar  1 11:19:20 2014
@@ -353,7 +353,7 @@
               if (!r) goto NEXT;
               os_ << r;
             } break;
-            case 't':  os_ << (size_t)path->rnode->char_type;     break;
+            case 't':  os_ << (unsigned int)path->rnode->char_type;     break;
             case 'u':  os_ << ufeature; break;
             case 'w':
               if (path->rnode->stat == MECAB_NOR_NODE) {
  • mecab-0.996\src\writer.cpp の 260 行目を修正する。
writer.cpp.patch
--- mecab-0.996.org/src/writer.cpp  Sun Sep 30 01:44:27 2012
+++ mecab-0.996/src/writer.cpp  Sat Mar  1 11:20:32 2014
@@ -257,7 +257,7 @@
             // input sentence
           case 'S': os->write(lattice->sentence(), lattice->size()); break;
             // sentence length
-          case 'L': *os << lattice->size(); break;
+          case 'L': *os << (unsigned int)lattice->size(); break;
             // morph
           case 'm': os->write(node->surface, node->length); break;
           case 'M': os->write(reinterpret_cast<const char *>
  • mecab-0.996\src\Makefile.msvc.in の 6 行目を修正する。
Makefile.msvc.in.patch
--- mecab-0.996.org/src/Makefile.msvc.in    Sun Sep 30 01:44:27 2012
+++ mecab-0.996/src/Makefile.msvc.in    Thu Mar  6 02:36:41 2014
@@ -3,7 +3,7 @@
 LINK=link.exe

 CFLAGS = /EHsc /O2 /GL /GA /Ob2 /nologo /W3 /MT /Zi /wd4800 /wd4305 /wd4244
-LDFLAGS = /nologo /OPT:REF /OPT:ICF /LTCG /NXCOMPAT /DYNAMICBASE /MACHINE:X86 ADVAPI32.LIB
+LDFLAGS = /nologo /OPT:REF /OPT:ICF /LTCG /NXCOMPAT /DYNAMICBASE /MACHINE:X86_amd64 ADVAPI32.LIB
 DEFS =  -D_CRT_SECURE_NO_DEPRECATE -DMECAB_USE_THREAD \
         -DDLL_EXPORT -DHAVE_GETENV -DHAVE_WINDOWS_H -DDIC_VERSION=@DIC_VERSION@ \
         -DVERSION="\"@VERSION@\"" -DPACKAGE="\"mecab\"" \
  • mecab-0.996\src で以下を実行する。
> call "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" X86_amd64
> nmake -f Makefile.msvc.in
  • mecab-0.996\src に libmecab.lib と libmecab.dll が作成される。

3. インストーラの作成(Python バインディングのビルド)

  • mecab-0.996\src に作成された libmecab.dll を C:\Program Files (x86)\MeCab\bin に格納する。
  • mecab-0.996\src に作成された libmecab.lib を C:\Program Files (x86)\MeCab\sdk に格納する。
  • mecab-python-0.996\setup.py を変更する。
setup.py
#!/usr/bin/env python

from distutils.core import setup,Extension

setup(name = "mecab-python",
    version = "0.996",
    py_modules=["MeCab"],
    ext_modules = [
        Extension("_MeCab",
            ["MeCab_wrap.cxx",],
            include_dirs=['C:/Program Files (x86)/MeCab/sdk'],
            library_dirs=['C:/Program Files (x86)/MeCab/sdk'],
            libraries=["libmecab"])
            ])
  • mecab-python-0.996 で以下を実行する。
> python setup.py bdist_wininst
  • mecab-python-0.996\dist に mecab-python-0.996.win-amd64-py2.7.exe が作成される。

4. インストール(インストーラの実行)

  • mecab-python-0.996\dist に作成された mecab-python-0.996.win-amd64-py2.7.exe を実行する。

5. 動作確認

  • mecab-python-0.996 で以下を実行する。
> python test.py
  • 実行結果
0.996
太郎  名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は   助詞,係助詞,*,*,*,*,は,ハ,ワ
この  連体詞,*,*,*,*,*,この,コノ,コノ
本   名詞,一般,*,*,*,*,本,ホン,ホン
を   助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
二   名詞,数,*,*,*,*,二,ニ,ニ
郎   名詞,一般,*,*,*,*,郎,ロウ,ロー
を   助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
見   動詞,自立,*,*,一段,連用形,見る,ミ,ミ
た   助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
女性  名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ
に   助詞,格助詞,一般,*,*,*,に,ニ,ニ
渡し  動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た   助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。   記号,句点,*,*,*,*,。,。,。
EOS

    BOS/EOS,*,*,*,*,*,*,*,*
太郎  名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は   助詞,係助詞,*,*,*,*,は,ハ,ワ
この  連体詞,*,*,*,*,*,この,コノ,コノ
本   名詞,一般,*,*,*,*,本,ホン,ホン
を   助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
二   名詞,数,*,*,*,*,二,ニ,ニ
郎   名詞,一般,*,*,*,*,郎,ロウ,ロー
を   助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
見   動詞,自立,*,*,一段,連用形,見る,ミ,ミ
た   助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
女性  名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ
に   助詞,格助詞,一般,*,*,*,に,ニ,ニ
渡し  動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た   助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。   記号,句点,*,*,*,*,。,。,。
    BOS/EOS,*,*,*,*,*,*,*,*
EOS
EOS
filename: C:\Program Files (x86)\MeCab\etc\..\dic\ipadic\sys.dic
charset: UTF-8
size: 392126
type: 0
lsize: 1316
rsize: 1316
version: 102

参考

26
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
28