Mecab を Win10 + Eclipse + Java + cmecab-java の環境で動かす (2020年1月版)


試行錯誤しながらセットアップしましたので、本手順の再現までは確認しておりません。

Mecab のセットアップ

Mecab本家で配布されているWindows版は32bit版であり64bit Javaからの利用には不向きらしい、ということで野良ビルドとして配布されている 64bit版を導入

Mecab 64bit ダウンロード

Mecab 64bit インストール

インストールディレクトリ C:\Program Files\MeCab
文字エンコーディング UTF-8
を指定して導入

Mecab 64bit インストール結果

文字化けはしているものの、とりあえず動くようになりました。

>mecab
今日はいいい天気です。
今日はいいい    險伜捷,荳€闊ャ,*,*,*,*,*
V       蜷崎ゥ・蝗コ譛牙錐隧・邨・ケ・*,*,*,*
        險伜捷,荳€闊ャ,*,*,*,*,*
C       蜷崎ゥ・蝗コ譛牙錐隧・邨・ケ・*,*,*,*
        險伜捷,荳€闊ャ,*,*,*,*,*
ナ       蜷崎ゥ・蝗コ譛牙錐隧・邨・ケ・*,*,*,*
キ       險伜捷,荳€闊ャ,*,*,*,*,*
B       蜷崎ゥ・蝗コ譛牙錐隧・邨・ケ・*,*,*,*
EOS
^Z

Mecab 64bit DLL のコピー

"C:\Program Files\MeCab\bin\libmecab.dll"

"C:\Windows\System32\libmecab.dll"
にコピーしました。

cmecab-java のセットアップとビルド

cmecab-java ダウンロード

cmecab-java-2.0.1-src.zip をダウンロードしました。

cmecab-java ビルド作業

cmecab-java-2.0.1-src.zip を展開して、Eclipseのワークスペースにコピー。
build.xml をAnt実行すると、bin の下にcmecab-2.0.jar が出力されました。
(binディレクトリはEclipseのPackageExplorerでは表示されないのでWindowsのExplorerにて確認しました。)

Eclipse での見え方はこんな感じでした。

cmecab-java を利用するプロジェクトとプログラムの作成

Javaプロジェクトを作成し、cmecab-2.0.jar と bridj-0.6.1 をクラスパスにセットする

以下のサンプルコードを作成する
(本家とほぼ同じですが、本家ではサンプルコードがうまく表示されていなかったので清書しました。)

// https://code.google.com/archive/p/cmecab-java/wikis/HowToUse.wiki
import net.moraleboost.mecab.Lattice;
import net.moraleboost.mecab.Node;
import net.moraleboost.mecab.impl.StandardTagger;

public class HelloMecabMain {
    public static void main(String[] args) throws Exception {
// Taggerを構築。
// 引数には、MeCabのcreateTagger()関数に与える引数を与える。
        StandardTagger tagger = new StandardTagger("");
//バージョン文字列を取得
        System.out.println("MeCab version " + tagger.version());
//Lattice(形態素解析に必要な実行時情報が格納されるオブジェクト)を構築
        Lattice lattice = tagger.createLattice();
//解析対象文字列をセット
        String text = "今日はいい天気です。";
        lattice.setSentence(text);
//tagger.parse()を呼び出して、文字列を形態素解析する。
        tagger.parse(lattice);
//形態素解析結果を出力
        System.out.println(lattice.toString());
//一つずつ形態素をたどりながら、表層形と素性を出力
        Node node = lattice.bosNode();
        while (node != null) {
            String surface = node.surface();
            String feature = node.feature();
            System.out.println(surface + "\t" + feature);
            node = node.next();
        }
//lattice, taggerを破壊
        lattice.destroy();
        tagger.destroy();
    }
}

実行結果

MeCab version 0.996
今日  名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい  形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気  名詞,一般,*,*,*,*,天気,テンキ,テンキ
です  助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS

    BOS/EOS,*,*,*,*,*,*,*,*
今日  名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい  形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気  名詞,一般,*,*,*,*,天気,テンキ,テンキ
です  助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
    BOS/EOS,*,*,*,*,*,*,*,*

所感

Mecab関連は環境構築が難しいです。OSに依存しない実行環境があればよいと思いました。
Mecabは研究目的や単体で動かすにはそれほどめんどくさくないのだと思いますが、本格的なテキスト分析での利用や、多様な実行環境が存在する中での業務アプリケーションとしての利用には課題があるのかなと思いました。

参照

参考にしたページ

MeCabとeclipseのバインディングに苦労した - Sakaiakaのブログ
http://sakaiakas.hatenablog.com/entry/2018/02/20/231719

PythonでMeCabを使ってみる(Windows10 64bit) - Qiita
https://qiita.com/wanko5296/items/eeb7865ee71a7b9f1a3a