Mac OS X에 mecab-ipadic-NEologd를 설치하고 Scala에서 형태소 분석을 수행하는 작업 절차

Mac OS X에 mecab-ipadic-NEologd를 설치하고 Scala에서 형태소 분석을 수행하는 작업 절차

2022-10-04 last update

7 minutes reading mecab Scala 형태소 분석
제목대로입니다. 간단할까 하고 생각했나 상당히 힘들었습니다(-_-;)

아래의 절차는 어쩌면 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 좋을 것 같은 느낌입니다.

참고 자료



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