![](/img/trans.png)
[英]PDF Clown Highlight multiple search word is failing for PDF contains images, color text, Complex Diagrams
[英]Optimize PDF Word Search
我有一个在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文档/文件中获得匹配。 这称为频率,可以针对要搜索的文档和字段进行计算。
来自Lucene / Lucene.net搜索中的示例,如何计算每个文档的点击数?
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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.