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

Java

Posted by shi-n