タイトル通りです。簡単かと思いきや結構大変でした(-_-;)
下記の手順は多分El Capitanでもオッケーだと思いますが、Yosemiteでしか試しておりませんのでご注意ください。
Macにmecab-ipadic-NEologdをインストール
# mecabや依存ライブラリをインストール
brew install mecab mecab-ipadic git curl xz
# mecabのバージョン確認
mecab -v
> mecab of 0.996
# mecabの動作確認
echo "アラレちゃん" | mecab
> アラレ 名詞,一般,*,*,*,*,*
> ちゃん 名詞,接尾,人名,*,*,*,ちゃん,チャン,チャン
# mecab-ipadic-NEologdのインストールと更新(/path/to/workは任意のディレクトリ)
cd /path/to/work
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
cd mecab-ipadic-neologd
./bin/install-mecab-ipadic-neologd -n
# インストール先を確認
echo `mecab-config --dicdir`"/mecab-ipadic-neologd"
> /usr/local/lib/mecab/dic/mecab-ipadic-neologd
# ノーマルなmecabとNEologdを使用した場合の結果を比較
echo "アラレちゃん" | mecab
> アラレ 名詞,一般,*,*,*,*,*
> ちゃん 名詞,接尾,人名,*,*,*,ちゃん,チャン,チャン
echo "アラレちゃん" | mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd
> アラレちゃん 名詞,固有名詞,一般,*,*,*,アラレちゃん,アラレチャン,アラレチャン
MeCabのJavaバインディングをインストール
こちらのページにJavaバインディングのダウンロード先のリンクが貼られているので、インストールしたMeCabと同じバージョンのJavaバインディングファイルをダウンロードしてください。
(この記事執筆時点でのダウンロード先はこちらになります)
ここでは「mecab-java-0.996.tar.gz」を「/path/to/work」ディレクトリにダウンロードしたという前提で説明を続けます。
# ダウンロードしたファイルを解凍
cd /path/to/work
tar zxfv mecab-java-0.996.tar.gz
# Makefileを編集
cd mecab-java-0.996
vi Makefile
# 6行目の「Include」を下記のように変更。(「MacOSX10.10.sdk」の部分はOSのバージョンによって異なる)
#INCLUDE=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers/
# 16行目を下記のように変更(Macでは.soファイルではなく.dylibファイルを出力する必要がある)
$(CXX) -shared $(TARGET)_wrap.o -o lib$(TARGET).dylib $(LIBS)
# 25行目を下記のように変更(ここは不要かも)
rm -fr *.jar *.o *.dylib *.class $(PACKAGE)/*.class
# make実行
sudo make
# MeCab.jar等が作業ディレクトリ内に作成されていることを確認する。
ls -al
# 文字化け対策でjavaコマンドにエイリアスを設定(この作業は不要かもしれませんが一応)
vi ~/.bash_profile
alias javac 'javac -encoding UTF-8 -J-Dfile.encoding=UTF-8'
alias java 'java -Dfile.encoding=UTF-8'
source ~/.bash_profile
# ダウンロードしたファイルに含まれているテスト用プログラムをコンパイルして実行
rm -f ./test.class
javac ./test.java
java test
> 太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
> は 助詞,係助詞,*,*,*,*,は,ハ,ワ
> 二郎 名詞,固有名詞,人名,名,*,*,二郎,ジロウ,ジロー
> に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
> この 連体詞,*,*,*,*,*,この,コノ,コノ
> 本 名詞,一般,*,*,*,*,本,ホン,ホン
> を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
> 渡し 動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
> た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
> 。 記号,句点,*,*,*,*,。,。,。
ScalaからMeCabを使用する
# sbtのプロジェクトを作成して、プロジェクトルートの直下にlibディレクトリを作成
mkdir lib
# MeCab.jarファイルをlibディレクトリにコピー
cp /path/to/work/mecab-java-0.996/MeCab.jar ./lib
# 設定をリロード(アンマネージ依存性が読み込まれる・・・はず)
sbt reload
下記のようなscalaのプログラムを作成
package com.polysoft
import org.chasen.mecab.Tagger
object MecabSample {
def main(args: Array[String]) = {
System.load("/path/to/work/mecab-java-0.996/libMecab.dylib")
val tagger = Tagger.create("-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd")
println(tagger.parse("アラレちゃん"))
}
}
# 実行
sbt run
> アラレちゃん 名詞,固有名詞,一般,*,*,*,アラレちゃん,アラレチャン,アラレチャン
備考
MacではJNIのライブラリファイルの拡張子は.so
ではなくて.dylib
を使う必要があるのでご注意ください。(ここで結構ハマりました)
また、こちらの情報によると、SBTやIntellijを使う場合にSystem.loadLibrary
でMeCabのライブラリをロードしようとすると結構大変らしいので、上記のサンプルではSystem.load
を使用しています。
As you've alluded to, messing with java.library.path can be annoying in terms of configuring SBT and Eclipse, and I do not think it's possible to do automatically for an executable jar.
また、OS X El CapitanでSystem.loadLibrary
を使おうとすると、OS X El Capitanから導入されたSystem Integrity Protection (SIP)の関係でかなり面倒なことになるようなので、System.load
を使っておいた方が良さそうな印象です。
参考資料
mecab-ipadic-neologd/README.ja.md
MeCab: Yet Another Part-of-Speech and Morphological Analyzer
Mac OS X El CapitanでMeCabのJavaバインドを使用する - Qiita
MacでMeCabのJavaバインドを使用する - tSeiya's blog
MeCab:Javaバインディング開発環境構築、実装参考ページ等 - Qiita
MeCab のJava バインディングをMacOSX10.8.3(Mountain Lion) でScala から使う — kenkovlog
scalaとJavaからMeCabを食べてみよう - しがないまんとはなんですと!
scala - Integrating native system libraries with SBT - Stack Overflow