1

技術論文を読み、すべての文を分離し、フィルターを使用して文中の重要な用語やフレーズを見つけ、独自の要約を作成しようとしています。

これまでのところBufferedReaders、段落を含むテキスト ファイルを 2 つ読み取り、フィルターを読み取っています。次に、各行が に格納されArrayList、コンソールに出力されて、正しく読み取られているかどうかをテストします。

BufferedReaderの代わりに aを使用して、これに正しい方法でアプローチしているかどうかを知りたいですScanner。「。」の後のすべての文を印刷できるようにしたいだけです。(ドット)、'!' (感嘆符)、または「?」(疑問符)今のところ、ファイルが正しく読み取られていることがわかります。

これまでの私のコードは次のとおりです。

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.io.*;
import java.util.Scanner;


public class Filtering {

    public static void main(String[] args) throws IOException {
        ArrayList<String> lines1 = new ArrayList<String>();
        ArrayList<String> lines2 = new ArrayList<String>();

        try {
            FileInputStream fstream1 = new FileInputStream("paper.txt");
            FileInputStream fstream2 = new FileInputStream("filter2.txt");  
            DataInputStream inStream1 = new  DataInputStream (fstream1);
            DataInputStream inStream2 = new DataInputStream (fstream2);

            BufferedReader br1 = new BufferedReader(
                new InputStreamReader(inStream1));
            BufferedReader br2 = new BufferedReader(
                new InputStreamReader(inStream2));

            String strLine1;
            String strLine2;

            while ((strLine1 = br1.readLine()) != null) {
                lines1.add(strLine1);
            }

            while ((strLine2 = br2.readLine()) != null) {
                lines2.add(strLine2);
            }

            inStream1.close();
            inStream2.close();
        }   
        catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
        }

        System.out.println(lines1);
        System.out.println(lines2);
    }
}
4

1 に答える 1

1
  • BufferedReader を使用してファイルを読み取ることをお勧めします。これは、各バイトに 1 つずつアクセスする代わりにファイルをバッファリングするためです。
  • DataInputStream は必要ありません
  • InputStreamReader で文字エンコーディングを指定する必要があります
  • すべての文字列を StringBuilder に蓄積して、テキスト全体を単一の参照に含めることができます
  • BreakIteratorを調べて、テキストを文に分割することをお勧めします。getSentenceInstance() を見てください。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.BreakIterator;

public class Filtering {

    public static void main(String[] args) throws IOException {
        File paperFile = new File("paper.txt");
        File filterFile = new File("filter2.txt");
        // If you want you could roughly initiate the stringbuilders to their
        // approximate future size
        StringBuilder paper = new StringBuilder();
        StringBuilder filter2 = new StringBuilder();

        FileInputStream fstream1 = null;
        FileInputStream fstream2 = null;
        try {
            fstream1 = new FileInputStream(paperFile);
            fstream2 = new FileInputStream(filterFile);

            BufferedReader br1 = new BufferedReader(new InputStreamReader(fstream1, "UTF-8"));
            BufferedReader br2 = new BufferedReader(new InputStreamReader(fstream2, "UTF-8"));

            String strLine1;
            String strLine2;

            while ((strLine1 = br1.readLine()) != null) {
                paper.append(strLine1).append('\n');
            }
            while ((strLine2 = br2.readLine()) != null) {
                filter2.append(strLine2).append('\n');
            }

        }

        catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
        } finally {
            if (fstream1 != null) {
                fstream1.close();
            }
            if (fstream2 != null) {
                fstream2.close();
            }
        }
        String paperString = paper.toString();
        String filterString = filter2.toString();
        System.out.println(paperString);
        System.out.println(filterString);

        // To break it into sentences
        BreakIterator boundary = BreakIterator.getSentenceInstance();
        boundary.setText(paperString);
        int start = boundary.first();
        for (int end = boundary.next(); end != BreakIterator.DONE; start = end, end = boundary.next()) {
            System.out.println(paper.substring(start, end));
        }
    }

}
于 2012-05-02T14:53:03.143 に答える