首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化PDF Word搜索

优化PDF Word搜索
EN

Stack Overflow用户
提问于 2011-10-14 23:58:23
回答 1查看 1.1K关注 0票数 0

我有一个应用程序,可以遍历pdf文件的目录并搜索字符串。我使用PDFBox从PDF中提取文本,代码非常简单。起初,要搜索13个文件,加载结果需要半分钟,但我注意到PDFBox在日志文件中放了很多东西。我更改了日志记录级别,这很有帮助,但加载一个页面仍然需要30秒以上。有没有人对我如何优化代码或者用另一种方法来确定文档中有多少点击量有什么建议?我使用了Lucene,但它似乎只给出了目录中的点击数,而不是特定文件中的点击数。

下面是我从PDF中获取文本的代码。

代码语言:javascript
复制
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;
 }
EN

回答 1

Stack Overflow用户

发布于 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?的示例

代码语言:javascript
复制
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();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7770304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档