用Java解析文档结构
我们需要使用 Java 从给定的文本文档中获取树状结构。使用的文件类型应该是通用且开放的(rtf、odt,...)。目前我们使用 Apache Tika 解析多个文档中的纯文本。
我们应该使用什么文件类型和 API 才能最可靠地解析正确的结构?如果 Tika 可以做到这一点,我会很高兴看到任何演示。
例如,我们应该从给定的文档中获取此类数据:
Main Heading
Heading 1
Heading 1.1
Heading 2
Heading 2.2
Main Heading 是论文的标题。论文有两个主标题,标题 1 和标题 2,并且都有一个副标题。我们还应该获取每个标题(段落文本)下的内容。
任何帮助表示赞赏。
We need to get tree like structure from a given text document using Java. Used file type should be common and open (rtf, odt, ...). Currently we use Apache Tika to parse plain text from multiple documents.
What file type and API we should use so that we could most reliably get the correct structure parsed? If this is possible with Tika, I would be happy to see any demonstrations.
For example, we should get this kind of data from the given document:
Main Heading
Heading 1
Heading 1.1
Heading 2
Heading 2.2
Main Heading is the title of the paper. Paper has two main headings, Heading 1 and Heading 2 and they both have one subheadings. We should also get contents under each heading (paragraph text).
Any help is appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
OpenDocument (.odt) 实际上是一个包含多个 xml 文件的 zip 包。 Content.xml 包含文档的实际文本内容。我们对标题感兴趣,它们可以在 text:h 标签内找到。详细了解 ODT。
我找到了一个使用 QueryPath 从 .odt 文件中提取标题的实现。
由于最初的问题是关于 Java 的,所以就在这里。首先,我们需要使用 ZipFile 访问 content.xml。然后我们使用SAX从content.xml中解析出xml内容。示例代码简单地打印出所有标题:
示例代码:
使用的ContentHandler的相关部分如下所示:
OpenDocument (.odt) is practically a zip package containing multiple xml files. Content.xml contains the actual textual content of the document. We are interested in headings and they can be found inside text:h tags. Read more about ODT.
I found an implementation for extracting headings from .odt files with QueryPath.
Since the original question was about Java, here it is. First we need to get access to content.xml by using ZipFile. Then we use SAX to parse xml content out of content.xml. Sample code simply prints out all the headings:
Sample code:
Relevant parts of used ContentHandler look like this: