おトク情報、気になったことを発信します。

sysnishi

技術メモ

形態素解析エンジン「mecab」をインストールして漢字のよみがなを取得する

更新日:

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までの工程は以下のような感じです。

# cd /usr/local/src
# 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プログラム用にモジュール化して役立ててみようと思います。

-技術メモ

Copyright© sysnishi , 2018 All Rights Reserved.