Help us understand the problem. What is going on with this article?

Mac OS Xにmecab-ipadic-NEologdをインストールしてScalaで形態素解析を行うための作業手順

More than 3 years have passed since last update.

タイトル通りです。簡単かと思いきや結構大変でした(-_-;)

下記の手順は多分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のプログラムを作成

src/main/scala/MecabSample.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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away