「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();
}
}



