技術メモ

形態素解析エンジン「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プログラム用にモジュール化して役立ててみようと思います。

この記事もおすすめ!

Mi Smart Band 6レビュー|全画面化でさらにディスプレイが大きく。SpO2も測れてワークアウトも30種類に大幅アップ! 1

Mi Smart Band 6グローバル版をレビュー!ディスプレイが全画面化し通知がさらに見やすくなりました。SpO2チェック機能やワークアウトの種類も前作から約3倍の30種類に増加するなど大幅アップデートしていますよ。

Mi Band 5パッケージ 2

こんにちは、Mi BandシリーズをMi Band 3の時代から愛用しているしすにし(@sysnishi)です。 つい先日リーズナブルで生活を快適・便利にするスマートウォッチ「Mi Band』の新シリ ...

OnePlus 7T|トリプルレンズ、30W超急速充電対応背面デザインも一新された2019年ベストバイスマホ! 3

  2019年9月26日にOnePlusシリーズのニューモデル『OnePlus 7T』が発表されました。 OnePlus 7TはOnePlus 7からカメラやバッテリー周りなど順当に進化を遂 ...

Xiaomi Mi Note 10|異次元の108MPカメラ搭載・全キャリア対応のおすすめスマホ! 4

今回は日本進出と合わせAmazonでも販売を開始したコスパ最強スマホ『Mi Note 10』をご紹介します。 CPUパワーを必要とするゲームを使わない方でスマホをお探しの方はぜひ候補に入れてほしいです ...

OnePlus 7|コスパ最強を維持しつつ高性能カメラ・UFS3.0高速ストレージなどOnePlus 6Tから着実に進化したスマホ! 5

OnePlusから新たにOnePlus 7シリーズが発表されました。 本シリーズではじめてOnePlus 7(無印)とOnePlus 7 Proの2種類のモデルが出ています。 コスパ維持のOnePlu ...

Xiaomi Mi Mix 3 6

お手頃価格で素晴らしい性能のスマホを提供するXiaomiから新型スマホ『Mi Mix 3』が発表されました。 前作の「Xiaomi Mi Mix 2」に引き続き、かなりの高コスパでとても魅力的な製品と ...

Oneplus 6T レビュー|コスパ最強で爆速顔認証・高品質カメラ搭載のサクサクスマホ【ドコモDSDS対応】 7

長らく使用していたスマホ「ZenFone 3」から乗り換え候補の厳選を重ね、ついに新スマホへ乗り換えました。 乗り換え先はOPPO傘下のスマートフォンメーカーOnePlusの「OnePlus 6T」。 ...

-技術メモ