MeCab本体と辞書の導入
さて、今回は基本的に、全てターミナルからコマンドラインで操作していきます。
ファイルをダウンロードしてきて解凍するところ(curlコマンドとtar、unzipコマンドのところ)は、ブラウザでアクセスしてダウンロードしてきて、マウスで適切な場所に移動し、ダブルクリックで解凍してももちろん良いです。その方が早いかもしれんw
まず、MeCab用のディレクトリを作ってそこにカレントディレクトリを移動しておきます。
私は全てDropbox同期フォルダ内でやるという、危険なことをやってますが、今のところ特に問題はおきてないです。複数台のMacから使っているので、何か不整合とか起きてもおかしくなさそうですがw
$ cd ~/Dropbox/Python/ # Pythonフォルダに移動
$ mkdir MeCab # MeCabというフォルダを作成
$ cd MeCab # そこに入る
MeCab本体を、ダウンロードしてインストールします。MeCab本体についてもUTF-8の設定をしている記事をみたので、念のため私もそうしています。
$ curl -O https://mecab.googlecode.com/files/mecab-0.996.tar.gz
$ tar zxfv mecab-0.996.tar.gz # 解凍
$ cd mecab-0.996 # できたディレクトリに入る
$ ./configure --with-charset=utf8 # UTF-8前提で設定
$ make # コンパイル
$ sudo make install # インストール
$ cd .. # 元のディレクトリに移動
IPA辞書をダウンロードしてインストールします。
$ curl -O https://mecab.googlecode.com/files/mecab-ipadic-2.7.0-20070801.tar.gz
$ tar zxfv mecab-ipadic-2.7.0-20070801.tar.gz
$ cd mecab-ipadic-2.7.0-20070801
$ ./configure --with-charset=utf8 # UTF-8前提で設定
$ make
$ sudo make install
$ cd ..
ついでにUniDicもインストールします。前述のとおり、勉強会で使っている教科書はこの辞書でやってたので。
ちなみにUniDicはファイルのサイズがけっこうデカいので注意。(解凍前140MBくらいで解凍すると500MB以上になったw)
$ curl -O http://iij.dl.osdn.jp/unidic/58338/unidic-mecab-2.1.2_src.zip
$ unzip unidic-mecab-2.1.2_src.zip
$ cd unidic-mecab-2.1.2_src
$ ./configure # UniDicはもともとUTF-8なので指定不要
$ make
$ sudo make install
$ cd ..
ちなみにもうこの時点で、MeCabそのものは使えるようになっています。
ターミナル上で試してみます。
$ mecab
剣道は剣の理法の修練による人間形成の道である
剣道 名詞,一般,*,*,*,*,剣道,ケンドウ,ケンドー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
剣 名詞,一般,*,*,*,*,剣,ケン,ケン
の 助詞,連体化,*,*,*,*,の,ノ,ノ
理法 名詞,一般,*,*,*,*,理法,リホウ,リホー
の 助詞,連体化,*,*,*,*,の,ノ,ノ
修練 名詞,サ変接続,*,*,*,*,修練,シュウレン,シューレン
による 助詞,格助詞,連語,*,*,*,による,ニヨル,ニヨル
人間 名詞,一般,*,*,*,*,人間,ニンゲン,ニンゲン
形成 名詞,サ変接続,*,*,*,*,形成,ケイセイ,ケイセイ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
道 名詞,一般,*,*,*,*,道,ミチ,ミチ
で 助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ
ある 助動詞,*,*,*,五段・ラ行アル,基本形,ある,アル,アル
EOS
きちんと分解出来ましたね。
辞書にUniDicを使うなら、たとえば以下のようにします。
$ mecab -d 辞書を置いてあるディレクトリ/unidic-mecab-2.1.2_src
剣道は剣の理法の修練による人間形成の道である
剣道 ケンドー ケンドウ 剣道 名詞-普通名詞-一般
は ワ ハ は 助詞-係助詞
剣 ケン ケン 剣 名詞-普通名詞-一般
の ノ ノ の 助詞-格助詞
理法 リホー リホウ 理法 名詞-普通名詞-一般
の ノ ノ の 助詞-格助詞
修練 シューレン シュウレン 修練 名詞-普通名詞-サ変可能
に ニ ニ に 助詞-格助詞
よる ヨル ヨル 因る 動詞-一般 五段-ラ行 連体形-一般
人間 ニンゲン ニンゲン 人間 名詞-普通名詞-一般
形成 ケーセー ケイセイ 形成 名詞-普通名詞-サ変可能
の ノ ノ の 助詞-格助詞
道 ミチ ミチ 道 名詞-普通名詞-一般
で デ ダ だ 助動詞 助動詞-ダ 連用形-一般
ある アル アル 有る 動詞-非自立可能 五段-ラ行 終止形-一般
EOS
UniDicを上記のようにオプションで指定して使う方法以外に、デフォルトの辞書をIPAからUniDicに変更してしまうことも可能です。
デフォルトを変更するには、"/usr/local/etc/"というディレクトリに入っている"mecabrc"というファイルの中の、
dicdir = /usr/local/lib/mecab/dic/ipadic
となっている箇所が辞書の在り処を参照しているので、これを
dicdir = /usr/local/lib/mecab/dic/unidic
に書き換えればOKなのですが、特権が必要なのでここではvimで編集します。
$ sudo vi /usr/local/etc/mecabrc
と打ってvimからこのファイルを開き、あとはvimの操作方法なのでググると色々でてきますが、たとえばaキーで入力モードに切り替えて、ターミナル上で該当箇所を書き換え、escキーでコマンドモードに戻ってZZで保存終了すればいいです。
使ってみる
これでPython3バインディングの導入は完了したので、試しに分析してみます。ターミナルからPythonを立ち上げて、PythonからMeCabを使ってみます。
python
>>> import MeCab
>>> m = MeCab.Tagger('')
>>> text = '有効打突は、充実した気勢、適正な姿勢をもって、竹刀の打突部で打突部位を刃筋正しく打突し、残心あるものとする。'
>>> text_parsed = m.parse(text)
>>> print(text_parsed)
有効 名詞,形容動詞語幹,*,*,*,*,有効,ユウコウ,ユーコー
打 名詞,接尾,一般,*,*,*,打,ダ,ダ
突 名詞,一般,*,*,*,*,*
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
、 記号,読点,*,*,*,*,、,、,、
充実 名詞,サ変接続,*,*,*,*,充実,ジュウジツ,ジュージツ
し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
気勢 名詞,一般,*,*,*,*,気勢,キセイ,キセイ
、 記号,読点,*,*,*,*,、,、,、
適正 名詞,形容動詞語幹,*,*,*,*,適正,テキセイ,テキセイ
な 助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ
姿勢 名詞,一般,*,*,*,*,姿勢,シセイ,シセイ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
もっ 動詞,自立,*,*,五段・タ行,連用タ接続,もつ,モッ,モッ
て 助詞,接続助詞,*,*,*,*,て,テ,テ
、 記号,読点,*,*,*,*,、,、,、
竹刀 名詞,一般,*,*,*,*,竹刀,シナイ,シナイ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
打 接頭詞,名詞接続,*,*,*,*,打,ダ,ダ
突部 名詞,一般,*,*,*,*,*
で 助詞,格助詞,一般,*,*,*,で,デ,デ
打 接頭詞,名詞接続,*,*,*,*,打,ダ,ダ
突部 名詞,一般,*,*,*,*,*
位 名詞,接尾,一般,*,*,*,位,イ,イ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
刃 名詞,一般,*,*,*,*,刃,ハ,ハ
筋 名詞,接尾,一般,*,*,*,筋,スジ,スジ
正しく 形容詞,自立,*,*,形容詞・イ段,連用テ接続,正しい,タダシク,タダシク
打 接頭詞,名詞接続,*,*,*,*,打,ダ,ダ
突 名詞,一般,*,*,*,*,*
し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
、 記号,読点,*,*,*,*,、,、,、
残 名詞,一般,*,*,*,*,残,ザン,ザン
心 名詞,接尾,一般,*,*,*,心,シン,シン
ある 動詞,自立,*,*,五段・ラ行,基本形,ある,アル,アル
もの 名詞,非自立,一般,*,*,*,もの,モノ,モノ
と 助詞,格助詞,一般,*,*,*,と,ト,ト
する 動詞,自立,*,*,サ変・スル,基本形,する,スル,スル
。 記号,句点,*,*,*,*,。,。,。
EOS
「打突」「刃筋」「残心」といった剣道用語が学習されていないようで、少し変になっていますね。
mという変数名で、MeCab.Taggerクラスのインスタンスを生成し、.parseメソッドの引数に解析したい日本語文を与えています。
上のような表形式の解析結果が欲しいというよりも、日本語の文章を単純に分かち書きして単語の登場頻度などを分析したいということも多いと思うので、その場合は以下のようにします。(長文を与えるならファイルで与えたほうがいいと思うけど。)
>>> m = MeCab.Tagger('-Owakati')
>>> text = '「剣道修錬の心構え」剣道を正しく真剣に学び、心身を錬磨して旺盛なる気力を養い、剣道の特性を通じて礼節をとうとび、信義を重んじ誠を尽して、常に自己の修養に努め、以って国家社会を愛して、広く人類の平和繁栄に、寄与せんとするものである。'
>>> text_parsed = m.parse(text)
>>> print(text_parsed)
「 剣道 修錬 の 心構え 」 剣道 を 正しく 真剣 に 学び 、 心身 を 錬磨 し て 旺盛 なる 気力 を 養い 、 剣道 の 特性 を通じて 礼節 を とうとび 、 信義 を 重んじ 誠 を 尽し て 、 常に 自己 の 修養 に 努め 、 以 って 国家 社会 を 愛し て 、 広く 人類 の 平和 繁栄 に 、 寄与 せ ん と する もの で ある 。
よし、これで無事、Python3でMeCabが使えるようになりました。
認識されない単語があった場合は、これなどを参考に自分でユーザ辞書に登録したほうがいいかもですね。