MeCabはC++で記述されていますが、SWIGにより他の言語からも利用できる形態で提供されています。ここではそのなかからPerl版を、Windowsで利用することを想定して解説します。
MeCab 0.996はWindowsではmakeに失敗するため、手間を惜しむならばMeCab 0.98を使用するのが簡単です。基本的なインストールの手順は、公式ドキュメントにあるように次の通りです。
wget https://mecab.googlecode.com/files/mecab-X.X.tar.gz tar zxfv mecab-X.X.tar.gz cd mecab-X.X ./configure make make check make install
まずMeCab本体 (mecab-X.X.tar.gz) をダウンロードします。MeCab 0.98は、mecab-0.98.tar.gz - mecab - mecab - Japanese morphological analyzer - Google Project Hostingにあります。
次にCygwinを起動して、次のようにconfigureを実行します。* Cygwin - 形態素解析 MeCab をインストール! - mk-mode BLOG
$ ./configure CPPFLAGS=-DNOMINMAX LIBS=-liconv
文字エンコーディングをutf-8にするならば、--with-charset=utf-8
も追加します。もし実行時に、
configure: error: no acceptable C compiler found in $PATH
のように出力される場合には、Cコンパイラのパスが設定されていません。もしくはインストールされていません。
configure: error: Your compiler is not powerful enough to compile MeCab.
のように出力される場合には、C++コンパイラ (gccではなくg++) がインストールされていません。または期待とは異なる名前でインストールされているだけかもしれません。後者の場合には、
$ ln -s /bin/g++-3.exe /bin/g++.exe
のように、シンボリックリンクを作成して対応します。
Makefileが作成されると、次のように表示されます。
configure: creating ./config.status config.status: creating Makefile config.status: creating src/Makefile config.status: creating src/Makefile.msvc config.status: creating man/Makefile config.status: creating doc/Makefile config.status: creating tests/Makefile config.status: creating swig/version.h config.status: creating mecab.iss config.status: creating mecab-config config.status: creating mecabrc config.status: creating config.h config.status: executing depfiles commands config.status: executing libtool commands config.status: executing default commands
makeします。
$ make
なお、このとき0.98より後のバージョンでは、次のようにエラーとなります。
Makefile:373: recipe for target `libmecab.la' failed
makeに成功したならば、インストールをして完了です。
$ make install
辞書をインストールします。これがインストールされていないと、実行時に次のようなエラーが返されます。
$ mecab tagger.cpp(151) [load_dictionary_resource(param)] param.cpp(71) [ifs] no such file or directory: /usr/local/lib/mecab/dic/ipadic/dicrc
既定でIPA辞書を使用するようになっているため、その辞書をインストールします。手順は次の通りです。
$ tar zxfv mecab-ipadic-2.7.0-X.tar.gz $ cd mecab-ipadic-2.7.0-X/ $ ./configure $ make $ make install
文字エンコーディングをutf-8にするならば、このconfigureでも--with-charset=utf-8
を指定します。これで/usr/local/lib/mecab/dic/ipadic/dicrcに辞書がインストールされます。
インストールに成功すると、次のように解析できます。
$ mecab すもももももももものうち すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ も 助詞,係助詞,*,*,*,*,も,モ,モ もも 名詞,一般,*,*,*,*,もも,モモ,モモ も 助詞,係助詞,*,*,*,*,も,モ,モ もも 名詞,一般,*,*,*,*,もも,モモ,モモ の 助詞,連体化,*,*,*,*,の,ノ,ノ うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ EOS
PerlからMeCabを利用できるようにします。ここでもMeCab 0.98を想定しています。
まずDownloads - mecab - Google Project Hostingから、mecab-perlをダウンロードします。そして、そこに含まれるREADMEにあるように、
% perl Makefile.PL % make % su # make install
の手順でインストールします。
Makefileを作成します。
$ perl Makefile.PL Checking if your kit is complete... Looks good Note (probably harmless): No library found for -lstdc++ Writing Makefile for MeCab Writing MYMETA.yml
makeしたときに、
cc1plus: error: unrecognized command line option "-fstack-protector"
のようにエラーとなるときには、gcc4にアップグレードします。また、
/usr/local/lib/libmecab.a(iconv_utils.o):iconv_utils.cpp:(.text+0x4c): `libiconv_close' に対する定義されていない参照です
のようにエラーとなるときには、iconvへのリンクが正しく指定されていません。Makefile.PLで参照するmecab-configを確認し、
$ mecab-config --libs -L/usr/local/lib -lmecab -lstdc++
のように-liconv
が指定されていないならば、このファイル/usr/local/bin/mecab-configの当該部分を
--libs) echo -L${exec_prefix}/lib -lmecab -lstdc++ -liconv ;;
のように修正します。
make installで「Do not have write permissions ...」となるときには、Cygwinを管理者権限で実行しなおします。
$ make install Files found in blib/arch: installing files in blib/lib into architecture dependent library tree !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ERROR: Can't create '/usr/lib/perl5/site_perl/5.14/i686-cygwin-threads-64int' Do not have write permissions on '/usr/lib/perl5/site_perl/5.14/i686-cygwin-threads-64int' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! at -e line 1 Makefile:738: recipe for target `pure_site_install' failed make: *** [pure_site_install] Error 2
make installまで成功したならば、mecab-perlに含まれるtest.plで、次のように実行を確認できます。
$ perl test.pl 0.98 太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー は 助詞,係助詞,*,*,*,*,は,ハ,ワ この 連体詞,*,*,*,*,*,この,コノ,コノ 本 名詞,一般,*,*,*,*,本,ホン,ホン を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 二 名詞,数,*,*,*,*,二,ニ,ニ 郎 名詞,一般,*,*,*,*,郎,ロウ,ロー を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 見 動詞,自立,*,*,一段,連用形,見る,ミ,ミ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ 女性 名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 渡し 動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ 。 記号,句点,*,*,*,*,。,。,。 EOS BOS/EOS,*,*,*,*,*,*,*,* 太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー は 助詞,係助詞,*,*,*,*,は,ハ,ワ この 連体詞,*,*,*,*,*,この,コノ,コノ 本 名詞,一般,*,*,*,*,本,ホン,ホン を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 二 名詞,数,*,*,*,*,二,ニ,ニ 郎 名詞,一般,*,*,*,*,郎,ロウ,ロー を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 見 動詞,自立,*,*,一段,連用形,見る,ミ,ミ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ 女性 名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 渡し 動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ 。 記号,句点,*,*,*,*,。,。,。 BOS/EOS,*,*,*,*,*,*,*,* B[0] 太郎 名詞,固有名詞,地域,一般,*,*,太郎,タロウ,タロー B[0] 太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー B[0] 太 動詞,自立,*,*,五段・ラ行,体言接続特殊2,太る,フト,フト B[0] 太 名詞,固有名詞,地域,一般,*,*,太,タイ,タイ B[0] 太 名詞,固有名詞,人名,名,*,*,太,フトシ,フトシ B[0] 太 形容詞,自立,*,*,形容詞・アウオ段,ガル接続,太い,フト,フト E[0] BOS/EOS,*,*,*,*,*,*,*,* B[3] 郎 名詞,一般,*,*,*,*,郎,ロウ,ロー E[3] 太 形容詞,自立,*,*,形容詞・アウオ段,ガル接続,太い,フト,フト E[3] 太 名詞,固有名詞,人名,名,*,*,太,フトシ,フトシ E[3] 太 名詞,固有名詞,地域,一般,*,*,太,タイ,タイ E[3] 太 動詞,自立,*,*,五段・ラ行,体言接続特殊2,太る,フト,フト B[6] はこ 動詞,自立,*,*,五段・カ行イ音便,未然ウ接続,はく,ハコ,ハコ B[6] は 動詞,非自立,*,*,五段・ラ行,体言接続特殊2,はる,ハ,ハ B[6] は 動詞,自立,*,*,五段・ラ行,体言接続特殊2,はる,ハ,ハ B[6] は 助詞,係助詞,*,*,*,*,は,ハ,ワ E[6] 郎 名詞,一般,*,*,*,*,郎,ロウ,ロー E[6] 太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー E[6] 太郎 名詞,固有名詞,地域,一般,*,*,太郎,タロウ,タロー B[9] この 連体詞,*,*,*,*,*,この,コノ,コノ B[9] こ 動詞,非自立,*,*,カ変・クル,未然形,くる,コ,コ B[9] こ 動詞,自立,*,*,カ変・クル,未然形,くる,コ,コ B[9] こ 動詞,自立,*,*,五段・ラ行,体言接続特殊2,こる,コ,コ B[9] こ 動詞,非自立,*,*,五段・カ行促音便,未然ウ接続,く,コ,コ B[9] こ 名詞,一般,*,*,*,*,こ,コ,コ B[9] こ 形容詞,自立,*,*,形容詞・アウオ段,ガル接続,こい,コ,コ E[9] は 助詞,係助詞,*,*,*,*,は,ハ,ワ E[9] は 動詞,自立,*,*,五段・ラ行,体言接続特殊2,はる,ハ,ハ E[9] は 動詞,非自立,*,*,五段・ラ行,体言接続特殊2,はる,ハ,ハ B[12] の 動詞,自立,*,*,五段・ラ行,体言接続特殊2,のる,ノ,ノ B[12] の 助詞,終助詞,*,*,*,*,の,ノ,ノ B[12] の 助詞,連体化,*,*,*,*,の,ノ,ノ B[12] の 助詞,格助詞,一般,*,*,*,の,ノ,ノ B[12] の 名詞,非自立,一般,*,*,*,の,ノ,ノ E[12] こ 形容詞,自立,*,*,形容詞・アウオ段,ガル接続,こい,コ,コ E[12] こ 名詞,一般,*,*,*,*,こ,コ,コ E[12] こ 動詞,非自立,*,*,五段・カ行促音便,未然ウ接続,く,コ,コ E[12] こ 動詞,自立,*,*,五段・ラ行,体言接続特殊2,こる,コ,コ E[12] こ 動詞,自立,*,*,カ変・クル,未然形,くる,コ,コ E[12] こ 動詞,非自立,*,*,カ変・クル,未然形,くる,コ,コ E[12] はこ 動詞,自立,*,*,五段・カ行イ音便,未然ウ接続,はく,ハコ,ハコ B[15] 本 名詞,接尾,助数詞,*,*,*,本,ホン,ホン B[15] 本 接頭詞,名詞接続,*,*,*,*,本,ホン,ホン B[15] 本 名詞,固有名詞,地域,一般,*,*,本,ホン,ホン B[15] 本 名詞,固有名詞,地域,一般,*,*,本,モト,モト B[15] 本 名詞,固有名詞,人名,姓,*,*,本,モト,モト B[15] 本 名詞,一般,*,*,*,*,本,モト,モト B[15] 本 名詞,一般,*,*,*,*,本,ホン,ホン E[15] の 名詞,非自立,一般,*,*,*,の,ノ,ノ E[15] の 助詞,格助詞,一般,*,*,*,の,ノ,ノ E[15] の 助詞,連体化,*,*,*,*,の,ノ,ノ E[15] の 助詞,終助詞,*,*,*,*,の,ノ,ノ E[15] の 動詞,自立,*,*,五段・ラ行,体言接続特殊2,のる,ノ,ノ E[15] この 連体詞,*,*,*,*,*,この,コノ,コノ B[18] を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ E[18] 本 名詞,一般,*,*,*,*,本,ホン,ホン E[18] 本 名詞,一般,*,*,*,*,本,モト,モト E[18] 本 名詞,固有名詞,人名,姓,*,*,本,モト,モト E[18] 本 名詞,固有名詞,地域,一般,*,*,本,モト,モト E[18] 本 名詞,固有名詞,地域,一般,*,*,本,ホン,ホン E[18] 本 接頭詞,名詞接続,*,*,*,*,本,ホン,ホン E[18] 本 名詞,接尾,助数詞,*,*,*,本,ホン,ホン B[21] 二郎 名詞,数,*,*,*,*,* B[21] 二郎 名詞,固有名詞,一般,*,*,*,二郎,ニロウ,ニロー B[21] 二郎 名詞,固有名詞,人名,名,*,*,二郎,ニロウ,ニロー B[21] 二郎 名詞,固有名詞,人名,名,*,*,二郎,ジロウ,ジロー B[21] 二 名詞,固有名詞,地域,一般,*,*,二,フタ,フタ B[21] 二 名詞,数,*,*,*,*,二,ニ,ニ E[21] を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ B[24] 郎 名詞,一般,*,*,*,*,郎,ロウ,ロー E[24] 二 名詞,数,*,*,*,*,二,ニ,ニ E[24] 二 名詞,固有名詞,地域,一般,*,*,二,フタ,フタ B[27] を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ E[27] 郎 名詞,一般,*,*,*,*,郎,ロウ,ロー E[27] 二郎 名詞,固有名詞,人名,名,*,*,二郎,ジロウ,ジロー E[27] 二郎 名詞,固有名詞,人名,名,*,*,二郎,ニロウ,ニロー E[27] 二郎 名詞,固有名詞,一般,*,*,*,二郎,ニロウ,ニロー E[27] 二郎 名詞,数,*,*,*,*,* B[30] 見 動詞,自立,*,*,一段,連用形,見る,ミ,ミ B[30] 見 動詞,自立,*,*,一段,未然形,見る,ミ,ミ B[30] 見 名詞,固有名詞,地域,一般,*,*,見,ミル,ミル E[30] を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ B[33] た 動詞,非自立,*,*,五段・ラ行,体言接続特殊2,たる,タ,タ B[33] た 動詞,自立,*,*,五段・ラ行,体言接続特殊2,たる,タ,タ B[33] た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ B[33] た 助動詞,*,*,*,特殊・タイ,ガル接続,たい,タ,タ E[33] 見 名詞,固有名詞,地域,一般,*,*,見,ミル,ミル E[33] 見 動詞,自立,*,*,一段,未然形,見る,ミ,ミ E[33] 見 動詞,自立,*,*,一段,連用形,見る,ミ,ミ B[36] 女性 名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ B[36] 女 名詞,接尾,助数詞,*,*,*,女,ジョ,ジョ B[36] 女 接頭詞,名詞接続,*,*,*,*,女,ジョ,ジョ B[36] 女 名詞,一般,*,*,*,*,女,ジョ,ジョ B[36] 女 名詞,一般,*,*,*,*,女,オンナ,オンナ E[36] た 助動詞,*,*,*,特殊・タイ,ガル接続,たい,タ,タ E[36] た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ E[36] た 動詞,自立,*,*,五段・ラ行,体言接続特殊2,たる,タ,タ E[36] た 動詞,非自立,*,*,五段・ラ行,体言接続特殊2,たる,タ,タ B[39] 性 名詞,接尾,一般,*,*,*,性,セイ,セイ B[39] 性 名詞,一般,*,*,*,*,性,サガ,サガ B[39] 性 名詞,一般,*,*,*,*,性,セイ,セイ B[39] 性 名詞,一般,*,*,*,*,性,ショウ,ショー E[39] 女 名詞,一般,*,*,*,*,女,オンナ,オンナ E[39] 女 名詞,一般,*,*,*,*,女,ジョ,ジョ E[39] 女 接頭詞,名詞接続,*,*,*,*,女,ジョ,ジョ E[39] 女 名詞,接尾,助数詞,*,*,*,女,ジョ,ジョ B[42] に 動詞,自立,*,*,一段,連用形,にる,ニ,ニ B[42] に 動詞,自立,*,*,一段,未然形,にる,ニ,ニ B[42] に 助詞,副詞化,*,*,*,*,に,ニ,ニ B[42] に 助詞,特殊,*,*,*,*,に,ニ,ニ B[42] に 助詞,格助詞,一般,*,*,*,に,ニ,ニ E[42] 性 名詞,一般,*,*,*,*,性,ショウ,ショー E[42] 性 名詞,一般,*,*,*,*,性,セイ,セイ E[42] 性 名詞,一般,*,*,*,*,性,サガ,サガ E[42] 性 名詞,接尾,一般,*,*,*,性,セイ,セイ E[42] 女性 名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ B[45] 渡し 動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ B[45] 渡し 名詞,一般,*,*,*,*,渡し,ワタシ,ワタシ B[45] 渡 動詞,自立,*,*,五段・ラ行,体言接続特殊2,渡る,ワタ,ワタ B[45] 渡 名詞,固有名詞,地域,一般,*,*,渡,ワタシ,ワタシ B[45] 渡 名詞,固有名詞,地域,一般,*,*,渡,ド,ド B[45] 渡 名詞,固有名詞,地域,一般,*,*,渡,ワタリ,ワタリ B[45] 渡 名詞,固有名詞,人名,姓,*,*,渡,ワタリ,ワタリ B[45] 渡 名詞,固有名詞,人名,名,*,*,渡,ワタル,ワタル E[45] に 助詞,格助詞,一般,*,*,*,に,ニ,ニ E[45] に 助詞,特殊,*,*,*,*,に,ニ,ニ E[45] に 助詞,副詞化,*,*,*,*,に,ニ,ニ E[45] に 動詞,自立,*,*,一段,未然形,にる,ニ,ニ E[45] に 動詞,自立,*,*,一段,連用形,にる,ニ,ニ B[48] した 名詞,一般,*,*,*,*,した,シタ,シタ B[48] し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ B[48] し 動詞,自立,*,*,サ変・スル,未然形,する,シ,シ B[48] し 動詞,自立,*,*,五段・ラ行,体言接続特殊2,しる,シ,シ B[48] し 動詞,接尾,*,*,五段・サ行,連用形,す,シ,シ B[48] し 助詞,接続助詞,*,*,*,*,し,シ,シ B[48] し 助動詞,*,*,*,文語・キ,体言接続,き,シ,シ E[48] 渡 名詞,固有名詞,人名,名,*,*,渡,ワタル,ワタル E[48] 渡 名詞,固有名詞,人名,姓,*,*,渡,ワタリ,ワタリ E[48] 渡 名詞,固有名詞,地域,一般,*,*,渡,ワタリ,ワタリ E[48] 渡 名詞,固有名詞,地域,一般,*,*,渡,ド,ド E[48] 渡 名詞,固有名詞,地域,一般,*,*,渡,ワタシ,ワタシ E[48] 渡 動詞,自立,*,*,五段・ラ行,体言接続特殊2,渡る,ワタ,ワタ B[51] た 動詞,非自立,*,*,五段・ラ行,体言接続特殊2,たる,タ,タ B[51] た 動詞,自立,*,*,五段・ラ行,体言接続特殊2,たる,タ,タ B[51] た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ B[51] た 助動詞,*,*,*,特殊・タイ,ガル接続,たい,タ,タ E[51] し 助動詞,*,*,*,文語・キ,体言接続,き,シ,シ E[51] し 助詞,接続助詞,*,*,*,*,し,シ,シ E[51] し 動詞,接尾,*,*,五段・サ行,連用形,す,シ,シ E[51] し 動詞,自立,*,*,五段・ラ行,体言接続特殊2,しる,シ,シ E[51] し 動詞,自立,*,*,サ変・スル,未然形,する,シ,シ E[51] し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ E[51] 渡し 名詞,一般,*,*,*,*,渡し,ワタシ,ワタシ E[51] 渡し 動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ B[54] 。 名詞,サ変接続,*,*,*,*,* B[54] 。 記号,句点,*,*,*,*,。,。,。 E[54] た 助動詞,*,*,*,特殊・タイ,ガル接続,たい,タ,タ E[54] た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ E[54] た 動詞,自立,*,*,五段・ラ行,体言接続特殊2,たる,タ,タ E[54] た 動詞,非自立,*,*,五段・ラ行,体言接続特殊2,たる,タ,タ E[54] した 名詞,一般,*,*,*,*,した,シタ,シタ B[57] BOS/EOS,*,*,*,*,*,*,*,* E[57] BOS/EOS,*,*,*,*,*,*,*,* E[57] 。 記号,句点,*,*,*,*,。,。,。 E[57] 。 名詞,サ変接続,*,*,*,*,* filename: /usr/local/lib/mecab/dic/ipadic/sys.dic charset: utf-8 size: 392126 type: 0 lsize: 1316 rsize: 1316 version: 102
Windows版はインストーラによって辞書も同時にインストールされますので、簡単に導入することができます。
mecab-0.996.exe - mecab - mecab-win - Japanese morphological analyzer - Google Project Hosting
インストール時に辞書の文字エンコーディングを問われます。既定でShift_JISとなっていますが、必要ならば他のエンコーディングに変更します。ただ、これは後からでも変更できます。
またインストール時に、MeCabの設定ファイル (mecabrc) のパスがレジストリに書き込まれます。それは[HKEY_LOCAL_MACHINE\Software\MeCab]または[HKEY_CURRENT_USER\Software\MeCab]のいずれかの場所です。
MeCabをPHPから利用するならば、ここでインストールされた実行ファイルをそのまま呼び出す方法もあります。
インストーラによる方法では必要なファイルがそろわないため、Perlから利用するには改めてコンパイルから行う必要があります。しかしこのような手間をかけなくとも、Perl向けに用意されたText::MeCabを選択する方が賢明かも知れません。
SWIGを利用して、Perl向けのラッパーを作成します。
C:\swigwin>swig.exe -perl5 -c++ C:\mecab-0.996\swig\MeCab.i
いくつか警告が出力されますが、これらは問題となりません。
C:\mecab-0.996\swig\..\src\mecab.h(56) : Warning 314: 'next' is a perl keyword C:\mecab-0.996\swig\..\src\mecab.h(107) : Warning 314: 'next' is a perl keyword C:\mecab-0.996\swig\..\src\mecab.h(136) : Warning 302: Identifier 'surface' redefined by %extend (ignored), C:\mecab-0.996\swig\MeCab.i(74) : Warning 302: %extend definition of 'surface'. C:\mecab-0.996\swig\..\src\mecab.h(895) : Warning 314: 'next' is a perl keyword C:\mecab-0.996\swig\..\src\mecab.h(848) : Warning 302: Identifier 'set_sentence' redefined by %extend (ignored), C:\mecab-0.996\swig\MeCab.i(95) : Warning 302: %extend definition of 'set_sentence'. C:\mecab-0.996\swig\..\src\mecab.h(1238) : Warning 314: 'next' is a perl keyword
この結果、MeCab.iと同一のフォルダに、
の2つのファイルが作成されます。このうちモジュール ファイルMeCab.pmを、Perlのライブラリ フォルダ (C:\Perl64\site\lib) にコピーします。
Visual C++でMakeするには、コードの修正が必要です。ここでは64bit環境で、コンパイラにはVisual C++ 9.0 (2008) を想定しています。まずCygwinなどで
$ ./configure LIBS=-liconv
とし、
などのファイルを生成します。そしてこのMakefile.msvcを修正します。
必要となるのはMeCab.dllを作成するコマンドと、そのターゲットが呼び出されるようにする記述。そして64bit環境向けにMakeするならば「X86」から「X64」への書き換えと、MeCabのインストールフォルダのパスの修正です。
修正箇所の差分を次に示します。なお、この差分はdiffによるものです。
$ diff -ur mecab-0.996-original/src/Makefile.msvc mecab-0.996/src/Makefile.msvc --- mecab-0.996-original/src/Makefile.msvc +++ mecab-0.996/src/Makefile.msvc @@ -3,12 +3,12 @@ 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:X64 ADVAPI32.LIB DEFS = -D_CRT_SECURE_NO_DEPRECATE -DMECAB_USE_THREAD \ -DDLL_EXPORT -DHAVE_GETENV -DHAVE_WINDOWS_H -DDIC_VERSION=102 \ -DVERSION="\"0.996\"" -DPACKAGE="\"mecab\"" \ -DUNICODE -D_UNICODE \ - -DMECAB_DEFAULT_RC="\"c:\\Program Files\\mecab\\etc\\mecabrc\"" + -DMECAB_DEFAULT_RC="\"c:\\Program Files (x86)\\mecab\\etc\\mecabrc\"" INC = -I. -I.. DEL = del @@ -26,7 +26,10 @@ .cpp.obj: $(CC) $(CFLAGS) $(INC) $(DEFS) -c $< -all: libmecab mecab mecab-dict-index mecab-dict-gen mecab-cost-train mecab-system-eval mecab-test-gen +all: libmecab mecab mecab-dict-index mecab-dict-gen mecab-cost-train mecab-system-eval mecab-test-gen mecabdll + +mecabdll: $(OBJ) libmecab.obj + $(CC) $(CFLAGS) $(INC) /LD /FeMeCab.dll /IC:/Perl64/lib/CORE/ /D "WIN32" ../swig/MeCab_wrap.cxx $(OBJ) libmecab.obj advapi32.lib C:/Perl64/lib/CORE/perl514.lib mecab: $(OBJ) mecab.obj $(LINK) $(LDFLAGS) /out:$@.exe mecab.obj libmecab.lib
「C:/Perl64」や「perl514.lib」の記述は、環境に合わせて適宜修正が必要です。
続けてエラーとなるコードを修正していきます。対象となるのは、
の5つのファイルです。まずはキャストに失敗する部分を修正します。
diff -ur mecab-0.996-original/src/feature_index.cpp mecab-0.996/src/feature_index.cpp --- mecab-0.996-original/src/feature_index.cpp +++ mecab-0.996/src/feature_index.cpp @@ -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) {
size_tのままでは「feature_index.cpp(356) : error C2593: 'operator <<' があいまいです。」となります。次の部分も「writer.cpp(260) : error C2593: 'operator <<' があいまいです。」となります。これらはコンパイラの指示に従って修正します。
diff -ur mecab-0.996-original/src/writer.cpp mecab-0.996/src/writer.cpp --- mecab-0.996-original/src/writer.cpp +++ mecab-0.996/src/writer.cpp @@ -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 *>
VC++ 10.0 (VC++ 2010) より前にはstdint.hがありません。よってその環境に該当するならば、ヘッダでそれを指示します。
diff -ur mecab-0.996-original/config.h mecab-0.996/config.h --- mecab-0.996-original/config.h +++ mecab-0.996/config.h @@ -53,7 +53,7 @@ #define HAVE_PTHREAD_H 1 /* Define to 1 if you have the <stdint.h> header file. */ -#define HAVE_STDINT_H 1 +#define HAVE_STDINT_H 0 /* Define to 1 if you have the <stdlib.h> header file. */ #define HAVE_STDLIB_H 1
このマクロを書き換えたならば、それへの対応が1か所欠けているため、それも修正します。この問題は「fatal error C1083: include ファイルを開けません。'stdint.h': No such file or directory」のように報告されます。
diff -ur mecab-0.996-original/src/utils.cpp mecab-0.996/src/utils.cpp --- mecab-0.996-original/src/utils.cpp +++ mecab-0.996/src/utils.cpp @@ -25,7 +25,9 @@ #include <stdlib.h> #endif +#ifdef HAVE_STDINT_H #include <stdint.h> +#endif #if defined(_WIN32) && !defined(__CYGWIN__) extern HINSTANCE DllInstance;
既定ではVC++ 8.0を使用する前提となっているため、必要ならばここも修正します。環境に合わせたパスの設定は、ここで示すようにvcvarsall.batバッチファイルを呼び出すのが簡単です。
diff -ur mecab-0.996-original/src/make.bat mecab-0.996/src/make.bat --- mecab-0.996-original/src/make.bat +++ mecab-0.996/src/make.bat @@ -1,8 +1,5 @@ -Set PATH=c:\Program Files\Microsoft Visual Studio 8\VC\bin;%PATH% -Set INCLUDE=c:\Program Files\Microsoft Visual Studio 8\VC\include;c:\Program Files\Microsoft Platform SDK\Include;%INCLUDE% -Set LIB=c:\Program Files\Microsoft Visual Studio 8\VC\lib;c:\Program Files\Microsoft Platform SDK\Lib;%LIB% -Set COMSPEC=cmd.exe +call "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" x64 rem nmake -f Makefile.msvc clean nmake -f Makefile.msvc
修正が完了したら、このmake.batを実行します。そしてsrcフォルダに生成されたmecab.exeを呼び出し、適当な文で分かち書きができたら成功です。またDオプションを指定することで辞書の情報を、PオプションでMeCabの設定を確認できます。それらのオプションのすべては、次の通りです。
C:\mecab-0.996\src>mecab.exe -h MeCab: Yet Another Part-of-Speech and Morphological Analyzer Copyright(C) 2001-2012 Taku Kudo Copyright(C) 2004-2008 Nippon Telegraph and Telephone Corporation Usage: mecab.exe [options] files -r, --rcfile=FILE use FILE as resource file -d, --dicdir=DIR set DIR as a system dicdir -u, --userdic=FILE use FILE as a user dictionary -l, --lattice-level=INT lattice information level (DEPRECATED) -D, --dictionary-info show dictionary information and exit -O, --output-format-type=TYPE set output format type (wakati,none,...) -a, --all-morphs output all morphs(default false) (ソフトわかち書き) -N, --nbest=INT output N best results (default 1) -p, --partial partial parsing mode (default false) -m, --marginal output marginal probability (default false) -M, --max-grouping-size=INT maximum grouping size for unknown words (default 24) -F, --node-format=STR use STR as the user-defined node format -U, --unk-format=STR use STR as the user-defined unknown node format -B, --bos-format=STR use STR as the user-defined beginning-of-sentence format -E, --eos-format=STR use STR as the user-defined end-of-sentence format -S, --eon-format=STR use STR as the user-defined end-of-NBest format -x, --unk-feature=STR use STR as the feature for unknown word -b, --input-buffer-size=INT set input buffer size (default 8192) -P, --dump-config dump MeCab parameters -C, --allocate-sentence allocate new memory for input sentence -t, --theta=FLOAT set temparature parameter theta (default 0.75) -c, --cost-factor=INT set cost factor (default 700) -o, --output=FILE set the output file name -v, --version show the version and exit. -h, --help show this help and exit.
最後に同じフォルダに生成されたMeCab.dllを、MeCab.pmと同じくPerlのライブラリ フォルダ (C:\Perl64\site\lib) へコピーすることで、MeCabをPerlから利用できるようになります。
次のようにファイルに記述し、
#!/usr/bin/perl
use strict;
use warnings;
use MeCab;
my $model = new MeCab::Model( '' );
my $c = $model->createTagger();
print $MeCab::VERSION, "\n";
print $c->parse( 'すもももももももものうち' );
# 辞書の情報を出力
for( my $d = $c->dictionary_info(); $d; $d = $d->{next} )
{
printf( "filename: %s\n", $d->{filename} );
printf( "charset: %s\n", $d->{charset} );
printf( "size: %d\n", $d->{size} );
printf( "type: %d\n", $d->{type} );
printf( "lsize: %d\n", $d->{lsize} );
printf( "rsize: %d\n", $d->{rsize} );
printf( "version: %d\n", $d->{version} );
}
これを、perl test.plのように実行します。
$ perl test.pl 0.996 すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ も 助詞,係助詞,*,*,*,*,も,モ,モ もも 名詞,一般,*,*,*,*,もも,モモ,モモ も 助詞,係助詞,*,*,*,*,も,モ,モ もも 名詞,一般,*,*,*,*,もも,モモ,モモ の 助詞,連体化,*,*,*,*,の,ノ,ノ うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ EOS filename: C:\Program Files (x86)\MeCab\etc\..\dic\ipadic\sys.dic charset: SHIFT-JIS size: 392126 type: 0 lsize: 1316 rsize: 1316 version: 102
もし「Can't locate MeCab.pm in @INC」としてエラーとなるならば、MeCab.pmをパスの通っている場所に配置しなおします。「Can't locate loadable object for module MeCab in @INC」のエラーならば、MeCab.dllについて同様に確認します。
「RuntimeError param.cpp(69) [ifs] no such file or directory: C:\Program Files (x86)\MeCab\etc\mecabrc」となるならば、エラーで指摘されたファイル、この場合はmecabrcのパスを確認します。指摘のファイルが「…dic\ipadic\dicrc」ならば、辞書のインストールを確認します。
「Can't load './MeCab.dll' for module MeCab: load_file:%1 は有効な Win32 アプリケーションではありません。」となるときは、環境に適合するようにコンパイルできていません。
$text = 'すもももももももものうち'; $exe_path = 'C:/"Program Files (x86)"/MeCab/bin/mecab.exe'; $descriptorspec = array( 0=>array( 'pipe', 'r' ), 1=>array( 'pipe', 'w' ) ); $process = proc_open( $exe_path, $descriptorspec, $pipes ); if( is_resource( $process ) ) { fwrite( $pipes[ 0 ], $text ); fclose( $pipes[ 0 ] ); $result = stream_get_contents( $pipes[ 1 ] ); fclose( $pipes[ 1 ] ); proc_close( $process ); header( 'Content-Type: text/plain; charset=shift-jis' ); print_r( $result ); } else { echo 'Error'; }
これは次のように出力されます。
すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ も 助詞,係助詞,*,*,*,*,も,モ,モ もも 名詞,一般,*,*,*,*,もも,モモ,モモ も 助詞,係助詞,*,*,*,*,も,モ,モ もも 名詞,一般,*,*,*,*,もも,モモ,モモ の 助詞,連体化,*,*,*,*,の,ノ,ノ うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ EOS
単独で実行するのに必要となるのは、次のファイルのみです。
C:. | libmecab.dll | mecab.exe | mecabrc | \---dic dicrc // 辞書の動作を指定するファイル sys.dic // システム辞書のファイル unk.dic // 未知語用の辞書 char.bin // プロパティ ファイル matrix.bin //設定ファイルの準備 - MeCab: オリジナル辞書/コーパスからのパラメータ推定
Text::MeCabは、MeCab用のPerlモジュールです。前述の方法ではSWIGで機械的に生成しているだけなのですが、これをよりPerlから使いやすいようにしているようです。
MeCab用として想定されている辞書には、
があります。これらの辞書による解析結果の違いは、IPA、NAIST、UniDic、JUMANの辞書実演比較(Mecab)で比較することができます。ただしこのページは2009年頃から更新されていないようで、いくつかの辞書はすでに古くなっています。
ところでMeCabでは辞書のcsvファイルはShift_JISを既定としていますが、これらの辞書ではEUC-JPが用いられていることがあります。
辞書を変更や修正したとき、そのデータが不正な状態であると解析に失敗します。たとえばPerlでは、
my $model = new MeCab::Model( '' ); my $c = $model->createTagger(); print $c->parse( 'すもももももももものうち' );
とするとparse()が未定義値を返し、「Use of uninitialized value in print」となります。
たとえば辞書をUniDicに変更するには、ダウンロードファイル一覧 - UniDic - OSDNから必要なファイルをダウンロードします。そこにはいくつかのファイルが用意されていますが、[unidic-mecab-x.x.x_bin.zip]の名前のバイナリを用いると導入が簡単です。
ダウンロードしたファイルを展開すると、sys.dicやchar.binが含まれるフォルダが現れます。それが必要なファイルの一式ですので、辞書としてそのフォルダが参照されるように、リソース ファイル内のdicdirでそのフォルダのパスを指定します。
ソースで入手した辞書は、
./configure make make install
の手順でインストールできます。ただしそれには、あらかじめ環境にMeCabがインストールされている必要があります。しかしもしそのインストールが手間ならば、MeCabがインストールされている他の環境に辞書をインストールし、その辞書を流用する方法もあります。
使用されている辞書の情報は、Dオプションで確認できます。
C:\mecab.exe -D filename: C:\Program Files (x86)\MeCab\etc\..\dic\ipadic\sys.dic version: 102 charset: SHIFT-JIS type: 0 size: 392126 left size: 1316 right size: 1316
読み込まれる辞書は、以下の場所で指定されたリソース ファイルを参照して決定されます。このリストの並びで設定が優先され、有効な設定がない場合に次の項目が参照されます。MeCab 0.90 における mecabrc ファイルの優先順位: ナマズのブログ
これらはリソース ファイルのパスです。辞書のパスは、そのリソース ファイル内に記述します。
この処理過程は、utils.cppのload_dictionary_resource()で確認できます。たとえばコマンドライン パラメータで指定する場合は、
C:\>mecab -rmecabrc
のように、Perlで環境変数に指定するならば、
$ENV{ 'MECABRC' } = 'MeCab/mecabrc';
のようにします。
リソース ファイルは次のような内容です。
; ; Configuration file of MeCab ; ; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $; ; dicdir = $(rcpath)\..\dic\ipadic ; userdic = /home/foo/bar/user.dic ; output-format-type = wakati ; input-buffer-size = 8192 ; node-format = %m\n ; bos-format = %S\n ; eos-format = EOS\n
このとき、それぞれ
で辞書のパスを指定します。
辞書用のcsvファイルではEUC-JPが用いられていることがあり、この文字エンコーディングに対応したツールでなければ正常に開けないことがあります。
Seed辞書とは、語を定義する辞書です。たとえばIPAdic (mecab-ipadic) ならば、拡張子が.csvとなっているファイルがそれです。このファイルでは最初の4項目までが必須とされており、
が定義されている必要があります。残りの項目は任意で、たとえばIPAdicではそれらに次の意味を与えています。rewrite.def
IPAdicでは動詞の語をVerb.csvで定義しており、その最初の2行は、
引き込む,762,762,7122,動詞,自立,*,*,五段・マ行,基本形,引き込む,ヒキコム,ヒキコム 引き込ま,764,764,7118,動詞,自立,*,*,五段・マ行,未然形,引き込む,ヒキコマ,ヒキコマ
のように記述されています。これを前述の項目の意味と合わせて考えると、下表の意味であることがわかります。
表層形 | 左連接状態番号 | 右連接状態番号 | コスト | 品詞1 | 品詞2 | 品詞3 | 品詞4 | 活用形 | 活用型 | 原形 | 読み | 発音 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
引き込む | 762 | 762 | 7122 | 動詞 | 自立 | * | * | 五段・マ行 | 基本形 | 引き込む | ヒキコム | ヒキコム |
引き込ま | 764 | 764 | 7118 | 動詞 | 自立 | * | * | 五段・マ行 | 未然形 | 引き込む | ヒキコマ | ヒキコマ |
mecab-dict-index.exeで、文字エンコーディングを変更して辞書を再構築できます。たとえばインストーラ版によってインストールされたIPAdicの文字エンコーディングをUTF-8にするならば、カレントディレクトリを辞書のディレクトリとして、
C:\Program Files (x86)\MeCab\dic\ipadic>..\..\bin\mecab-dict-index -f SHIFT-JIS -t UTF-8文字コード変更 - MeCab: Yet Another Part-of-Speech and Morphological Analyzer
とします。
このプログラムは、辞書ファイルへの書き込み権限を持ったユーザーで実行します。もし権限がなくファイルの更新に失敗しても、それが通知されないため注意が必要です。
オプションの意味は、次の通りです。
Usage: mecab-dict-index.exe [options] files -d, --dicdir=DIR set DIR as dic dir (default ".") -o, --outdir=DIR set DIR as output dir (default ".") -m, --model=FILE use FILE as model file -u, --userdic=FILE build user dictionary -a, --assign-user-dictionary-costs only assign costs/ids to user dictionary -U, --build-unknown build parameters for unknown words -M, --build-model build model file -C, --build-charcategory build character category maps -s, --build-sysdic build system dictionary -m, --build-matrix build connection matrix -c, --charset=ENC make charset of binary dictionary ENC (default SHIFT-JIS) -t, --charset=ENC alias of -c -f, --dictionary-charset=ENC assume charset of input CSVs as ENC (default SHIFT-JIS) -w, --wakati build wakati-gaki only dictionary -p, --posid assign Part-of-speech id -F, --node-format=STR use STR as the user defined node format -v, --version show the version and exit. -h, --help show this help and exit.mecab-dict-index.exe --help
よって辞書のパスも指定して変換するならば、
C:\>Program Files (x86)\MeCab\bin\mecab-dict-index -d C:\ipadic -o C:\ -f euc-jp -t utf-8
のようにします。実行時に「permission denied」としてエラーとなる場合があります。これは出力先のディレクトリが存在しない場合にも同様のメッセージとなるため、注意が必要です。
文字エンコーディングの変更が成功すると、
の2つのファイルが更新されます。
未知語、つまり辞書に載っていない単語の処理方法を、独自に定義できます。
既定ではIPAdicは、数字から構成される未知語はすべて1文字ずつに分解します。たとえば「123人」は、
1 名詞,数,*,*,*,*,1,イチ,イチ 2 名詞,数,*,*,*,*,2,ニ,ニ 3 名詞,数,*,*,*,*,3,サン,サン 人 名詞,接尾,助数詞,*,*,*,人,ニン,ニン
となります。これの数字部分を1語とするには、未知語用の辞書であるunk.defの数字の定義において、その4番目にあるコストの項目を小さな値に設定します。
NUMERIC,1295,1295,0,名詞,数,*,*,*,*,*
さらに1文字の数字が未知語となるように、それらが定義されているNoun.number.csvから、その定義を削除します。
... 数,1295,1295,6512,名詞,数,*,*,*,*,数,スウ,スー5,1295,1295,3370,名詞,数,*,*,*,*,5,ゴ,ゴ八,1295,1295,3615,名詞,数,*,*,*,*,八,ハチ,ハチ ...
修正が終わったらmecab-dict-indexを実行し、辞書を生成し直します。そうすると解析の結果は次のように変化します。
123 名詞,数,*,*,*,*,* 人 名詞,接尾,助数詞,*,*,*,人,ニン,ニン
この方法の詳細は、MeCab: 未知語処理で解説されています。
出力フォーマットは辞書のフォルダ、たとえばIPAdicならばMeCab\dic\ipadicのdicrcファイルで定義されています。その内容は次のようなものです。
cost-factor = 800 bos-feature = BOS/EOS,*,*,*,*,*,*,*,* eval-size = 8 unk-eval-size = 4 config-charset = EUC-JP ; simple node-format-simple = %m\t%F-[0,1,2,3]\n eos-format-simple = EOS\n ; ChaSen node-format-chasen = %m\t%f[7]\t%f[6]\t%F-[0,1,2,3]\t%f[4]\t%f[5]\n unk-format-chasen = %m\t%m\t%m\t%F-[0,1,2,3]\t\t\n eos-format-chasen = EOS\n
これはmecabの-Oオプションで、定義にある「simple」や「chasen」を指定することで出力フォーマットを変更できます。このとき存在しないフォーマットを指定すると、「unkown format type [ *** ]」としてエラーとなります。
ここで定義されている以外にも、
の2つが既定で用意されています。
たとえばこの出力フォーマットをPerlで指定するならば、
my $model = new MeCab::Model( '-Ochasen' );
のようにします。
; simple node-format-simple = %m\t%F-[0,1,2,3]\n eos-format-simple = EOS\n
すもも 名詞-一般 も 助詞-係助詞 もも 名詞-一般 も 助詞-係助詞 もも 名詞-一般 の 助詞-連体化 うち 名詞-非自立-副詞可能 EOS
; ChaSen node-format-chasen = %m\t%f[7]\t%f[6]\t%F-[0,1,2,3]\t%f[4]\t%f[5]\n unk-format-chasen = %m\t%m\t%m\t%F-[0,1,2,3]\t\t\n eos-format-chasen = EOS\n
すもも スモモ すもも 名詞-一般 も モ も 助詞-係助詞 もも モモ もも 名詞-一般 も モ も 助詞-係助詞 もも モモ もも 名詞-一般 の ノ の 助詞-連体化 うち ウチ うち 名詞-非自立-副詞可能 EOS
新たなフォーマットを追加するには前述のdicrcか、リソース ファイルのmecabrcに追記します。
説明 | 既定値 | |
---|---|---|
node | 1つの形態素を出力 | 空文字 |
unk | 1つの未知語形態素を出力 | nodeと同一フォーマット ※1 |
bos | 形態素解析の結果に先だって出力 (header的役割) | 空文字 |
eos | 形態素解析の結果の後に出力 (footer的役割) | EOS\n |
eon | N-best出力で、N-Bestの出力が終了したときに出力 | 空文字列 |
これらは次のように指定します。
; yomi node-format-yomi = %pS%f[7] unk-format-yomi = %M eos-format-yomi = \n
文字列 | 意味 |
---|---|
%s | 形態素種類 (0: 通常、1: 未知語、2:文頭、3:文末) |
%S | 入力文 |
%L | 入力文の長さ |
%m | 形態素の表層文字列 |
%M | 形態素の表層文字列。ただし空白文字も含めて出力 (%pSを参照のこと) |
%h | 素性の内部ID (辞書のpos-id.defファイルに定義がある) MeCab: 品詞 ID |
%% | %そのもの |
%c | 単語生起コスト |
%H | 素性 (品詞、活用、読み) 等をCSVで表現したもの |
%t | 文字種ID |
%P | 周辺確率 (-l2オプションを指定したときのみ有効) |
%pi | 形態素に付与されるユニークなID |
%pS | もし形態素が空白文字列で始まる場合は、その空白文字列を表示。%pS%mと%Mは同一 |
%ps | 開始位置 |
%pe | 終了位置 |
%pC | 1つ前の形態素との連接コスト |
%pw | %cと同じ |
%pc | 連接コスト+単語生起コスト (文頭から累積) |
%pn | 連接コスト+単語生起コスト (その形態素単独。%pw+%pC) |
%pb | 最適パスの場合*、それ以外は' ' |
%pP | 周辺確率 (-l2オプションを指定したときのみ有効) |
%pA | blpha、forward log確率 (-l2オプションを指定したときのみ有効) |
%pB | beta、backward log確率 (-l2オプションを指定したときのみ有効) |
%pl | 形態素の表層文字列としての長さ、strlen(%m) と同一 |
%pL | 形態素の表層文字列としての長さ。ただし空白文字列も含む。strlen(%M) と同一 |
%phl | 左文脈ID |
%phr | 右文脈ID |
%f[N] | csvで表記された素性のN番目の要素 |
%f[N1,N2,N3…] | N1、N2、N3番目の素性を","をデリミタとして表示 |
%FC[N1,N2,N3…] | N1、N2、N3番目の素性をCをデリミタとして表示。ただし、要素が空の場合は以降表示が省略される。 (例) F-[0,1,2] |
\0 \a \b \t \n \v \f \r \\ | 通常のエスケープ文字列 |
\s | ' ' (半角スペース) 設定ファイルに記述するときに使用 |
型 | 名前 | 説明 |
---|---|---|
struct mecab_node_t* | prev | pointer to the previous node. |
struct mecab_node_t* | next | pointer to the next node. |
struct mecab_node_t* | bnext | pointer to the node which starts at the same position. |
struct mecab_node_t* | enext | pointer to the node which ends at the same position. |
struct mecab_path_t* | rpath | pointer to the right path. this value is NULL if MECAB_ONE_BEST mode. |
struct mecab_path_t* | lpath | pointer to the left path. this value is NULL if MECAB_ONE_BEST mode. |
型 | 名前 | 説明 |
---|---|---|
const char* | surface | surface string (表層形). this value is not 0 terminated. You can get the length with length/rlength members. |
const char* | feature | feature string |
unsigned int | id | unique node ID |
unsigned short | length | length of the surface form. |
unsigned short | rlength | length of the surface form including white space before the morph. |
unsigned short | rcAttr | right attribute ID (右文脈ID、つまり単語を右から見たときの文脈ID) |
unsigned short | lcAttr | left attribute ID (左文脈ID、つまり単語を左から見たときの文脈ID) |
unsigned short | posid | unique part of speech ID (品詞ID). This value is defined in |
unsigned char | char_type | character type |
unsigned char | stat | status of this model. This value is
one of the following.
|
unsigned char | isbest | set 1 if this node is best node. |
float | alpha | forward accumulative log summation. (This value is only available when MECAB_MARGINAL_PROB is passed.) |
float | beta | backward accumulative log summation. (This value is only available when MECAB_MARGINAL_PROB is passed.) |
float | prob | marginal probability. (This value is only available when MECAB_MARGINAL_PROB is passed.) |
short | wcost | word cost (単語コスト). |
long | cost | best accumulative cost from bos node to this node. |