Python -- 解析文件(docx、pdf 和 odt)并将内容转换为我的数据模型

3 投票
2 回答
7930 浏览
提问于 2025-04-18 14:05

我正在写一个工具,用来导入和导出docx、pdf和odt文件,这些文件里写了一本书。

我们已经有一个处理.epub格式的工具了,现在想把功能扩展一下,让网站的用户有更多的选择。

到目前为止,我看过了PDFMiner,还发现docx格式其实是基于openxml格式的,所以word/document.xml文件实际上包含了所有内容,我可以用lxml来解析它。

我想问的是:我希望能解析这些文件的内容,从中提取出章节名称、图片(如果有的话)和章节文本,这样我就可以把这些内容放进一个数据模型里:

Book --> o2m --> Chapter --> o2m --> Image

显然,PDFMiner有一个.get_outlines()的函数,可以帮我返回目录。但它无法把返回的章节号和标题与实际的章节页面关联起来。

更麻烦的是,docx和odt文件里的内容只是段落——<\w:sdt>——元素,里面有属性和子元素。

我在寻找一些想法,想从这些文件类型中提取出一些结构,如果需要的话,我可以把这些想法(2到3个)作为建议格式提供给希望通过这些文件格式导入书籍的用户。

2 个回答

0

(Python 3 的回答)

当我在寻找一个可以读取 .docx 文件的工具时,我在这里找到了一个:http://etienned.github.io/posts/extract-text-from-word-docx-simply/

这个工具的功能很简单,就是从 .docx 文件中提取文本,并把它作为字符串返回;不同的段落之间依然有明显的分隔,因为中间有换行符,但其他的格式信息就会丢失。我觉得这可能包括脚注和尾注的丢失,不过如果你只想要正文内容,这个工具效果很好。

我在 Windows 10 和 OS X 上都测试过,两个系统上都能顺利运行。下面是它导入的内容:

import zipfile
try:
    from xml.etree.cElementTree import XML
    print("cElementTree")
except ImportError:
    from xml.etree.ElementTree import XML
    print("ElementTree")

编辑:

如果在函数的主体部分,你把

'word/document.xml'

替换成

'word/footnotes.xml'

或者

'word/endnotes.xml'

你就可以分别获取脚注和尾注了。

不过,文本中它们的位置标记会丢失。

1

Textract 是我遇到的最好的工具,可以用来解析各种文件格式。

它可以解析大多数文件格式。

你可以在 Github 上找到这个项目。

这里是官方的 文档

撰写回答