我正在寻找一个pdf和MS office文档格式的解析器来从文件中提取表格信息.当我看到Apache Tika时,正在考虑编写单独的实现.我可以从任何这些文件格式中提取全文.但我的要求是提取表格数据,我希望在键值格式中有2列.我检查了网络中可用的大部分内容,但找不到任何解决方案.有什么指针吗?
Tika 不解析表信息。事实上,令人困惑的部分是它转换了表格标签,<p>这实际上意味着我们失去了结构。直到当前版本 1.14 都是这种情况。将来这可能会得到补救,但目前还没有计划朝着这个方向努力。
你可以参考JIRA,它在 Tika 中讨论了这个缺点。在 JIRA 之后,wiki也更新以反映这种不足。[免责声明:我提出了 JIRA]
现在是解决方案部分:根据我的经验,Java 的 Aspose.Pdf在将 pdf 转换为 html 方面做得非常出色。但它的许可。您可以通过免费试用版检查质量。代码和示例链接。
好吧,我继续使用 apache poi 为 MS 格式单独实现了它。我回到 Tika 阅读 PDF。Tika 对文档所做的是将其输出为“基于 SAX 的 XHTML 事件” 1
所以基本上我们可以编写一个自定义的 SAX 实现来解析文件。
结构文本输出将采用以下形式(避免元细节)
<body><div class="page"><p/>
<p>Key1 Value1 </p>
<p>Key2 Value2 </p>
<p>Key3 Value3</p>
<p/>
</div>
</body>
Run Code Online (Sandbox Code Playgroud)
在我们的 SAX 实现中,我们可以将第一部分视为键(对于我的问题,我已经知道键并且我正在寻找值,所以它是一个子字符串)。
用逻辑覆盖 public void characters(char[] ch, int start, int length)
请注意,就我而言,内容的结构是固定的,而且我知道输入的密钥,因此这样做很容易。这不是通用的解决方案