形態素解析 MeCab(1)
与えられた任意の文に対して、意味を持つ最小単位の音素(これを形態素と言います)に分解して、音素の品詞を判別する処理を形態素解析と言います。今回は形態素解析を行うツールである MaCab の使い方についての個人的なメモです。
インストール
公式サイトのダウンロードの項目に "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。
試しに本ブログ内の文を形態素解析した結果は以下の通りになります。
経験 名詞,サ変接続,*,*,*,*,経験,ケイケン,ケイケン 損失 名詞,サ変接続,*,*,*,*,損失,ソンシツ,ソンシツ を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 最小 名詞,一般,*,*,*,*,最小,サイショウ,サイショー 化 名詞,接尾,サ変接続,*,*,*,化,カ,カ する 動詞,自立,*,*,サ変・スル,基本形,する,スル,スル 学習 名詞,サ変接続,*,*,*,*,学習,ガクシュウ,ガクシュー アルゴリズム 名詞,一般,*,*,*,*,アルゴリズム,アルゴリズム,アルゴリズム と 助詞,格助詞,一般,*,*,*,と,ト,ト その 連体詞,*,*,*,*,*,その,ソノ,ソノ 評価 名詞,サ変接続,*,*,*,*,評価,ヒョウカ,ヒョーカ について 助詞,格助詞,連語,*,*,*,について,ニツイテ,ニツイテ 議論 名詞,サ変接続,*,*,*,*,議論,ギロン,ギロン し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ ます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス 。 記号,句点,*,*,*,*,。,。,。
上記の出力結果は
の書式で出力されていますが、詳細な品詞情報を付けず、形態素の間に区切りを入れるだけ(これを分ち書きと言います)の簡便な出力も可能です。
コマンド 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)へ続く。