データが主食

データエンジニアの備忘録。分析だったり、読んだ本のメモだったり。

ScalaでMeCabを使うためのセットアップメモ

Amazon Linux2上のScalaでMeCabを使うためのセットアップメモです。

Scalaセットアップ

$ sudo yum erase java-1.7.0-openjdk
$ sudo yum install java-1.8.0-openjdk
$ curl https://bintray.com/sbt/rpm/rpm | sudo tee /etc/yum.repos.d/bintray-sbt-rpm.repo
$ sudo yum install sbt

MeCabセットアップ

$ sudo rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
$ sudo yum makecache
$ sudo yum install mecab mecab-ipadic mecab-devel java-1.8.0-openjdk-devel
$ echo "パンケーキ食べたい" | mecab
パンケーキ      名詞,一般,*,*,*,*,パンケーキ,パンケーキ,パンケーキ
食べ    動詞,自立,*,*,一段,連用形,食べる,タベ,タベ
たい    助動詞,*,*,*,特殊・タイ,基本形,たい,タイ,タイ
EOS

MeCab Java バインディングのビルド

$ cd ~
$ tar zxfv mecab-java-0.996.tar.gz
$ cd mecab-java-0.996
$ make
c++ -O3 -c -fpic MeCab_wrap.cxx  `mecab-config --cflags` -I/usr/lib/jvm/java-6-openjdk/include -I/usr/lib/jvm/java-6-openjdk/include/linux
MeCab_wrap.cxx:159:17: fatal error: jni.h: No such file or directory
 #include <jni.h>
                 ^
compilation terminated.
make: *** [all] Error 1

Makefileを以下の通り変更

#INCLUDE=/usr/lib/jvm/java-6-openjdk/include
INCLUDE=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-0.42.amzn1.x86_64/include

ビルドおよびテスト

$ make
$ make test
env LD_LIBRARY_PATH=. java test
0.996
太郎    名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
二郎    名詞,固有名詞,人名,名,*,*,二郎,ジロウ,ジロー
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
この    連体詞,*,*,*,*,*,この,コノ,コノ
本      名詞,一般,*,*,*,*,本,ホン,ホン
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
渡し    動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。      記号,句点,*,*,*,*,。,。,。
EOS

()

Scalaで使ってみる

先ほどのmakeの結果できているMeCab.jarとlibMeCab.soをlibディレクトリに配置します。

.
├── build.sbt
├── lib
│   └── MeCab.jar
│   └── libMeCab.so
├── project
├── src
    └── main
        └── scala
            ├── mecab
                └── Main.scala
import org.chasen.mecab.Tagger
object MecabRunner{
  def main(args: Array[String]) {
    System.loadLibrary("MeCab");
    val t = new Tagger
    println(t.parse("パンケーキ食べたい"))
  }
}

メモ

  • REPLからだと実行できなかったが、sbt run 経由なら実行できた。