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




# Mecab のセットアップ

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

## Mecab 64bit ダウンロード
https://github.com/ikegami-yukino/mecab/releases/tag/v0.996

## 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"
にコピーする。

環境変数PATHに「C:\Program Files\MeCab\bin」を追記しても同じ結果になると思われます。

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

## cmecab-java ダウンロード

https://code.google.com/archive/p/cmecab-java/downloads

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 での見え方はこんな感じでした。
![Clipboard01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110265/742068ca-cd09-eb53-1ea4-221418458e68.png)

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

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

![Clipboard02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110265/32f16788-fad8-3549-41f6-480c7445fae6.png)

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

```java
// 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