VPSに形態素解析エンジンの「mecab」をインストールしました。漢字からよみがなを取得して色々としようという目論見があります。
今のところ、漢字のよみがなクイズに回答させるための基礎づくりという段階です。
同じようなことを考えている人はなかなかいないかもしれませんが、他のことに利用する人や、そもそも自分のためのメモとしても残しておこうと思います。
インストール環境とソフトバージョン
- Conoha VPS
- Ubuntu 16.04.1 LTS
- mecab 0.996
- Python 2.7.12
インストール
mecabのインストール
まずは公式サイトからmecabのソースをダウンロードします。
公式サイトMeCab: Yet Another Part-of-Speech and Morphological Analyzer
公式サイト内のダウンロードの項目にあるSourceの「ダウンロード」リンクからファイルをダウンロードします。
ダウンロード時点ではmecabのバージョンは0.996です。以降はご自身でダウンロードしたバージョンに合わせてファイル名などを読みかえてください。
mecab-0.996.tar.gzは /usr/local/src 配下に置きます。ソースの展開からmakeまでの工程は以下のような感じです。
# gunzip mecab-0.996.tar.gz
# tar xf mecab-0.996.tar
# cd mecab-0.996
# ./configure
# make
# make install
バージョンは以下のように確認できます。
# mecab -v
mecab of 0.996
NEologd(mecab用辞書)のインストール
mecabには辞書が必要です。公式サイトにも辞書ファイルはありますが、オススメを調べていたらこのNEologdが出てきましたのでこれをインストールします。
以下のような手順でインストールします。
# cd /usr/local/src
# git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
# cd mecab-ipadic-neologd
# ./bin/install-mecab-ipadic-neologd -n
[install-mecab-ipadic-NEologd] : Do you want to install mecab-ipadic-NEologd? Type yes or no.
yes
インストールした辞書ファイルはmecabの辞書ディレクトリ配下にあります。mecabの辞書ディレクトリは以下のように取得できます。
# mecab-config --dicdir
/usr/local/lib/mecab/dic
# ls /usr/local/lib/mecab/dic
mecab-ipadic-neologd
上記の場合ですと、neologdの辞書ディレクトリは/usr/local/lib/mecab/dic/mecab-ipadic-neologdです。
実行テスト
mecabとNEologdのインストールが完了したのでテストをしておきましょう。
$ echo "ブルゾンちえみは芸人です" | mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd
ブルゾンちえみ 名詞,固有名詞,人名,一般,*,*,ブルゾンちえみ,ブルゾンチエミ,ブルゾンチエミ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
芸人 名詞,一般,*,*,*,*,芸人,ゲイニン,ゲイニン
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
EOS
新しめの固有名詞にも対応してそうですね!
$ echo "追従" | mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd -N 2
追従 名詞,サ変接続,*,*,*,*,追従,ツイジュウ,ツイジュー
EOS
追従 名詞,サ変接続,*,*,*,*,追従,ツイショウ,ツイショー
EOS
一つの漢字に複数のよみがながある場合にも、候補の数を指定(-N 個数)することで対応可能です。
pythonで使う
mecab-pythonのインストール
pythonでmecabをインストールする予定なので、mecab-pythonをインストールします。以下のようにインストールします。
# pip install mecab-python
サンプル①引数の単語からよみがなを最大2つ返すプログラム(mecab_test.py)
サンプルコードで引数の単語を受け取ってよみがなを最大2つ返却するプログラムを書いてみました。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import MeCab
m = MeCab.Tagger(' -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')
text = args[1]
m.parseNBest(2,text)
m.parseNBestInit(text)
for i in range(2):
node = m.nextNode()
while node:
if (text == node.surface):
print(node.feature.split(",")[7])
node = node.next
サンプルプログラムの実行結果はこんな感じです。
$ ./mecab_test.py "追従"
ツイジュウ
ツイショウ
./mecab_test.py "言葉"
コトバ
サンプル②引数の単語からよみがなをひらがなで最大2つ返すプログラム(mecab_test.py)
カタカナの代わりにひらがなで出力する場合にはjaconvで対応します。
# pip install jaconv
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import MeCab
import jaconv
m = MeCab.Tagger(' -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')
args = sys.argv
text = args[1]
m.parseNBest(2,text)
m.parseNBestInit(text)
for i in range(2):
node = m.nextNode()
while node:
if (text == node.surface):
print jaconv.kata2hira(node.feature.split(",")[7].decode('utf-8'))
node = node.next
実行結果は以下のようになります。
$ ./mecab_test.py "追従"
ついじゅう
ついしょう
$ ./mecab_test.py "言葉"
ことば
その他
ユーザ辞書を追加する
上記までである程度よみがなを取得してくれますが、辞書に登録されていない単語などはよみがなを取得することはできません。
有料の辞書を購入するなどの方法はあるでしょうが、実際にはユーザ辞書に追加するのが現実的でしょう。
ユーザ辞書は/usr/local/lib/mecab/dic/userdic配下に置く体で話を進めます。
まずはディレクトリの作成から。
# mkdir /usr/local/lib/mecab/dic/userdic
上記に作成したディレクトリに辞書ファイルの元となるcsvファイルを作成します。
userdic.csv
湛然,,,1,名詞,形容動詞語幹,*,*,*,*,湛然,タンゼン,タンゼン,ユーザ辞書
ファイルの最後に改行(空行)が入っているとこの後のコンパイル工程でエラーになりますので注意してください。
続いて、CSVファイルからユーザ辞書ファイルを作成します。
/usr/local/libexec/mecab/mecab-dict-index \
-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd \
-u /usr/local/lib/mecab/dic/userdic/userdic.dic \
-f utf-8 -t utf-8 /usr/local/lib/mecab/dic/userdic/userdic.csv
あとは実行時にユーザ辞書を指定してやればユーザ辞書の内容が使用されます。
$ echo "湛然" | mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd -u /usr/local/lib/mecab/dic/userdic/userdic.dic -N 2
湛然 名詞,形容動詞語幹,*,*,*,*,湛然,タンゼン,タンゼン,ユーザ辞書
EOS
湛 名詞,固有名詞,人名,名,*,*,湛,ジン,ジン
然 副詞,一般,*,*,*,*,然,シカ,シカ
EOS
$ ./mecab_test.py "湛然"
たんぜん
pythonの修正は m = MeCab.Tagger(' -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')のところを
m = MeCab.Tagger(' -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd -u /usr/local/lib/mecab/dic/userdic/userdic.dic')にするだけです。
いかがでしたでしょうか?
今回は、「mecabをインストールして漢字のよみがなを取得する方法」についてご紹介しました。
これで結構便利なツールが出来上がりました。
とりあえず、自分としては他のpythonプログラム用にモジュール化して役立ててみようと思います。