JavaからCaboChaを使う!
JavaからCaboChaを使うため,前回CaboChaをインストールしました.
準備万端,いざ,使うぞ!と思ったら・・・orz
JavaにはCaboCha用のモジュールが用意されていないため,こまった(’・ω・`)
ググっても,いまいちヒットしない・・
しかも,同じ質問がいろんなところにされている上に,回答があまり親切じゃない(’;ω;`)
やりたいのは,sentence(String)に入っている文字列をCaboChaで解析して出力を得ること.
簡単に,現在の環境です.
OS: MacOS X 10.4.11(Tiger)
Java: version1.5.0_16
開発環境: Eclipse Version: 3.4.2
CaboCha: 0.60pre4 (UTF-8)
結論から言うと,これでなんとかなりました↓↓
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
1 String sentence = "今日は良い天気ですね.";
2 PrintWriter outfile = new PrintWriter(
new File("TempData/cabochaInput.txt"), "UTF-8");
3 outfile.println(sentence);
4 outfile.close();
5
6 try {
7 Runtime rt= Runtime.getRuntime();
8 String result = "";
9
10 /**Caution!!! Need a Full path to CaboCha*/
11 Process prcs = rt.exec(
"/usr/local/bin/cabocha -f1 cabochaInput.txt",
null, new File("TempData"));
12 InputStreamReader reader = new
InputStreamReader(prcs.getInputStream(),
"UTF-8");
13 BufferedReader buffreader = new
BufferedReader(reader);
14 while((result = buffreader.readLine())!=null) {
15 System.out.println(result);
16 }
17 }catch(IOException ioe) {
18 ioe.printStackTrace();
19 }
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
2~4行目,入力の文章をファイルに出力しました.出力先のファイルパスはカスタマイズを.CaboChaがUTF-8用 なので,ここで文字コードをUTF-8と指定.
・・・・・これを指定していなかったばかりに,文字化けに泣きました.
7, 11行目,コマンドを使って別プロセス?で実行,やけくそです!
exec関数の第一引数はCaboChaのコマンドです.CaboChaのフルパスを指定しないと動きませんでした.
入力には先ほどのファイルを指定.出力は標準出力です.出力形式は-f1を指定しました.
第三引数は,CaboChaを実行するディレクトリを指定しました.これを指定しないと入力ファイル名を絶対パスにしないといけない気がします.
この後,どうやって出力を読み込むんですか?!という葛藤のもと,得られた結果が,
12,13行目,InputStreamReaderのコンストラクタにprocessを渡せばいいのか!!!!文字コードを指定しないと,また,文字化けに泣きます.
今回はwhileでとりあえずprint してみましたが,あとは,これを好きに料理するだけ!
なんとかなったー^^;;
少しでも私のように困っていらっしゃる方の,お力になれたらうれしいですw
準備万端,いざ,使うぞ!と思ったら・・・orz
JavaにはCaboCha用のモジュールが用意されていないため,こまった(’・ω・`)
ググっても,いまいちヒットしない・・
しかも,同じ質問がいろんなところにされている上に,回答があまり親切じゃない(’;ω;`)
やりたいのは,sentence(String)に入っている文字列をCaboChaで解析して出力を得ること.
簡単に,現在の環境です.
OS: MacOS X 10.4.11(Tiger)
Java: version1.5.0_16
開発環境: Eclipse Version: 3.4.2
CaboCha: 0.60pre4 (UTF-8)
結論から言うと,これでなんとかなりました↓↓
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
1 String sentence = "今日は良い天気ですね.";
2 PrintWriter outfile = new PrintWriter(
new File("TempData/cabochaInput.txt"), "UTF-8");
3 outfile.println(sentence);
4 outfile.close();
5
6 try {
7 Runtime rt= Runtime.getRuntime();
8 String result = "";
9
10 /**Caution!!! Need a Full path to CaboCha*/
11 Process prcs = rt.exec(
"/usr/local/bin/cabocha -f1 cabochaInput.txt",
null, new File("TempData"));
12 InputStreamReader reader = new
InputStreamReader(prcs.getInputStream(),
"UTF-8");
13 BufferedReader buffreader = new
BufferedReader(reader);
14 while((result = buffreader.readLine())!=null) {
15 System.out.println(result);
16 }
17 }catch(IOException ioe) {
18 ioe.printStackTrace();
19 }
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
2~4行目,入力の文章をファイルに出力しました.出力先のファイルパスはカスタマイズを.CaboChaがUTF-8用 なので,ここで文字コードをUTF-8と指定.
・・・・・これを指定していなかったばかりに,文字化けに泣きました.
7, 11行目,コマンドを使って別プロセス?で実行,やけくそです!
exec関数の第一引数はCaboChaのコマンドです.CaboChaのフルパスを指定しないと動きませんでした.
入力には先ほどのファイルを指定.出力は標準出力です.出力形式は-f1を指定しました.
第三引数は,CaboChaを実行するディレクトリを指定しました.これを指定しないと入力ファイル名を絶対パスにしないといけない気がします.
この後,どうやって出力を読み込むんですか?!という葛藤のもと,得られた結果が,
12,13行目,InputStreamReaderのコンストラクタにprocessを渡せばいいのか!!!!文字コードを指定しないと,また,文字化けに泣きます.
今回はwhileでとりあえずprint してみましたが,あとは,これを好きに料理するだけ!
なんとかなったー^^;;
少しでも私のように困っていらっしゃる方の,お力になれたらうれしいですw