我有一个应用程序,它遍历pdf文件目录并搜索字符串。我使用PDFBox从PDF中提取文本,代码非常简单。一开始搜索13个文件,它花了一分半钟来加载结果,但我注意到PDFBox在日志文件文件中放入了很多东西。我更改了日志级别,这很有帮助,但加载页面仍然需要30多秒。有人对我如何优化代码或确定文档中有多少点击有任何建议吗?我用Lucene玩了一下,但它似乎只给你一个目录中的点击数,而不是一个特定文件中的点击数。
这是我的代码,以获得文本的PDF。
public static String parsePDF (String filename) throws IOException
{
FileInputStream fi = new FileInputStream(new File(filename));
PDFParser parser = new PDFParser(fi);
parser.parse();
COSDocument cd = parser.getDocument();
PDFTextStripper stripper = new PDFTextStripper();
String pdfText = stripper.getText(new PDDocument(cd));
cd.close();
return pdfText;
}
Lucene将允许您单独索引每个文档。
而不是直接使用PDFBox。您可以使用Apache Tika提取文本并将其提供给lucene。Tika在内部使用PDFBox。然而,它提供了易于使用的api以及无缝地从任何类型的文档中提取内容的能力。一旦你有了目录中每个文件的lucene文档,你就可以对完整的索引执行搜索。
Lucene匹配搜索词,并返回与文档内容匹配的结果(文件)的数量。
也可以使用lucene api在每个lucene文档/文件中获得命中。这被称为术语频率,可以根据被搜索的文档和字段来计算。
List docIds = // doc ids for documents that matched the query,
// sorted in ascending order
int totalFreq = 0;
TermDocs termDocs = reader.termDocs();
termDocs.seek(new Term("my_field", "congress"));
for (int id : docIds) {
termDocs.skipTo(id);
totalFreq += termDocs.freq();
}