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

$Id: index.html,v 1.26 2003/03/27 11:48:06 taku-ku Exp $;

## MeCab (和布蕪)とは

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

## 目次

- 特徴
- 新着情報
- ダウンロード
- インストール
  - Unix
  - Windows
  - コンパイルが通った環境
- 使い方
  - とりあえず解析する
  - わかち書きをする
  - 出力フォーマットの変更
    - フォーマットの再定義
  - その他のコマンドラインオプション
  - 辞書の追加方法
  - 文字コードの変更
  - 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

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

## 新着情報

- 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.75.tar.gz: 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 時のオプションで,
    --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 に定義されています. さらに, ユーザがこれらのフォーマットを自由に定義することが可能です. こちらをご覧ください.

### 文字コード変更

特に指定しない限り, 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 から継承して書くだけ
わかち書き位置の外部指定 | × | × | 研究目的として重要な機能なので実装予定
Windows 版 | △(コード分割) | ○(単一コードから生成) |
再入可能ライブラリ | × | ○ |
マルチスレッド対応 | × | ○ |
文字コード非依存 | △ (動的に変更) | ○ | SJIS/EUC/UTF-8 の辞書で動作確認
連接コストの推定精度の向上 | △ (単純な最尤推定) | △ (左に同じ) | ME 等を使って推定 研究対象??

## おまけ (技術資料)

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

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

$Id: index.html,v 1.26 2003/03/27 11:48:06 taku-ku Exp $;