日本語の自然言語処理をする場合、文章を単語に分割したり、形態素解析をしたりする必要があります。そのツールがMeCabです。pythonならspacyというライブラリでもできますが、ここではMeCabのインストール、使い方を説明します。
MeCabのインストールですが、パッケージで入れることもできますが、環境によっては文字コードの設定ではまる可能性があるため、ソースからインストールすることをおすすめします。
MeCabのソースコードは、https://github.com/PROoshio/mecab にありまして、gitでdownloadできます。
# git clone https://github.com/PROoshio/mecab.git
ここにMeCabのプログラムと辞書が両方入っています。中のREADME.mdを読めばやることはわかりますが、一応書きます。まずはプログラムの方です。
# tar zxvf mecab-0.996.tar.gz # cd mecab-0.996/ # ./configure --with-charset=utf8 # make # make check # sudo make install
続いて辞書の方です。
# tar zxvf mecab-ipadic-2.7.0-20070801.tar.gz # cd mecab-ipadic-2.7.0-20070801/ # ./configure --with-charset=utf8 # make # sudo make install
これで完了です。./configureのところで、–with-charset=utf8をつけるのを忘れないでください。これで明示的に文字コードをUTF-8にすると宣言しています。
辞書の方のmakeで 「libmecab.so.2がない」等のエラーがでる場合は、環境変数のLD_LIBRARY_PATHにlibmecab.soのライブラリのパスを追加すると makeできます。デフォルトだと /usr/local/bin です。cshやtcshの場合は、
# setenv LD_LIBRARY_PATH /usr/local/lib:${LD_LIBRARY_PATH}
などで、LD_LIBRARY_PATHにパスを追加できます。
mecabコマンドができているので、mecab -D で文字コードを確認してみましょう。
# mecab -D filename: /var/lib/mecab/dic/debian/sys.dic version: 102 charset: utf-8 type: 0 size: 751185 left size: 1876 right size: 1876
ここのcharset: が utf-8になっていれば大丈夫です。Shift-JISとかEUCとかになっていると後々困る可能性があります。では、何かコマンド上で入力してみましょう。mecabコマンドを実行した後、日本語を入力してEnterを押せば形態素解析の結果がでてきます。
# mecab 今日は雨です。 今日 名詞,時相名詞,*,*,今日,きょう,代表表記:今日/きょう カテゴリ:時間 は 助詞,副助詞,*,*,は,は,* 雨 名詞,普通名詞,*,*,雨,あめ,代表表記:雨/あめ 漢字読み:訓 カテゴリ:抽象物 です 判定詞,*,判定詞,デス列基本形,だ,です,* 。 特殊,句点,*,*,。,。,* EOS
「今日は雨です。」と入力した時の例です。
次に、pythonからMeCabを使えるようにします。mecab-pythonというライブラリを pipでインストールします。
# pip install mecab-pythonこれでpythonからもMeCabをimportすれば、形態素解析や分かち書きができます。 形態素解析の使い方は、MeCab.Tagger(‘-o chasen’) で 形態素解析器を作れば良いです。
import MeCab mecab = MeCab.Tagger('-o chasen') text = "今日は雨です。" result = mecab.parse(text) print(result)
次に分かち書きの例ですが、MeCab.Tagger(‘-O wakati’)にするだけです。
import MeCab mecab = MeCab.Tagger('-O wakati') text = "今日は雨です。" result = mecab.parse(text) print(result)
分かち書きの方は、単語をスペースで区切った文字列として出力されます。split()関数などを使えば単語分割したリストを作れます。
NEologdのインストール
上のmecabの辞書も結構、標準的な固有名詞はちゃんと判別してくれますが、最近話題になった単語(固有名詞)はさすがに無理です。そこでWeb上から得た新語に対応したシステム辞書がNEologdです。「コロナ禍」とかちゃんとひとつの固有名詞として取得してくれます。
NEologdのインストールは、https://github.com/neologd/mecab-ipadic-neologd からダウンロードしてできます。
# git clone https://github.com/neologd/mecab-ipadic-neologd.git # cd mecab-ipadic-neologd # ./bin/install-mecab-ipadic-neologd
最後に辞書がインストールされたパスが表示されますので、そのパスをmecabの-dオプションで指定すれば、NEologdの辞書で形態素解析できます。
普通のmecab辞書だと、「コロナ禍で大変です。」が
# mecab コロナ禍で大変です。 コロナ 名詞,一般,*,*,*,*,コロナ,コロナ,コロナ 禍 名詞,接尾,一般,*,*,*,禍,カ,カ で 助詞,格助詞,一般,*,*,*,で,デ,デ 大変 名詞,形容動詞語幹,*,*,*,*,大変,タイヘン,タイヘン です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス 。 記号,句点,*,*,*,*,。,。,。 EOS
「コロナ」と「禍」で切られてしまいますが、NEologdだと
# mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd コロナ禍 名詞,固有名詞,一般,*,*,*,コロナ禍,コロナカ,コロナカ で 助詞,格助詞,一般,*,*,*,で,デ,デ 大変 名詞,形容動詞語幹,*,*,*,*,大変,タイヘン,タイヘン です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス 。 記号,句点,*,*,*,*,。,。,。 EOS
と、「コロナ禍」というひとつの固有名詞として取得できました。
最近のワードを扱う場合には、NEologdの方が良いかもしれないですね。