我有一个应用程序,可以遍历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;
}发布于 2011-10-15 04:08:29
Lucene将允许您分别为每个文档建立索引。
而不是直接使用PDFBox。您可以使用Apache Tika提取文本并将其提供给lucene。Tika在内部使用PDFBox。但是,它提供了易于使用的应用程序接口以及从文档的any types中无缝提取内容的能力。
一旦您有了目录中每个文件的每个lucene文档,您就可以对完整的索引执行搜索。
Lucene匹配搜索词,并返回与文档内容匹配的结果(文件)数量。
也可以使用lucene api在每个lucene文档/文件中获取命中结果。这称为术语频率,可以为正在搜索的文档和字段计算频率。
来自In a Lucene / Lucene.net search, how do I count the number of hits per document?的示例
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();
}https://stackoverflow.com/questions/7770304
复制相似问题