数学、ときどき統計、ところによりIT

理論と実践の狭間で漂流する数学趣味人の記録

形態素解析 MeCab(1)

与えられた任意の文に対して、意味を持つ最小単位の音素(これを形態素と言います)に分解して、音素の品詞を判別する処理を形態素解析と言います。今回は形態素解析を行うツールである MaCab の使い方についての個人的なメモです。

インストール

以下の記述は全て Windows の場合のものです*1

公式サイトのダウンロードの項目に "Binary package for MS-Windows" とあるので、そこから実行形式のバイナリーパッケージ(mecab-0.996.exe)を入手して下さい。
インストーラー実行後、使用する文字コードを選択*2すれば、ファイルの生成が開始されます。ソースコードを使ってインストールする場合は別途、辞書ファイルをダウンロードする必要がありますが、Windows 用のバイナリーパッケージには辞書ファイルが予め付いているのでインストール直後から使用可能な状態になっています。

インストールが完了したら、実行ファイルのあるフォルダにパスを通しておくと便利です。インストール時にインストール先フォルダを特に指定していなければ、実行ファイルは

 C:\Program Files (x86)\MeCab\bin

にあります。本記事で示すコマンドは全て実行ファイルへのパスが通してあることを前提としています。

取りあえず使ってみる

文章の記載されたファイル input.txt を処理する場合、コマンドライン

mecab input.txt

と入力し実行すれば標準出力(コマンドラインの画面)に結果が出力されます。

mecab input.txt -o output.txt

とすれば解析結果をテキストファイル output.txt に出力することが出来ます。
なお、o オプションの代わりにコマンドプロンプトのリダイレクトの機能を使っても同じ結果が得られます。

処理したい文が短い場合は

echo 処理したい文字列 | mecab

とすれば入力ファイルを作成することなくその場で処理出来ます*3

試しに本ブログ内の文を形態素解析した結果は以下の通りになります。

経験	名詞,サ変接続,*,*,*,*,経験,ケイケン,ケイケン
損失	名詞,サ変接続,*,*,*,*,損失,ソンシツ,ソンシツ
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
最小	名詞,一般,*,*,*,*,最小,サイショウ,サイショー
化	名詞,接尾,サ変接続,*,*,*,化,カ,カ
する	動詞,自立,*,*,サ変・スル,基本形,する,スル,スル
学習	名詞,サ変接続,*,*,*,*,学習,ガクシュウ,ガクシュー
アルゴリズム	名詞,一般,*,*,*,*,アルゴリズム,アルゴリズム,アルゴリズム
と	助詞,格助詞,一般,*,*,*,と,ト,ト
その	連体詞,*,*,*,*,*,その,ソノ,ソノ
評価	名詞,サ変接続,*,*,*,*,評価,ヒョウカ,ヒョーカ
について	助詞,格助詞,連語,*,*,*,について,ニツイテ,ニツイテ
議論	名詞,サ変接続,*,*,*,*,議論,ギロン,ギロン
し	動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
ます	助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
。	記号,句点,*,*,*,*,。,。,。

上記の出力結果は

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

の書式で出力されていますが、詳細な品詞情報を付けず、形態素の間に区切りを入れるだけ(これを分ち書きと言います)の簡便な出力も可能です。

コマンド mecab のオプション引数

次の表はコマンド mecab のオプション引数の一覧です。

書式 説明
-r FILE use FILE as resource file
-d DIR set DIR as a system dicdir
-u FILE use FILE as a user dictionary
-l INT lattice information level (DEPRECATED)
-D show dictionary information and exit
-O TYPE set output format type (wakati,none,...)
-a output all morphs(default false)
-N INT output N best results (default 1)
-p partial parsing mode (default false)
-m output marginal probability (default false)
-M INT maximum grouping size for unknown words (default 24)
-F STR use STR as the user-defined node format
-U STR use STR as the user-defined unknown node format
-B STR use STR as the user-defined beginning-of-sentence format
-E STR use STR as the user-defined end-of-sentence format
-S STR use STR as the user-defined end-of-NBest format
-x STR use STR as the feature for unknown word
-b INT set input buffer size (default 8192)
-P dump MeCab parameters
-C allocate new memory for input sentence
-t FLOAT set temparature parameter theta (default 0.75)
-c INT set cost factor (default 700)
-o FILE set the output file name


本格的に使う前に…

インストール直後の状態では、半角記号を「サ変接続」と認識してしまうため、その問題を修正する必要があります。まず辞書関連のデータが収められているフォルダにあるテキストファイル

 C:\Program Files (x86)\MeCab\dic\ipadic\unk.def

を開き

SYMBOL,1283,1283,17585,名詞,サ変接続,*,*,*,*,*

SYMBOL,1283,1283,17585,記号,一般,*,*,*,*,*

と修正します。

その後、辞書フォルダをカレントフォルダとして次のコマンド

mecab-dict-index

を実行し、辞書を再作成します。

使用上の注意

  • 入力するテキストデータの文字コードは、MeCab のインストール時に選択した文字コードと一致させておく必要があります。
  • 改行コードは LF、CR、CR+LF の3種類ありますが、Mecab は CR を改行コードと認識出来ず、記号として判断してしまいます。入力する文章の改行コードは予め LF または CR+LF にしておく必要があります。
  • 入力するテキストがあまりにも巨大だと MeCab はオーバーフローしてしまいます。b オプションでバッファサイズを 8192 から 8192*640 の範囲で指定できますが、併せて(可能であれば)予め句点や読点の位置で改行を入れておくと処理が途中で止まってしまうリスクを低くすることが出来ます。
  • 3語以上が繋がって出来ているカタカナ語形態素に区切ることが出来ないため、辞書ファイルに追加して対応する必要があります。


形態素解析 MeCab(2)へ続く。

*1:現在、自分の計算機環境は Windows のみであることから、Windows の場合に限定します。

*2:ネットから得られるテキストデータを処理する場合は UTF-8 が最適なのですが、Windows 環境との相性を考えて、Shift-JIS を選択しました。

*3:UNIX 系のシェルコマンドの場合と異なり、コマンドプロンプトの echo は処理したい文字列をダブルクォーテーションで囲む必要はありません。