# MeCab: Yet Another Part-of-Speech and Morphological Analyzer

$Id: index.html,v 1.34 2005/03/20 13:18:57 taku-ku Exp $;

## MeCab (和布蕪)とは

MeCab は, 奈良先端科学技術大学院大学自然言語処理学講座の開発する形態素解析器 ChaSenを基に開発された高速な形態素解析器です. 現在 ChaSen とは独立に, フルスクラッチから開発されています. 解析精度は, ChaSen と変わらないにもかかわらず, 平均的に ChaSen の3-4倍のスピードで動作します. 以前は, ChaSenTNG という名前でしたが, オリジナルの ChaSen と方向性が変わってきており, これ以上 ChaSen の名前を借り続ける事は不適切と感じたので, MeCab に名前を変えました. ちなみに 和布蕪(めかぶ)は, 作者の好物です.

## 目次

- 特徴
- 新着情報
- ダウンロード
- インストール
  - Unix
  - Windows
  - コンパイルが通った環境
- 使い方
  - とりあえず解析する
  - わかち書きをする
  - 出力フォーマットの変更
    - フォーマットの再定義
  - その他のコマンドラインオプション
  - 辞書の追加方法
  - N-Best 解の出力
  - 文字コードの変更
  - C/C++ ライブラリインタフェース
    - C ライブラリ仕様
    - C サンプル
    - コンパイル方法
    - マルチスレッドについて
  - スクリプト言語 (perl/ruby/python/Java) バインディング
- SPEED 比較
- TODO, ChaSen との比較
- おまけ

## 特徴

- ChaSen や KAKASI よりも 3-4倍程度 高速.
  PentiumIII 1Ghz の Linux で, 1Mbyte/Sec (10000文/sec) の解析速度 (出力にかかる時間は除く)
- 解析モデルとして可変長 マルコフモデル採用.
- 解析精度は, 現行 ChaSen と同一.
- 辞書引きアルゴリズム/データ構造に, Double-Array を採用.
  Double-Arrayはトライ構造を表現するデータ構造で, 空間使用率, 検索速度のバランスが極めて良い.
- 多国語(英語,中国語など)対応予定. (現在は日本語のみ)
- 再入可能なライブラリ
- 各種スクリプト言語バインディング (perl/ruby/python/java)

## メーリングリスト

mecab の メーリングリストを作りました. 参加したい方は, mecab-ctl@tahoo.orgあてに

    subscribe

のみを書いたメールを送信してください.

過去記事は, こちらから入手 できます. ML に質問する前に同様の内容が投稿されていないか事前にチェック していただけると幸いです.

## 新着情報

- 2005-03-20: mecab 0.81
  - mecab_sparse_tostr3()で buffer overflow が返るバグを修正
- 2004-10-17: mecab 0.80
  - Writer クラスの初期化わすれのバグを修正
  - Perl/Python/Java モジュールを最新の SWIG で作りなおした
- 2004-8-27: mecab 0.79
  - 一部の環境でライブラリ (libmecab) を用いた場合, getCost () で SIGSEGV が発生する環境する点を修正した.
  - mecab_new, mecab_new2 に失敗した場合, 4byte ずつメモリーリークするバグを修正
  - Windows 版インストーラの変更. Administrator でインストールした場合, HKEY_LOCAL_MACHINE に レジストリ情報を書きこむようにし, ユーザ全員がmecab を使用可能にした. (インストール時のオプションにて変更可能)
- 2004-6-22: mecab 0.78
  - -Oyomi を用いたとき, 未知語処理の読みが出力されなかったのを修正. (単純に入力の文字列をそのままの形で表示する)
  - -Oyomi を用いたとき, 入力の半角スペースが出力時に消去される問題を修正
  - 出力フォーマットの命令に %M, %pS, %pL を追加. 詳細は こちら
  - 出力フォーマットの指定に unk-format を追加した. 詳細は こちら
  - pImpl イディオムを使い, libmecab.so の独立性が高まった.
  - デフォルトで pthread を(mutex) 使わないようにした. マルチスレッド環境で使う場合は configure option で --enable-mutex を指定してください.
- 2004-1-3: mecab 0.77
  - 入力文が長い時は解析エラーになるように修正した. (入力文が長い時にはノード数を管理するインデックスのオーバフローが発生していた)
  - stringbufferのメソッドのオーバーロードがうまくいかない場合を修正した.
  - Java bindings 修正 (package 名を追加)
- 2003-7-3: mecab 0.76
  - N-Best 解が出力できるようになった. 詳しくは こちら
  - N-Best 解を得るための API の追加. 詳しくは こちら
  - 出力バッファを strstream から, 自作の StringBuffer クラスに変更した. (環境によっては, 若干高速になった)
  - perl/ruby/java/python パッケージを別配布にした.
  - Windows 版の辞書を ipadic-2.6.0 に変更
- 2003-4-15: mecab 0.75
  - ipadic 2.4.4/2.5.0/2.5.1 のそれぞれで辞書が正しくコンパイルできるようにした.
  - Windows 版のインストーラを Inno Setup に変更した. アップグレードする場合は, 旧 version を削除する必要がある.
  - Shift-JIS 環境で ASCII 文字列に対する未知語処理がうまくいかないバグを修正
- 2003-3-14: mecab 0.74
  - UTF-8 環境での未知語処理ルーチンが少しまともになった.
  - extconf.rb (ruby binding) の修正
  - Darts 0.1に対応
- 2003-1-27: mecab 0.73
  - win32 dll の mecab_sparse_tostr () が常に NULL を返すバグを修正
- 2003-1-26: mecab 0.72
  - Windows binary の作成環境を mingw から Visual Studio .NET に変更
  - Windows (Shift-JIS) 環境での未知語処理ルーチンが少しまともになった.
  - -u オプションの廃止. 自動的に出力バッファのサイズを変更できるようにした.
  - MeCab::Param クラスのメモリリークバグの修正
  - Kylix3 Open Editon (Borland C++ 5.7 Open Edition) のサポート
  - Intel(R) C++ Compiler のサポート
- 2003-1-3mecab 0.71
  - Connector クラスの廃止, ソースをきれいにする.
  - Darts 0.08に対応
- 2002-11-9: 0.7
  - 辞書(ipadic) 中の重複エントリを削除することにより, 5%程度の高速化
  - Document 中の typo の修正
  - Microsoft Visual Stduio .NET 用の ソリューションファイルを添付した.
  - 辞書追加への単語登録方法に関する簡単なドキュメントを付与
  - Perl/Ruby/Python/Java のバイディングに関する簡単なドキュメントを付与
  - Perl/Ruby/Python/Java にて, 各形態素を表現するクラス(Node), ラティスを自由にアクセスするクラス (Path)を追加した.
  - 設定ファイル中の unkown-* パラメータを unk-* に変更
  - -w width option の廃止 (使い方を説明してなかったので, 問題ないと思う)
    コスト幅の明示的な調節は廃止し. 全 ラティスを作るか, 作らないか(default) を切りかえるオプション -a (--build-all-lattice) を付与した.
    ラティス を扱う処理は, perl 等の外部プログラムに任せる方針に変更
  - 上記の理由により, フォーマットも簡略化, 最小限のもののみを残し, %b %u %v %P %C %D %d %w の廃止
- 2002-09-17: mecab 0.6
  - ChaSenTNG 改め, mecab になる.
  - 出力フォーマットの変換機能を付与, 詳細は ココ
  - API の変更
  - マルチスレッド対応 (実験的)
  - インスタンス開放時のメモリリークのバグの修正
- 2002-03-22: 0.54
  - Windows 版に インストーラを付けた.
  - Tagger class のインターフェイスの若干の変更
- 2002-03-17: 0.53
  - 入力のバッファサイズを変更できる API を付けた
  - Java モジュールを作成した
  - Perl/Ruby/Python/Java モジュールに例外処理のルーチンを付けた
  - UTF8 の辞書が作成できるようにした ./configure --with-charset=utf8
    (かなり実験的)
  - その他細い修正
  - Windows Version を更新した.
- 2002-03-14: 0.52
  - mecabrc の読みこみがうまくいかないバグを修正
  - Perl/Ruby/Python モジュールを配布パッケージに付与するのを忘れていた ので付与した.
  - Perl/Ruby/Python モジュールに、traditional interface をつけた.
- 2002-01-13: 0.51
  - Perl/Ruby/Python モジュールの提供
- 2001-12-25: 0.5
  - 設定ファイルの path 等の全面的な変更
  - 辞書ファイルの拡張子を *.tng から *.cha に変更
  - 形態素の切り出し位置を表示する option (-O detail) を追加
  - MeCab ライブラリの公開
  - Windows 版の公開 (実験的)
- 2001-12-23: 0.4
  - 設定ファイルのフォーマットの変更 (section の廃止)
  - 辞書用 設定ファイルと システム用設定ファイルの独立 (include という形で実現)
  - コマンドラインオプションの充実
  - 若干の高速化 (5%程度)
  - STL 互換の NodeIterator の提供. STL Algoritm が活用できる
- 2001-12-11: 0.3
  - 細かい bugfix
- 2001-12-10:
  - Tagger class の導入, chasentng.h の提供
- 2001-12-4: 0.1
  - Initial Release!

## ダウンロード

- MeCab は The GNU Lesser General Public License (LGPL)に従ったフリーソフトウェ アです. このライセンスは暫定的なものです.
- MeCab には, ライセンスの関係上辞書が含まれていません. 動作には, ipadic が必要です.
- MeCab は, 現在開発段階にあり, 仕様そのものが不安定です. 御了承ください.

### Source

- mecab-0.81.tar.gz: HTTP

### perl/ruby/python/java バインディング

- HTTP

### Binary package for MS-Windows

- HTTP

## インストール

### UNIX

- 動作に必要なもの
  - ipadic-2.4.4/2.5.0/2.5.1 のうちいずれか1つ: (必須, これら以外の Version ではテストしていません. 2.5.x は 開発バージョン, 2.4.x は安定バージョンです.)
  - C++ コンパイラ (g++ 2.95.1 以上 で動作確認済み, g++ 3.0.x でも可能.):
    ISO 標準 C++ の近代的な機能を使ってるので, 古いコンパイラ (g++2.8, VC++4.0 等)で はコンパイルできないと思います. ご了承下さい.
  - Perl5: 辞書作成に使います.
- インストール手順
  一般的なフリーソフトウェアと同じ手順でインストールできます.
  ただし, dic というディレクトリに, ipadic-2.4.4/2.5.0/2.5.1のいずれか1つを展開しておく必要があります.

       % tar zxfv mecab-X.X.tar.gz
       % cd mecab-X.X
       % cd dic
       % tar zxfv ipadic-2.X.X.tar.gz (2.4.4, 2.5.0 2.5.1 のいずれか1つ)
       % cd ..
       % ./configure
       % make
       % su
       # make install

- その他
  - configure 時のオプションで,
    --enable-mutex とすると, マルチスレッド環境でライブラリを用いることがで きます.
    デフォルトでは, このオプションは適用されません.
  - configure 時のオプションで,
    --prefix=/home/taku-ku/nltools のように
    インストールパスを変更することが可能です.
    この場合, インストールに Super User の権限は必要ではありません.
  - configure 時のオプションで,
    --disable-shared を指定すると, shared library を作成せず, 高速な binary が作成できます. また, 動的リンクに失敗するときは, このオプショ ンを使ってみてください.

### Windows

バイナリをインストールする場合は, 自己解凍インストーラ (mecab-X.X.exe) を実行してください. 辞書も同時にインストールされます.

ソースからコンパイルする場合.

- Microsoft Visual Studio .NET C++ 7 の場合

  ソースパッケージの vcc というディレクトリに, ソリューションファイルがあります. それを用いて ビルドしてください.

  コマンドラインからも以下のような方法で作成できます. ただし cygwin が必要です.

      > cd mecab-X.X.X
      > ./configure
      > cd src
      > nmake -f Makefile.msvc

- Borland C++ (Free Compilerも含む) の場合 (make は, BCC32 付属のものを使用). ただし, cygwinが必要です.

      > cd mecab-X.X.X
      > ./configure
      > cd src
      > make -f Makefile.bcc32

- cygwin の場合

      > cd mecab-X.X.X
      > ./configure --enable-shared=no
      > make

- mingw の場合

      > cd mecab-X.X.X
      > env CXX="g++ -mno-cygwin -I/usr/include/g++-3" ./configure --enable-shared=no
      > make

  公開している Windows binary package は, Visual Studio .NET C++ 上でビルドしています.

### コンパイルが通った環境

- Redhat 7.2 (gcc 2.9.6, gcc 3.0.1, gcc 3.1, gcc 3.2, Borland C++ 5.7 Open Edition, Intel(R) Complier)
- Solaris8 sun4u sparc SUNW,Ultra-30 (gcc 2.95.3)
- FreeBSD 4.2-RELEASE (gcc 2.95.2)
- Windows NT4.0, Windows 2000, Windows XP (Borland C++ 5.6 for Win32)
- Windows NT4.0, Windows 2000 (Microsoft Visual C++ Ver.6)
- Windows XP (Microsoft Visual .NET/C++, Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 13.00.9466)
- Windows NT4.0, Windows 2000, Windows XP (gcc 2.5.3)
- Windows NT4.0, Windows 2000, Windows XP (g++ -mno-cygwin option)
- Mac OS X (gcc 2.95.2 with --disable-shared)

## 使い方

### とりあえず解析してみる

mecab を起動して, 生文を標準入力から入力してみてください.
MeCab では, 一行一文を前提として解析を行ないます.

    % mecab
    太郎はこの本を二郎を見た女性に渡した。
    太郎    名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
    は  助詞,係助詞,*,*,*,*,は,ハ,ワ
    この    連体詞,*,*,*,*,*,この,コノ,コノ
    本  名詞,一般,*,*,*,*,本,{ホン/モト},{ホン/モト}
    を  助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
    二郎    名詞,固有名詞,一般,*,*,*,二郎,ニロウ,ニロー
    を  助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
    見  動詞,自立,*,*,一段,連用形,見る,ミ,ミ
    た  助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
    女性    名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ
    に  助詞,格助詞,一般,*,*,*,に,ニ,ニ
    渡し    動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
    た  助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
    。  記号,句点,*,*,*,*,。,。,。
    EOS

出力フォーマットは, ChaSen のそれと大きく異なります. 左から,

    表層形\t品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音

となっています.

引数にファイルを与えると, そのファイルが解析対象となります. また, -o オプションにて, 別のファイルに結果を出力することも可能です.

    % mecab INPUT -o OUTPUT

### わかち書きをする

以下のように -O オプションを使います.

    % mecab -O wakati
    太郎はこの本を二郎を見た女性に渡した。
    太郎 は この 本 を 二郎 を 見 た 女性 に 渡し た 。

### 出力フォーマットの変更

以下のように -O オプションを使います.

    % mecab -Oxml (XML)
    % mecab -Ochasen (ChaSen互換)
    % mecab -Ocsv (csv)
    % mecab -Oyomi (ヨミ付与)

これらの出力フォーマットは, /usr/local/lib/mecab/ipadic/dicrc に定義されています. さらに, ユーザがこれらのフォーマットを自由に定義することが可能です. こちらをご覧ください.

### N-Best 解の出力

-N #NUM オプションを使うことで, 確からしいものから#NUM 個解析結果を出力 します. 理論的にはすべての可能な解析解を出力することが 可能ですが, 出力バッファのかねあいから, -N の最大値を 512 に制限しています.

    % mecab -N2
    今日もしないとね。
    今日    名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
    も      助詞,係助詞,*,*,*,*,も,モ,モ
    し      動詞,自立,*,*,サ変・スル,未然形,する,シ,シ
    ない    助動詞,*,*,*,特殊・ナイ,基本形,ない,ナイ,ナイ
    と      助詞,接続助詞,*,*,*,*,と,ト,ト
    ね      助詞,終助詞,*,*,*,*,ね,ネ,ネ
    。      記号,句点,*,*,*,*,。,。,。
    EOS
    今日    名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
    もし    副詞,一般,*,*,*,*,もし,モシ,モシ
    ない    形容詞,自立,*,*,形容詞・アウオ段,基本形,ない,ナイ,ナイ
    と      助詞,接続助詞,*,*,*,*,と,ト,ト
    ね      助詞,終助詞,*,*,*,*,ね,ネ,ネ
    。      記号,句点,*,*,*,*,。,。,。
    EOS

N Best 解は, いったん 前向きに viterbi 探索を行なった後, 後ろ向きに, A* 探索を行なうことで実現できます. ただし, A* といっても, heruristic 関数の値は, 前向き探索 時に厳密解を取得できているので, 厳密な N-Best 解を出力する ことができます.

### 文字コード変更

特に指定しない限り, euc が使用されます. もし, shift-jis や utf8 を 使いたい場合は, configure オプションにて charset を変更し, 辞書を再構築してください. これで, shift-jis や, utf8 の辞書が作成されます.

辞書の構築の際の文字コードの変換に iconv が使用されます. iconv を前もってインストールしておく必要があります. 最近の Linux や, cygwin はインストールされているようです.

    % ./configure --with-charset=sjis
    % make

    % ./configure --with-charset=utf8
    % make

コンパイル後でも, 以下の手順で文字コードの異なる辞書を再構築できます. -d オプションを使うことで, それぞれのコードの辞書を使い分けることが可能 です.

    % cd mecab-X.X.X/dic
    % vi dicrc

    # charset を utf8 に変更
    charset = utf8

    % make clean
    % make charset=utf8
    % make dicdir=/somewhere/dic/ipadic-utf8 install
    % mecab -d /somewhere/dic/ipadic-utf8 FILES ..

## SPEED 比較

テストコーパス: RWCP コーパス(毎日新聞 94年), 約 35000文 3MByte
テスト環境: RedHat Linux 7.2, DELL , XEON 2.4Ghz dual, Memory 4Gbyte

分かち書き出力の結果 (juman のみ標準のフォーマット)

MeCab | 2.21s user 0.04s system 99% cpu 2.269 total
ChaSen | 7.22s user 0.06s system 98% cpu 7.358
JUMAN | 25.93s user 0.07s system 99% cpu 26.055 total
kakasi | 7.03s user 0.05s system 99% cpu 7.124 total

デフォルトの出力フォーマット(kakasi は分かち書き)

MeCab | 2.72s user 0.04s system 98% cpu 2.793 total
ChaSen | 8.22s user 0.06s system 100% cpu 8.278 total
JUMAN | 25.93s user 0.07s system 99% cpu 26.055 total
kakasi | 7.03s user 0.05s system 99% cpu 7.124 total

## TODO, ChaSen との比較

ChaSen 互換をうたうには, まだまだ遠い..

| ChaSen | MeCab | 進行状況,予定など
連結品詞機能 | ○ | × | CaboChaが使うのでサポートしたい
複合語機能 | ○ | × |
出力フォーマットの柔軟な変更 | ○ | ○ |
すべての解析解の表示 | ○ | ○ |
n-best 解 | × | ○ |
多言語形態素解析 | △ | △ | 英語, 中国語の tokenizer を tokenizer class から継承して書くだけ
わかち書き位置の外部指定 | ○ | × | 研究目的として重要な機能なので実装予定
再入可能ライブラリ | × | ○ |
マルチスレッド対応 | × | ○ |
文字コード非依存 | △ (動的に変更) | ○ | SJIS/EUC/UTF-8 の辞書で動作確認
連接コストの推定精度の向上 | △ (単純な最尤推定) | △ (左に同じ) | CRF 等を使って推定

## おまけ (技術資料)

自然言語処理, 特に形態素解析を知ってる人向けの技術資料
誤りがあればお知らせください.

| MeCab | ChaSen | JUMAN | KAKASI
解析モデル | 可変長マルコフモデル | 可変長マルコフモデル | bi-gram マルコフモデル | 最長一致
コスト推定手法 | コーパスから学習 | コーパスから学習 | 人手 | コストという概念無し
辞書引きアルゴリズム | Double Array | パトリシア木 | パトリシア木 | Hash?
解探索アルゴリズム | Viterbi | Viterbi | Viterbi | 決定的?
連接表の実装 | 3次元 Table | オートマトン | 2次元 Table? | 連接表無し?
品詞の階層 | 無制限多階層品詞 | 無制限多階層品詞 | 2段階固定 | 品詞という概念無し?

$Id: index.html,v 1.34 2005/03/20 13:18:57 taku-ku Exp $;