【发布时间】:2012-05-03 18:13:03
【问题描述】:
我正在尝试阅读一篇技术论文,将所有句子分开,使用过滤器查找句子中的关键术语和短语,然后创建自己的摘要。
到目前为止,我有两个 BufferedReaders 读取一个带有段落的文本文件,然后读入我的过滤器。然后将每一行存储到 ArrayList 并打印到控制台以测试它们是否正在正确读取。
我想知道我是否通过使用BufferedReader 而不是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);
}
}
【问题讨论】:
-
如果您将整个文件读入单个
String(出于性能原因,我会使用StringBuilder)然后您可以使用String'ssplit()函数将其拆分为基于数组的在您的正则表达式上,您可以使用它来获取句子。 -
好的,我会试一试,但是建设者的能力应该是多少,因为技术论文的长度和所有的好东西都会有所不同
-
您的文件是否真的很大以至于无法保存在内存中?
-
StringBuilder将增长以容纳所有必要的字符。但是,如果论文很长(比如你会用完内存),你可以定期(当你达到一定大小时)进行拆分并清除缓冲区(确保在最后保存任何部分句子)。 -
没有内存应该不是问题
标签: java filtering bufferedreader