前提・実現したいこと
javaで商品レビューのデータをまとめたcsvを読み込み,その文章の漢字率を1レビューごとに求めて,その結果を再びcsvまたはtxt形式で出力したいです。
csvは、参考になった人数, レビュー本文という順番で保存しています。参考になった人数は、漢字率演算には含めないようにもしたいです。
例としては
400,"私は黒を購入しました!。サイズはぴったりです。"
300,"サイズはぴったりでしたが、質感はあまり良くないです。"
↑この形式に漢字率を付与した形での出力を目指しています。
30%,400,"私は黒を購入しました!。サイズはぴったりです。"
40%,300,"サイズはぴったりでしたが、質感はあまり良くないです。"
↑このような感じです。
発生している問題・エラーメッセージ
csvを読み込んで漢字率を出すことはできそうなのですが、それはcsv全体の漢字率になってしまいます。csvを読み込むときreadLineが一行ずつ読み込むとあったので、てっきり簡単だと思ったらcsv全体を読み込んでいるようで、修正しようとすると、どんどん分からなくなっていきました。
なので、最初に形にしたソースコードを貼ります。
csvを読み込んで、文章の文字数、漢字の数、非漢字数を表示した後でファイルにそれぞれ出力しました。下のkanjiCheckで漢字かどうか判断しています。
エラーメッセージ
該当のソースコード
java #言語
ソースコード
import java.io.*; class KanjiTest { // 入力ファイル static final String reviewFile = "pc_review.csv"; // 出力ファイル static final String allFile = "全.txt"; static final String kanjiFile = "漢字.txt"; static final String nonKanjiFile = "非漢字.txt"; public static void main(String args[]){ try{ // // 入力ファイル // BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(reviewFile),"utf-8")); // // 出力ファイル // // 全 PrintWriter pw1 = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(allFile),"Shift_JIS"))); // 漢字 PrintWriter pw2 = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(kanjiFile),"Shift_JIS"))); // 非漢字 PrintWriter pw3 = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(nonKanjiFile),"Shift_JIS"))); int countAll = 0; int countKanji = 0; int countNonKanji = 0; String line; while ((line = br.readLine()) != null) { for (int i = 0; i < line.length(); i++) { char c = line.charAt(i); countAll++; pw1.println(c); if (kanjiCheck(c)) { countKanji++; pw2.println(c); } else { countNonKanji++; pw3.println(c); } } } System.out.println("全文字数:" + countAll); System.out.println("漢字数:" + countKanji); System.out.println("非漢字数:" + countNonKanji); pw1.close(); pw2.close(); pw3.close(); } catch (IOException ex) { ex.printStackTrace(); } } private static boolean kanjiCheck(char kanji) { boolean flag = false; try { String str = "" + kanji; byte[] b = str.getBytes("utf-8"); if (b[0] >= (byte)0xE4 && b[0] <= (byte)0xE9) { flag = true; } } catch(Exception e) { System.out.println("文字コードチェックエラー"); } return flag; } }
試したこと
どうやらAllayListを使えば、うまく行きそうな気配があるので試していますが、よくわかりません。
出力ファイルは漢字率が付与されたcsv一つだけでいいと思います。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー