【问题标题】:Extract text from large files从大文件中提取文本
【发布时间】:2014-02-26 11:05:19
【问题描述】:

我需要从大文件中提取文本(最大限制为 50MB) 文件可能是 doc、ppt、xls、txt 或 pdf 格式。到目前为止,我使用了 Apache POI 'http://poi.apache.org/'

用于 Microsoft Office 文档和 PDFBox 从 PDF 中提取文本。但是,随着文件变大,特别是以下文件,提取过程会变慢。 到目前为止我取得的成果:

1.PPTX - 45MB - 大约 3 分钟

2.PDF - 62MB - 2 分钟左右

3.Docx - 32MB - 15 秒左右

4.XLS - 17MB - 10 秒左右

5.XLSX - 7MB - 大约 20 秒

我需要这个过程很快。我可以使用哪些 API 来实现这一点,哪些最佳实践可以帮助我提高应用程序的性能?

【问题讨论】:

  • 读取 60 MB 的 .txt 文件需要多长时间?
  • 由于 PDF 是一种仅在页面中的自定义位置绘制字母组的格式,因此在获取文本之前,必须找到、排序并粘合所有这些字母组。这可能需要一些时间......不过,取决于所使用的 PDF 库,当然有更快和更慢的解决方案......
  • 我正在寻找比 2 分钟更快的 62MB 文件。

标签: java excel apache-poi pdfbox text-extraction


【解决方案1】:

pptx、docx 和 xlsl 是带有 XML 文件的 zip(content.xml 和 sharedStrings.xml 左右)。如果您不需要上下文中的文本,即 DOM(整个文档的模型),您可以自己处理这些 XML,然后依次解析所有内容。

对于 PDF,您可以尝试使用 itext,按顺序阅读 pdf。事实上,有几个 pdf 库的示例文本提取器。


从 XML 中提取文本意味着顺序读取 XML 文本,并且只关注 >< 之间的文本部分。

困难的部分是 xlsx,其中单元格值是共享的:间接引用。我宁愿使用 JDBC 查询,但这也需要时间。有几种选择:ODBC-JDBC 桥接,还有合适的驱动程序。

编程确实需要时间,应该在小样本文档上完成。

【讨论】:

  • 如何使用 XML?上次我使用 Jet OleDB 从 excel 从 .xls 文件中提取了一些文本,但我不记得它有多快。请给我估计一下使用 xmls 提取文本需要多长时间?
  • 扩展答案;如果不考虑 OleDB 或 JDBC,运行时间应该会快很多,但我不敢说它会快四倍以上。那里没有大型文档的经验。
【解决方案2】:

试试Apache Tika。 Tika 用于使用现有的解析器库从各种文档中检测和提取元数据和结构化文本内容。

【讨论】:

  • 它在后端使用了我已经在使用的 Apache POI。在 Tika 中再次使用 POI 不会有任何区别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-29
  • 2017-12-30
  • 1970-01-01
  • 1970-01-01
  • 2020-02-18
  • 2018-10-10
  • 2011-04-30
相关资源
最近更新 更多