ファイルを選択する方法と茶筌の形態素解析ツールの呼び出し

このQ&Aのポイント
  • 任意のファイルを選び、そのテキストを茶筌にかける方法を知りたい
  • Javaを使って任意のファイルを選択し、茶筌の形態素解析ツールを呼び出す方法について教えてください
  • ファイル選択と茶筌の形態素解析ツールの使用方法について教えてください
回答を見る
  • ベストアンサー

あるファイルを選択するには

下のプログラムで形態素解析ツールの茶筌を呼び出しています。 任意のファイルを選びそこに書かれているテキストを茶筌にかけたいと思っています。任意のファイルを選ぶためにはどのようにすればよいのか困っています。 是非お願いします。 import java.*; import java.io.*; import java.util.*; class test1 { public static void main(String[] arg) { String result; System.out.println(arg[0]); ChasenHandler ch = new ChasenHandler(); result = ch.doChasen(arg[0]); System.out.println(result); } } class ChasenHandler { StringTokenizer stn; String CHASEN_COMMAND[] = {"chasen"}; String CHASEN_END = "EOS"; Process process; BufferedWriter chasen_writer; BufferedReader chasen_reader; public ChasenHandler () { try { process = Runtime.getRuntime ().exec (CHASEN_COMMAND); } catch (IOException e) { System.out.println ("Error in ChasenHandler"); return; } InputStream is = process.getInputStream (); chasen_reader = new BufferedReader (new InputStreamReader (is)); OutputStream os = process.getOutputStream (); chasen_writer = new BufferedWriter (new OutputStreamWriter (os)); } String doChasen (String input) { String result = ""; try { chasen_writer.write (input , 0 , input.length()); chasen_writer.newLine (); chasen_writer.flush (); String line = ""; while (true) { if ((line = chasen_reader.readLine ()).equals (CHASEN_END)) { result = result + "EOS"; break; } result = result + line + ""; } } catch (Exception ie) { result = "\n"; ie.printStackTrace (); System.exit (0); } input = ""; return result; } }

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

「茶筌」とかはよく知らないので、その部分については回答できません。 以下の2点について補足してください。 1.現状 提示して頂いたソースコードは、動いているのでしょうか? >java test1 文字列 とコマンド入力して、chasen というコマンドに対して、標準入力として、上記の「文字列」を与えて、その結果、標準主力された結果を得ているように見受けますが、この動作理解で正しいでしょうか? 2.今回の目的 1ができているものとして、今回の投稿の目的は、 >java クラス名 解析対象の入力ファイル・パス 解析結果を出力するファイル・パス という感じでしょうか? なお、Javaのファイル入出力クラスである java.io.FileInputStream java.io.FileOutputStream java.io.FileReader java.io.FileWriter あたりの使い方がわかれば、答えが導き出せると思います。

atano13
質問者

お礼

run34rickyさんの言った通りでした。 普通にFileReaderで読み込めばよい話でした。 返事が遅くなり申し訳ありませんでした。 また、的確なご指摘ありがとうございました。

関連するQ&A

  • Java・ファイルへの書き込み

    はじめまして。 下記のプログラムで、以下の3つがどのような関係なのかがわかりません。 ("test1.txt")とnew FileWriterの関係 (new FileWriter("test1.txt")とnew BufferedWriterの関係 (new BufferedWriter(new FileWriter("test1.txt")と new PrintWriterの関係 どうかご教示いただきたく、よろしくお願い致します。 import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; public class Sample7 { public static void main(String[] args){ PrintWriter pw = null; try{ pw = new PrintWriter (new BufferedWriter(new FileWriter("test1.txt"))); pw.println("Hello!"); pw.println("GoodBye"); System.out.println("ファイルに書き込みました。"); }catch(IOException e){ System.out.println("入出力エラーです。"); }finally{ if(pw != null){ pw.close(); } } } }

    • ベストアンサー
    • Java
  • Vectorの使用法

    現在、課題の作成中なんですけどうまくいかないので教えてください。 ファイルに表示されているアクセスログファイルを別のファイルに表示させるコードなんですが、 import java.util.*; import java.io.*; public class AccessLog{   public static void main(String args[]){     if(args.length != 1){  System.exit(0);     }     String filename = args[0];     Vector vector = new Vector();     try{      String line ; BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(filename))); while((line = reader.readLine()) != null){ vector.addElement(line); writer.println(vector); } }catch(IOException e){   System.out.println(e); }   } } Vectorの使い方がよくわからないので教えてください。宜しくお願いします。

  • FileWrite()メソッド

    すいません、少しお時間を頂きたいと思います。今コマンドライン上でファイルを作ろうとしています。ソースは結城浩氏の著書で使われている、ネット上から無料でダウンロードできるソースを使っています。以下の通りです。 import java.io.*; public class FileWrite{ public static void main(String[] args) { if (args.length != 1) { System.out.println("使用法:java WriteFile1 作成ファイル"); System.out.println("例:java WriteFile1 output.txt < input.txt"); System.exit(0); } String filename = args[0]; try { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(filename))); String line; while ((line = reader.readLine()) != null) { writer.println(line); } reader.close(); writer.close(); } catch (IOException e) { System.out.println(e); } } } ところが、これをコンパイルして実行までは出来るのですが、いざ因数(=ファイル名)を与えるとコマンドプロンプトがプロンプトのない状態で停止してしまいます。 javacのあるディレクトリ>java FileWrite abc.jsp と入力しています。(FileWriteはクラス名です。) また、拡張子の有無は関係ないようです。 何が悪いのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • Javaのカウント方法について

    お伺い致します。 CSVで取り込んだデータの抽出をしたいのですが、方法が見出せません。どの点を直せば宜しいのでしょうか。 具体的には取り込んだ郵便番号をカウントして(例:京都市,34)CSVファイルに出力するように出したいのですがカウントがうまくできません。(以下、コメントアウトしたものがありますが、今までのソースを記載します) 宜しく御願いします。 import java.io.FileReader; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; import java.io.*; public class test01 { static String fname ="26KYOUTO.CSV"; public static void main(String[] args){ if(args.length>0) fname = args[0]; try { BufferedReader reader = new BufferedReader(new FileReader(fname)); BufferedWriter pw = new BufferedWriter(new PrintWriter("orig.txt")); String line = reader.readLine(); System.out.println(line); pw.println(""); int n = 0; int count = 0; _/* while(true) { String line = reader.readLine(); if(line.equals("26101")) break; count++; } */ reader.close(); System.out.println("京都府北区=" +count ); } catch(FileNotFoundException e) { System.out.println("ファイルがありません。"); } catch(IOException e) { System.out.println("入出力エラーです。"); } } }

    • ベストアンサー
    • Java
  • ファイル読み込みで

    市販のテキストでファイルを読み込むプログラムを作ったのですがうまくできません。 import java.io.*; public class ShowFile{ public static void main(String args[]){ if(args.length != 1){ System.out.println("使用法: java ShowFile ファイル"); System.out.println("例: java ShowFile ShowFile.java"); System.exit(0); } String filename = args[0]; try{ BufferedReader reader = new BufferedReader(new FileReader(filename)); String line; while((line = reader.readLine()) != null){ System.out.println(line); } reader.close(); }catch(FileNotFoundException e){ System.out.println(filename + "が見つかりません"); }catch(IOException e){ System.out.println(e); } } } javac ShowFile.javaでコンパイルはうまくいったのですが、 実行時にjava ShowFile input.txtとするとException in thread "main" java.lang.NoClassDefFoundError: ShowFile というエラーが出ます。input.txtというファイルは存在します。 アドバイスをお願いします。

    • ベストアンサー
    • Java
  • CSVファイルから特定の文字列を含む行を出力

    CSVファイルを読み込み、特定の文字列を含む行を出力するプログラムを作成しています。 出力メソッドを作り、呼び出したいのですがうまくいきません。 コンパイルは通りますが出力したファイルには何も書き込まれていない状況です。 ヒントだけでも頂けると幸いです。 よろしくお願いします。 import java.io.*; import java.util.*; public class Test{ static String[] data; static BufferedWriter writer = null; public static void main(String[] args) throws Exception { String line; BufferedReader reader = null; reader = new BufferedReader(new FileReader("Week.csv")); writer = new BufferedWriter(new FileWriter("New.csv")); while (reader.ready()) { line = reader.readLine(); if (line.contains("氏名")) { create(line); } else if (line.contains("月")) { create(line); } else if (line.contains("水")) { create(line); } else if (line.contains("金")) { create(line); } } } //メソッド static void create(String line) throws Exception { data = line.split(","); for (int i = 0; i < data.length; i++) { writer.print(data[i]); writer.println(); } } }

    • ベストアンサー
    • Java
  • 仮想環境の標準入力/標準出力

    仮想環境UserModeLinuxの標準入力/標準出力を取り出し Javaのコンソールからコマンドを送信し、結果を出力するプログラムを作成したいと考えいてます。 プログラムは以下の通りです。 import java.io.*; public class UMLControl { public static void main(String[] args) throws IOException{ /* * UMLの起動 */ String command[] = {"linux.uml", "ubd0=uml-root-hardy", "umid=uml1"}; // UMLを起動するためのプロセス(端末) Process uml_process; uml_process = Runtime.getRuntime().exec(command); // UMLを起動する InputStream is = uml_process.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line = null; while ((line = br.readLine()) != null){ System.out.println(line); } /* * UMLプロセスへの標準入力を渡して、実行するためのソースコード */ // UML本体のプロセス Process process; int uml_number = 1; // 作成したいUMLの数(私の場合は1台のみ) int uml_no = 1; // 起動するUMLのナンバー(私の場合は1台のみ) // プロセスへのコマンドを書き込むための、BufferWiter型のフィールドを宣言する BufferedWriter bufferedwriter[uml_number]; bufferedwriter [uml_no] = new BufferedWriter(new OutputStreamWriter(process.getOutputStream())); // ユーザのコマンドの入力 // バッファリーダーの宣言(文字型入力ストリームから効率よくテキストを読み込む) BufferedReader input = new BufferedReader (new InputStreamReader(System.in), 1); System.out.print("UMLで実行するコマンドを入力してください>>"); String uml_control = input.readLine(); // コマンド(文字列)の入力 // 文字列を送る bufferedwriter[uml_no].write(uml_control); bufferedwriter[uml_no].flush(); /* * 標準入出力を表示するソースコード */ BufferedReader inputreader = new BufferedReader(new InputStreamReader(process.getInputStream())); // コマンドを読むバッファ char[] cbuf = new char[8192]; // 入力を読み込む int numRead = inputreader.read(cbuf); while(numRead != -1){ if(numRead <= 8192){ // 標準入出力の内容を表示する System.out.println(new String(cbuf, 0, numRead)); numRead = inputreader.read(cbuf); } } } } UserModeLinuxの起動まではうまく動作します。 その後の「BufferedWriter bufferedwriter[uml_number];」 のuml_numberの部分で赤線があり、実行しても以下のように表示されます。 Exception in thread "main" java.lang.Error: コンパイル問題が未解決です: トークン "uml_number" に構文エラーがあります。このトークンを削除してください at UMLControl.main(UMLControl.java:28) どのように解決するべきでしょうか。

    • ベストアンサー
    • Java
  • 「プログラミング」JAVAのエラーが解決できません。

    ホームページを見たり、メールチェックをしたり、数分間このプログラムを走らせると、 Address already in use: connect java や Connection refused: connect といったエラーメッセージが出ます。 どうすれば、解決するでしょうか? やさしいJAVAやインターネットで調べたのですが良い方法が分かりません。ぜひ、ご教示宜しくお願い致します。 import java.net.*; import java.io.*; import java.util.*; import java.text.*; class Test { public static void main(String[] args) throws Exception { String helloURL; for(int a=1; a<3000; a++) { helloURL = "http://shopping.yahoo.co.jp/"; Th th1 = new Th(helloURL); th1.start(); Thread.sleep(100); } } } class Th extends Thread { String helloURL = null; String line; Th(String str) { this.helloURL = str; } public void run() { try { URL url = new URL(helloURL); BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(),"JISAutoDetect")); while ((line = in.readLine()) != null) { try { OutputStream os = new FileOutputStream("log.txt",true); BufferedWriter fr = new BufferedWriter(new OutputStreamWriter(os)); if(line.indexOf("ヤフー") != -1) { fr.write(line); } if(line.indexOf("あ") != -1) { fr.write(line); } fr.close(); os.close(); } catch(Exception e){System.out.println("エラー1 : "+e.getMessage());} } in.close(); } catch(Exception ex){System.out.println("エラー2 : "+ex.getMessage());} } }

    • ベストアンサー
    • Java
  • Java初心者です。どうぞお教えください。

    CSVファイルを読み込んで、ソートしてから、現在日時のファイル名でCSVで書き出します。以下のファイルでは、CSVで書き出せません。現在日時のファイル名をつける方法もよくわかりません。どうぞ教えてください。importは省略しています。 public class CSVdata { public static void main(String[] args) { String fname = " " ; ArrayList<String> list = new ArrayList<String>(); String save_filename = getFileName(); if(args.length>0) { fname = args[0]; } try { BufferedReader reader = new BufferedReader( new FileReader(fname) ); String Line = null; while ((Line = reader.readLine()) != null) { list.add(Line); } reader.close(); Collections.sort(list ); PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(save_filename + ".csv"))); for (String string : list) { writer.println(string); } writer.close(); } catch (FileNotFoundException e) { System.out.println("ファイルがありません"); } catch (IOException e) { System.out.println("ファイルがありません"); } } public static String getFileName(){ Date d = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss"); return sdf.format(d); } }

  • 答えを教えてください

    javaの課題でわからないことがあるので質問します。 2つ目のファイルに書かれているSgStdInTestを、 1つ目のファイルのどこかに入れてコンパイルして 動かせるようにしたいのですが、どうすればいいですか? よろしくおねがいします。 ______1つ目(ファイル名StdInTest.java)_ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class StdInTest { public static void main(String args[]){ try{ System.out.print("Input : "); BufferedReader r = new BufferedReader( new InputStreamReader(System.in)); String str = r.readLine(); System.out.println("Your Input : " + str); }catch(IOException e) { e.printStackTrace(); } } } ____2つ目(ファイル名SgStdInTest.java)______ class SgStdInTest{ private String input; public void setInput(String input){ this.input = input ; } public String getInput(){ return input; } }

専門家に質問してみよう