JavaからMeCabを呼び出す場合,ライブラリとしてJavaバインディングが用意されてはいるものの,自分でライブラリをビルドしたりしないといけないため,手軽に使えるとは言い難い気がした.
なので,通常のMeCab(Windows)をDOS上で対話できるように設定しておくだけで,後はJavaからDOSを経由して形態素解析結果を受け取ることができるサンプルコードを書いてみた.
"C:\mecab.txt"に形態素解析対象となる文書を記載してサンプルコードを実行すると,名詞のみを抽出することができる.
C:\mecab.txt
国境の長いトンネルを抜けると雪国であった。
国境 名詞,一般,*,*,*,*,国境,コッキョウ,コッキョー
トンネル 名詞,一般,*,*,*,*,トンネル,トンネル,トンネル
雪国 名詞,一般,*,*,*,*,雪国,ユキグニ,ユキグニ
import java.io.BufferedReader; import java.io.InputStreamReader; public class MeCab { public static void main(String[] args) { try { // DOSに投げるコマンドと引数を指定する String[] command = { "cmd.exe", "/C", "mecab", "C:\\mecab.txt" }; // コマンド結果をProcessで受け取る Process ps = Runtime.getRuntime().exec(command); // 標準出力 BufferedReader bReader_i = new BufferedReader(new InputStreamReader(ps.getInputStream())); // 標準出力を1行ずつ受け取る一時オブジェクト String targetLine; // 形態素解析結果を全て解析する while (true) { // 形態素解析結果を1行ずつ受け取る targetLine = bReader_i.readLine(); // 最終行まで解析が完了したらループを抜ける if (targetLine == null) { break; } else if (targetLine.equals("EOS")) { continue; } else { // 品詞 String targetType = targetLine.split("[\t|,]")[1]; if (targetType.equals("名詞")) { // 名詞を表示する System.out.println(targetLine); } } } // 終了を待つ ps.waitFor(); } catch (Exception e) { e.printStackTrace(); } } }