「Javaで学ぶ自然言語処理と機械学習」AozoraFilter.javaをSJIS読込・UTF-8書出に改造
概要
「Javaで学ぶ自然言語処理と機械学習」AozoraFilter.javaをSJIS読込・UTF-8書出に改造。
青空文庫のファイルをUTF-8に変換する作業を無くす。
変更点
filterメソッド変更後
Charsetを追加しただけ。
public void filter(String fileName) { String title = null; // 作品名 String author = null; // 著者名 int countForHeader = 0; // ヘッダ範囲判定のために"----"の数を数える int countForFooter = 0; // フッタ範囲判定のために空行の数を数える String restOfLine = ""; // 最後に読んだ行の末尾の未出力部分 try { BufferedReader br = new BufferedReader(new FileReader(fileName + ".txt", Charset.forName("SJIS"))); PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(fileName + "_filtered.txt"))); title = new String(br.readLine().getBytes(), Charset.forName("UTF-8")); author = new String(br.readLine().getBytes(), Charset.forName("UTF-8")); System.out.println(title); System.out.println(author); String line; while ((line = br.readLine()) != null) { line = new String(line.getBytes(), Charset.forName("UTF-8")); // ヘッダとフッタのための処理 if (line.startsWith("----")) { countForHeader++; continue; } if (countForHeader < 2) { continue; // ヘッダが終わるまで読み飛ばす } if (line.equals("")) { countForFooter++; continue; } if (countForFooter >= 3 && line.startsWith("底本")) { break; // フッタが始まったので,読み込みを終了する } countForFooter = 0; // 本文行の整形と出力 String line2 = deleteSpaces(line); // 先頭の空白の除去 String line3 = deleteRuby(line2); // ルビ・注記の除去 restOfLine = outputSentences(line3, pw, restOfLine); // 文単位で出力 } if (!restOfLine.equals("")) { pw.println(restOfLine); } br.close(); pw.close(); } catch (Exception ex) { ex.printStackTrace(); } }