
Mac OS X에 mecab-ipadic-NEologd를 설치하고 Scala에서 형태소 분석을 수행하는 작업 절차
제목대로입니다. 간단할까 하고 생각했나 상당히 힘들었습니다(-_-;)
아래의 절차는 어쩌면 El Capitan에서도 오케이라고 생각합니다만, Yosemite에서 밖에 시도하고 있으므로 주의해 주세요.
Mac에 mecab-ipadic-NEologd 설치
아래의 절차는 어쩌면 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.scalapackage 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
좋을 것 같은 느낌입니다.
참고 자료
mecab-ipadic-neologd/README.ko.md
MeCab: Yet Another Part-of-Speech and Morphological Analyzer
Mac OS X El Capitan에서 MeCab Java 바인딩 사용 - Qiita
Mac에서 MeCab Java 바인딩 사용 - tSeiya의 blog
MeCab : Java 바인딩 개발 환경 구축, 구현 참고 페이지 등 - Qiita
MeCab의 Java 바인딩을 MacOSX10.8.3(Mountain Lion)에서 Scala에서 사용 — kenkovlog
scala와 Java에서 MeCab을 먹어 보자 - 어쩔 수 없어요!
scala - Integrated native system libraries with SBT - Stack Overflow
# 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
> アラレちゃん 名詞,固有名詞,一般,*,*,*,アラレちゃん,アラレチャン,アラレチャン
여기 의 페이지에 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.scalapackage 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
좋을 것 같은 느낌입니다.
참고 자료
mecab-ipadic-neologd/README.ko.md
MeCab: Yet Another Part-of-Speech and Morphological Analyzer
Mac OS X El Capitan에서 MeCab Java 바인딩 사용 - Qiita
Mac에서 MeCab Java 바인딩 사용 - tSeiya의 blog
MeCab : Java 바인딩 개발 환경 구축, 구현 참고 페이지 등 - Qiita
MeCab의 Java 바인딩을 MacOSX10.8.3(Mountain Lion)에서 Scala에서 사용 — kenkovlog
scala와 Java에서 MeCab을 먹어 보자 - 어쩔 수 없어요!
scala - Integrated native system libraries with SBT - Stack Overflow
# sbtのプロジェクトを作成して、プロジェクトルートの直下にlibディレクトリを作成
mkdir lib
# MeCab.jarファイルをlibディレクトリにコピー
cp /path/to/work/mecab-java-0.996/MeCab.jar ./lib
# 設定をリロード(アンマネージ依存性が読み込まれる・・・はず)
sbt reload
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
좋을 것 같은 느낌입니다.